Для этого в Python цикл while:

def last_vowel(s):   
    Return the last vowel in s if one exists; otherwise, return None.

    i = ________
    while i >= 0:
         if s[i] in 'aeiouAEIOU':
             return s[i]
         i = i - 1
   return None

Вопрос в том, чтобы найти выражение i, которое оказывается len (s) - 1, а не len (s). Может ли кто-нибудь объяснить мне, почему это так?

0
biotecher 2 Янв 2018 в 01:15

2 ответа

Лучший ответ

Это связано с тем, что строки (и массивы, поскольку на самом деле строки являются просто специальными массивами) индексируются 0. Это означает, что хотя строка может иметь длину L, последний элемент на самом деле будет L - 1.

Например, возьмем эту строку

"hello"

Он имеет длину 5, но на самом деле последний символ имеет индекс 4.

+-------+---+---+---+---+---+
| index | 0 | 1 | 2 | 3 | 4 |
+-------+---+---+---+---+---+
| char  | h | e | l | l | o |
+-------+---+---+---+---+---+
0
dangee1705 1 Янв 2018 в 22:22

Индексирование Python основано на 0. Итак, первый символ в string имеет индекс 0, а последний - перед длиной string. См. Эту небольшую таблицу:

String: "hello"
Index :  01234

Посмотрите, как последний символ находится в индексе 4 - это len(...) - 1!


Итак, это объясняет, почему нам нужно инициализировать i как len(s) - 1, поскольку s[len(s) - 1] - это последний символ в s.

Затем алгоритм предлагает также проверить этот символ, чтобы увидеть, гласная ли это, если да, то return гласная, в противном случае уменьшите i на 1 так, чтобы в следующем цикле { {X3}} мы смотрим на предыдущего персонажа.

Затем для этого персонажа применяем те же методы.

Наконец, функция либо вернет гласную, ближайшую к концу, либо достигнет конца цикла while (i == 0) и будет return None, как описано функциональными возможностями функции .

0
Joe Iddon 1 Янв 2018 в 22:25