问题描述
目标: 所以,我的目标是编写一个代码将一个单词翻译成猪拉丁语和伊兹尔语。然后编写另一个代码“apply_language_game”,它接受一些数据的输入和另一个输入,这是他们想要转移的语言(猪拉丁语或izzle)
猪拉丁语: Pig Latin 是最著名的英语游戏之一。你可以把一个英文单词转换成 Pig 拉丁语,将所有辅音移动到单词末尾的第一个元音,然后附加“ay”。 在 ‘hello’ 中,h 在第一个元音之前,所以它会被推到单词 ‘elloh’ 的末尾,然后附加 ‘ay’ 给出:'Ellohay' 在 Chris 中:Chr 位于第一个元音之前,因此它们将被推到句尾。 例如。 “你好,克里斯,你好吗?”变成“Ellohay,ischray owhay areay ouyay?”
伊兹尔: 你可以转换 将英语单词转换为 -izzle 的方式是将最后一个元音和其后的所有辅音替换为“-izzle”。 例如。 “圣诞快乐”变成了“Mizzle Christmizzle”。如果一个单词只有一个元音,如“and”和“a”或 它不包含基本元音 [a,e,i,o,u],就像单词“我的”一样,您可以替换整个 单词与 'izzle' 或附加 '-izzle' 到单词的末尾。
代码: 所以,我编写了代码将一个单词转换为猪拉丁语和izzle。 这是 pig_latin 之一:
def pig_latin(word):
word = list(word)
vowels = ['a','e','i','o','u']
vowel = [x for x in word if x in vowels]
vowel1 = vowel[0]
for i in word:
if word.index(i) < word.index(vowel1):
ind = word.index(i)
word.pop(ind)
word.append(i)
word.append("ay")
return "".join(word)
这是第一个:
def izzle(word):
word = list(word)
vowels = ['a','u']
vowel = [x for x in word if x in vowels]
if vowel == [] or len("".join(vowel)) == 1:
return "".join(word) + "izzle"
else:
vowel1 = vowel[-1]
for i in word:
if word.index(i) >= word.index(vowel1):
ind = word.index(i)
word.pop(ind)
word.append("izzle")
return "".join(word)
这是 apply_language_game 的代码:
def apply_language_game(text,language_game):
text = text.split()
if language_game == pig_latin:
lst = [pig_latin(x) for x in text]
return " ".join(lst)
if language_game == izzle:
lst = [izzle(x) for x in text]
return " ".join(lst)
现在,如果我想通过将包含一些数据的文件转换为 pig latin 和 izzle 来测试我的代码。 该文件包含: “水果蔬菜和蔬菜在预算和商店里的蔬菜和蔬菜清洁水果和蔬菜”
该代码适用于猪拉丁语,但不适用于izzle。 显示以下错误:
Traceback (most recent call last):
File "<input>",line 1,in <module>
File "C:\Program Files\JetBrains\PyCharm Community Edition 2020.2.4\plugins\python-ce\helpers\pydev\_pydev_bundle\pydev_umd.py",line 197,in runfile
pydev_imports.execfile(filename,global_vars,local_vars) # execute the script
File "C:\Program Files\JetBrains\PyCharm Community Edition 2020.2.4\plugins\python-ce\helpers\pydev\_pydev_imps\_pydev_execfile.py",line 18,in execfile
exec(compile(contents+"\n",file,'exec'),glob,loc)
File "C:/Users/Dell/PycharmProjects/pythonHW3/word_analyzer.py",line 84,in <module>
print(apply_language_game(text,izzle))
File "C:/Users/Dell/PycharmProjects/pythonHW3/word_analyzer.py",line 67,in apply_language_game
lst = [izzle(x) for x in text]
File "C:/Users/Dell/PycharmProjects/pythonHW3/word_analyzer.py",in <listcomp>
lst = [izzle(x) for x in text]
File "C:/Users/Dell/PycharmProjects/pythonHW3/word_analyzer.py",line 40,in izzle
if word.index(i) >= word.index(vowel1):
ValueError: 'i' is not in list
请告诉我如何解决这个问题?或者如果我的任何代码有问题,或者我可以如何改进我的代码?
解决方法
由于您正在尝试模仿 pig_latin
函数并对其进行修改以提供 Izzle
翻译,这有点错误,因为转换 pig_latin 的逻辑不同并且具有字符的循环移位,而在 Izzle
中更像是查找和替换,
以下功能对您有用
def izzle(word):
word = list(word)
length = len(word)
vowels = ['a','e','i','o','u']
lastVowelIndex = int()
for i,char in enumerate(word[::-1]):
if char in vowels:
lastVowelIndex = length-i
break
return ''.join(word[:lastVowelIndex-1]) + 'izzle'