如何为猪拉丁语和 izzle 翻译创建代码以及应用它们的代码?

问题描述

目标: 所以,我的目标是编写一个代码一个单词翻译成猪拉丁语和伊兹尔语。然后编写另一个代码“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'

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...