def withoutVowels(string):
for letter in string:
if letter in ["a", "e", "i", "o", "u"]:
noVowelString = string.replace(letter, " ")
return noVowelString
这个功能删除并替换了一个,但不是我,你,我不知道为什么。
答案 0 :(得分:2)
自从我完成Python以来已经有一段时间了,但是在更换第一个元音后,你的函数似乎会返回。
也许这就是你想要的:
def withoutVowels(string):
noVowelString = ""
for letter in string:
if letter in ["a", "e", "i", "o", "u"]:
noVowelString += " "
else:
noVowelString += letter
return noVowelString
答案 1 :(得分:2)
for letter in string:
if letter in ["a", "e", "i", "o", "u"]:
noVowelString = string.replace(letter, " ")
return noVowelString
想一想。你有一个for循环,如果循环体内的一个条件被评估为true,那么你做一些并从函数返回。因此,所有剩余的循环迭代都不会运行。
相反,您可能希望将return
移出循环,因此它仍然可以继续。但是,您还希望保留更改过的字符串,并将其替换为一次,并继续执行该操作:
def withoutVowels(string):
noVowelString = string
for letter in string:
if letter in ["a", "e", "i", "o", "u"]:
noVowelString = noVowelString.replace(letter, " ")
return noVowelString
最后,这一切都没有意义。如果您只想从字符串中删除所有元音,则无需迭代原始字符串的每个字符。相反,你可以循环元音,并删除它们:
def withoutVowels(string):
for vowel in ("a", "e", "i", "o", "u"):
string = string.replace(vowel, "")
return string
答案 2 :(得分:1)
这里有五件事:
你的return语句缩进太多了。一旦控制第一次进入if块,for循环将停止迭代,函数将过早返回。
String对象在Python中是不可变的。因此,str.replace
返回字符串的修改后的副本,而不是修改原始对象。这意味着您需要在for循环的每次迭代中将string
重新分配给副本。
你的for循环应该迭代元音列表,而不是输入字符串。或者,更有效率,一串元音。
因为你的函数应该从字符串删除元音,我认为用空字符串而不是空格替换它们会更好。
您的函数不会删除大写元音。
以下是解决这些问题的函数版本:
def withoutVowels(string):
for vowel in "aeiouAEIOU":
string = string.replace(vowel, "")
return string