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

Posted

技术标签:

【中文标题】如何创建用于猪拉丁语和 izzle 翻译的代码以及同时应用它们的代码?【英文标题】:How to create codes for pig latin and izzle translation and a code to apply them both? 【发布时间】:2021-04-04 00:49:42 【问题描述】:

目标: 所以,我的目标是编写一个代码来将一个单词翻译成猪拉丁语和 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],例如单词“my”,您可以替换整个 带有 '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', '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

请告诉我如何解决这个问题?或者如果我的任何代码有问题,或者我可以如何改进我的代码?

【问题讨论】:

【参考方案1】:

由于您试图模仿 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'

【讨论】:

非常感谢...我对您的代码进行了更改,它工作得非常好.. lastVowelIndex = int() 而不是 lastVowelIndex = ' ' 很高兴为您提供帮助...感谢您的编辑,请将其标记为答案

以上是关于如何创建用于猪拉丁语和 izzle 翻译的代码以及同时应用它们的代码?的主要内容,如果未能解决你的问题,请参考以下文章

ruby 原猪拉丁语翻译

text JavaScript中的猪拉丁语翻译

如何在猪拉丁语的日期时间范围内创建缺失的记录

如何在猪拉丁语脚本中没有前导零时将值转换为 hhmm 格式

猪拉丁语中 ToDate 和 MonthsBetween 函数的问题

如何使用猪拉丁语“更新”列