使用Python 3将猪拉丁语翻译成英语
在下面的代码中,你会看到我已经写了一个程序,可以把英语翻译成猪拉丁语。这个程序遵循两个规则:
- 如果一个单词以元音字母开头,就在后面加上“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 看起来很简单。但是按照你的规则,它可能会变成 rapst 或 traps。
也许可以尝试一种方法,就是不断尝试各种可能性,直到找到一个符合英语单词的结果。你可以先准备一个单词列表:
with open("/usr/share/dict/words","r") as f:
wordlist = f.read().splitlines()
然后在 toEnglish
这个部分,逐步回溯每次变化的结果(可以加一个 if word in wordlist:
来测试每个 rapst、traps 等等),如果在列表中找到,就确定这个单词。
不过这种方法对于像 "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'
接着,使用find
或index
来找到那个特别的'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