当输入包含"Qu"时,为什么 .pop 函数不从列表元音中删除字母"u"和"U"?



如果单词以字母"qu";,字母";u〃/"U〃;应该从元音列表中删除,但是,我的代码不起作用。我该怎么解决这个问题?

就上下文而言,此代码用于将英语转换为Pig拉丁语。

vowels = ["a", "e", "i", "o", "u", "A", "E", "I", "O", "U"]
qu = ["qu", "Qu"]
def firstVowelIndex(w):
for index, char in enumerate(w):
if char in vowels:
return index

def encryptVow(w):
w = w + "-way"
return w
def encryptCon(w):
wordToList = list(w)
if wordToList[0:2] in qu:
vowels.pop(4)
vowels.pop(9)
index = firstVowelIndex(w)
return w[index:] + "-" + w[:index] + 'ay'
vowels.append("y")
vowels.append("Y")
index = firstVowelIndex(w)
return w[index:] + "-" + w[:index] + 'ay'
def encrypt(w):
wordToList = list(w)
if wordToList[0] in vowels:
return encryptVow(w)
elif wordToList[0] not in vowels:
return encryptCon(w)

if __name__ == '__main__':
print(encrypt("quiz"))

首先,将vowels用作全局变量。你打电话后就没事了CCD_ 2仅一次。但如果你多次使用它,一旦去掉字母"u"one_answers"u",在遇到以"q"开头的单词后,它们就不会出现了。

每次调用函数encrypt()时,都会多次附加"y"one_answers"y"。

方法pop()不能用字符串调用,必须用整数调用。使用search()

但是,在firstVowelIndex()函数的开头添加print(vowels)。您将看到vowels列表是如何更改的。

有关全局变量,请参阅python文档。

我认为这应该符合您在问题中提出的要求。

if word.lower().startswith("qu"):
vowels.remove("U")
vowels.remove("u")

p.S:你不必把一个字符串变成一个列表,因为字符串是一个可迭代的字符。因此,您可以对其进行子索引,而无需更改数据类型。因此,你也可以使用类似的东西:

if word[0:2].lower() == "qu":
vowels.remove("U")
vowels.remove("u")

但我认为使用字符串方法startswith()更明确。

还要考虑,如果您对多个单词使用相同的vowels列表。上面的代码将引发一个ValueError,因为实际上你之前已经删除了这些元音。

最新更新