如果单词以字母"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
,因为实际上你之前已经删除了这些元音。