Python为什么.lower()无法在我的其余代码中永久应用? [重复]

问题描述 投票:-2回答:4

我正在学习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 string transform lowercase
4个回答
2
投票

Python中的strings是不可变的。

字符串是Unicode代码点的不可变序列。

而且Python中strings类的lower()方法不会就地修改对象,但会返回一个新的str对象,其所有字符均小写。

Lower():

返回字符串的副本,并将所有大小写的字符都转换为小写。对于8位字符串,此方法与语言环境有关。

也参见str

使用的小写字母算法在Unicode标准的3.13节中进行了描述。

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

lower()

1
投票

[letter = letter.lower() 仅适用于您在其中使用的行。如果要永久拥有它,则必须像这样分配它:

.lower()

1
投票

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


1
投票

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

您需要重新分配回名称letter才能获得所需的行为:

letter

或者更好,首先将for letter in phrase: letter = letter.lower() if letter in "aeouiy": ... 的全部小写:

phrase
© www.soinside.com 2019 - 2024. All rights reserved.