使用Python 3将猪拉丁语翻译成英语

6 投票
5 回答
14637 浏览
提问于 2025-04-18 00:41

在下面的代码中,你会看到我已经写了一个程序,可以把英语翻译成猪拉丁语。这个程序遵循两个规则:

  • 如果一个单词以元音字母开头,就在后面加上“way”(比如:apple变成appleway)。
  • 如果一个单词以辅音字母开头,所有的辅音字母要移到单词的最后面,并在前面加上“a”,后面加上“ay”(比如:please变成easeaplay)。

我知道这听起来有点奇怪,但请你们耐心点。

现在的问题是:在把猪拉丁语翻译回英语时,我不知道怎么让代码准确地分开原单词的根和后缀,因为有些单词是一个辅音字母开头,有些是两个辅音字母开头,等等。

如果有人能帮帮我,我会非常感激。请记住,我还是个新手。

vowels = ('AEIOUaeiou')

def toPigLatin(s):
    sentence = s.split(" ")
    latin = ""
    for word in sentence:
        if word[0] in vowels:
            latin += word + "way" + " "
        else:
            vowel_index = 0
            for letter in word:
                if letter not in vowels: 
                    vowel_index += 1
                    continue
                else: 
                    break
            latin += word[vowel_index:] + "a" + word[:vowel_index] + "ay" + " "
    return latin[:len(latin) - 1]

def toEnglish(s):
    sentence = s.split(" ")
    english = ""
    for word in sentence:
        if word[:len(word) - 4:-1] == 'yaw':
            english += word[:len(word) - 3] + " "
        else: 
            #here's where I'm stuck
    return english

提前谢谢你们!

5 个回答

0

对我来说,我就是这么做的:

word = "python"

word = word[1:len(word)] + word[0] + "ay"
0

我明白你的问题了。

strap 变成 apstray 看起来很简单。但是按照你的规则,它可能会变成 rapsttraps

也许可以尝试一种方法,就是不断尝试各种可能性,直到找到一个符合英语单词的结果。你可以先准备一个单词列表:

with open("/usr/share/dict/words","r") as f:
    wordlist = f.read().splitlines()

然后在 toEnglish 这个部分,逐步回溯每次变化的结果(可以加一个 if word in wordlist: 来测试每个 rapsttraps 等等),如果在列表中找到,就确定这个单词。

不过这种方法对于像 "strap" 这样的单词是肯定行不通的。:-) 具体效果可能因人而异。

0
def toEnglish(s):
    sentence = s.split(" ")
    english = ""
    for word in sentence:
        if word[:len(word) - 4:-1] == 'yaw':
            english += word[:len(word) - 3] + " "
        else:
            index = -3
            # count consonent between two last a
            for letter in reversed(word[:-3]):
                if letter is not 'a':
                    index-=1
                else:
                    break
            english +=  word[index:-2] + word[:index-1] + " "
    return english

应该能解决问题 :)

1

虽然这种方法并不能适用于每一个猪拉丁文单词,正如Kevin和ghoti所提到的,但你可以通过寻找你添加的那个特别的'a'来接近正确答案。

首先,去掉结尾多余的'ay',因为它会干扰你寻找那个特别的'a'

>>> tmp = word[:-2]
>>> tmp
'easeapl'

接着,使用findindex来找到那个特别的'a'的位置。要注意,它会从字符串的开头开始搜索,所以你需要暂时把字符串反转一下:

>>> tmp = tmp[::-1]
>>> tmp
'lpaesae'
>>> ind = tmp.index('a')
>>> ind
2

现在,取出那个索引左边的部分和右边的部分,分别反转它们,然后再组合起来。这些切片操作可能会有点复杂,所以请耐心点:

>>> prefix = tmp[ind-1::-1]
>>> prefix
'pl'
>>> suffix = tmp[:ind:-1]
>>> suffix
'ease'
>>> english = prefix + suffix
>>> english
'please'

想了解更多关于切片的信息,可以看看这个很棒的回答

2

凯文说得对,完全没有歧义的翻译是不可能的,但我觉得这可能就是你想要的内容:

def toEnglish(s):
    sentence = s.split(" ")
    english = ""
    for word in sentence:
        if word[:len(word) - 4:-1] == 'yaw':
            english += word[:len(word) - 3] + " "
        else: 
            noay = word[:len(word) - 2]
            firstconsonants = noay.split("a")[-1]
            consonantsremoved = noay[:len(noay) - (len(firstconsonants)+1)]
            english += firstconsonants + consonantsremoved + " "
    return english

撰写回答