嗨,我正在尝试制作猪拉丁语翻译器,当我尝试处理以元音开头的单词时出现了一个问题。目的是,对于开头带有元音的单词,后缀将是单词+“ ay”中的第一个辅音(而不是词首中的第一个字母)单词+“ ay”),例如“ ear”将是“ ear-ray”而不是“ ar-eay”
但是,我正在努力寻找一种方法来实现这一目标。
这是我到目前为止所拥有的:(它取自较大的代码段)
elif word[0]=="a" or word[0]=="e" or word[0]=="i" or word[0]=="o" or word[0]=="u":
for letter in word[1:]:
while consonantfound == False:
if letter!="a" and letter!="e" and letter!="i" and letter!="o" and letter!="u":
consonantfound = True
consonant = letter
suffix = consonant + "ay"
newWord = i + "-" + suffix
这使程序无法产生输出并继续运行。
我觉得问题在于循环的顺序,但是我已经尝试过了,没有解决方案。可能还有我不知道的其他事情。
您对如何使其工作有建议吗?
任何帮助将不胜感激。
答案 0 :(得分:3)
尝试一下:
VOWELS = ('a', 'e', 'i', 'o', 'u')
def first_consonant(word):
for letter in word:
if letter.lower() not in VOWELS:
return letter
def pig_latin(word):
return '%s-%say' % (word, first_consonant(word) or word[0])
它尝试查找单词中的第一个辅音并将ay附加到末尾。如果它不存在,那么它会按照单词的第一个字母出现(我不知道这是否正确,但是您可以根据需要进行调整)。
答案 1 :(得分:0)
我们可以使用生成器表达式获取下一个凝聚剂及其索引。如果没有成分,我们将返回(None, None)
next(((letter, index) for index, letter in enumerate(word) if letter not in 'aioue'), (None, None))
我们可以稍微分解一下以了解发生了什么。
enumerate
是一个返回迭代器的函数,该迭代器将可迭代的元素与其索引配对。因此list(enumerate('abc'))
是[(0, 'a'), (1, 'b'), (2, 'c')]
。我们要获取第一个辅音的索引,以便我们知道在哪里进行切分。
((letter, index) for index, letter in enumerate(word) if letter not in 'aioue')
是一个生成器表达式。生成器将一一生成值。这一切都是从我们列举的字母中过滤出元音。
next(generator, (None, None))
使我们从生成器中获取下一项(将是第一项)。如果没有下一项(所有元音中的一个词),它将返回第二个参数(None, None)