Python 为什么 .lower() 不能永久应用到我的其余代码中?

Python why doesn't .lower() apply permanently in the rest of my code?

我正在学习 python 并且在课程中,我不得不制作一个将元音转换为字母的翻译器 "g"。 在程序中,我必须检查要翻译的短语是否有任何大写元音字母,以便用大写字母 "G" 替换它们。 而且我不明白为什么 .lower() 不适用于其余代码?在我看来,如果我在下一行应用 letter.lower() 变量 letter 的值应该仍然是小写的。这是我的代码:

def translate(phrase):
translated = ""
for letter in phrase:
    if letter.lower() in "aeouiy":
        if letter.isupper():
            translated = translated + "G"
        else:
            translated = translated + "g"
    else:
        translated = translated + letter
return translated
print(translate(input("enter phrase to translate into giraffe elegant language: ")))

Python中的strings是不可变的。

Strings are immutable sequences of Unicode code points.

并且 Python 中 str class 的 lower() 方法不会就地修改对象,而是 returns 一个新的 str 对象所有字符都小写。

Lower():

Return a copy of the string with all the cased characters converted to lowercase. For 8-bit strings, this method is locale-dependent.

参见this

The lowercasing algorithm used is described in section 3.13 of the Unicode Standard.

您需要将 str 对象重新分配给 lower() 方法返回的对象。像这样:

letter = letter.lower()

.lower()只适用于你正在使用它的线路。如果你想永久拥有它,你必须这样分配它:

letter = letter.lower()

letter.lower() 仅适用于该行。您需要将 letter 本身更改为 letter = letter.lower().

不,letter.lower() returns 一个新的小写 letter。 (在 Python 中,字符串是不可变的。)

您需要重新分配回名称 letter 以获得您想要的行为:

for letter in phrase:
    letter = letter.lower()
    if letter in "aeouiy":
    ...

或者更好的是,首先将 phrase 全部小写:

phrase = phrase.lower()
for letter in phrase:
   ...