string.lower () в if l oop не строчные в строке Python? - PullRequest
0 голосов
/ 24 марта 2020
def translate(phrase):
    translation= ""
    for letter in phrase:
        if letter.lower() in "aeiou":
            if letter.isupper():
                translation = translation + "G"
            else:
                translation = translation + "g"

        else:
            translation = translation + letter
    return translation

print(translate(input("Enter a phrase: ")))

(Это программа для смены гласных букв на букву 'g' или 'G' в зависимости от того, идет ли она в верхнем или нижнем регистре)

Почему это работает? Поскольку существует функция letter.lower (), не должна ли она преобразовать эту букву в строчную? таким образом, следующее выражение if ("if letter.isupper ():") никогда не будет верным ...

Я в замешательстве, потому что знаю только C и пытаюсь выучить Python. В C, если бы я это сделал, он преобразовал бы буквенную переменную в строчную, поэтому следующий оператор if никогда не будет истинным. Я предполагаю, что функции внутри, если операторы в Python не изменяют / изменяют переменные внутри тех же функций ...? Но опять же, для меня это не имело бы смысла ... Что я не так думаю?

1 Ответ

1 голос
/ 24 марта 2020

С https://docs.python.org/3/library/stdtypes.html#str .lower :

Возвращать копию строки со всеми символами в регистре, преобразованными в нижний регистр.

letter.lower() не изменяет letter при вызове, возвращает новое значение.

...