如何为 pig latin 和 izzle 翻译创建代码以及同时应用它们的代码?

How to create codes for pig latin and izzle translation and a code to apply them both?

目标: 因此,我的目标是编写代码将单词翻译成 pig latin 和 izzle 语言。然后编写另一个代码 "apply_language_game" 输入一些数据,另一个输入是他们想要传输的语言(pig latin 或 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],就像单词 'my' 你可以替换整个 带有 'izzle' 的单词或在单词末尾附加“-izzle”。

代码: 因此,我编写了将单词转换为 pig latin 和 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', 'e', 'i', 'o', '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 来测试我的代码。 文件包含: “水果和蔬菜和蔬菜的预算和蔬菜在商店和蔬菜清洁水果和蔬菜”

该代码适用于 pig latin,但不适用于 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", line 67, 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'