在猪拉丁语翻译中,不能用y作为元音词(即健身房)

时间:2015-10-08 01:49:23

标签: python

我开始编程,自学Python 3.4.3。我有一个关于猪拉丁语翻译的问题(似乎是每个人最喜欢写的程序,并提出问题)。

我的代码似乎工作正常,除非我写了一个单词,其中y是唯一的元音。

def pig_latin(word):
    print(word)#test
    if word[0] in 'bcdfghjklmnpqrstvwxyz':
        i = 0
        print(word[i]) #test
        while word[i] in 'bcdfghjklmnpqrstvwxyz':
            i += 1
        word = word[i:] + word[:i] + 'ay'
    elif word[0] in 'aeiou':
        word += 'way'
    return word

def main():
    sentence = input('Enter a phrase to convert to pig latin: ')
    word = ''
    pig_sentence = ''
    i = 0
    for i in range(len(sentence)):
        if sentence[i] != ' ':
            word += sentence[i]
        else:
            pig_sentence += pig_latin(word) + ' '
            word = ''
    pig_sentence += pig_latin(word)
    print(pig_sentence)

if __name__ == '__main__':
    main()

我收到的错误是关于这行代码:

while word[i] in 'bcdfghjklmnpqrstvwxyz':

,错误如下:IndexError:字符串索引超出范围

玩了很多东西后,我有点难过。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

你的问题是这个词中没有元音。如果没有元音,则以下while循环永远不会停止,并且您得到一个IndexError:

while word[i] in 'bcdfghjklmnpqrstvwxyz':
    i += 1
word = word[i:] + word[:i] + 'ay'

要解决此问题,请检查我是否小于单词的长度:

while i < len(word) and word[i] in 'bcdfghjklmnpqrstvwxyz':
    i += 1
word = word[i:] + word[:i] + 'ay'

现在有了这个实现,第一个字符不会移动到单词的末尾(即健身房变成gymay),所以写一个条件:

while i < len(word) and word[i] in 'bcdfghjklmnpqrstvwxyz':
    i += 1
if i == len(word): 
    i = 1
word = word[i:] + word[:i] + 'ay'

答案 1 :(得分:0)

您尝试访问word中的某个元素,该元素在该循环用完字母之前不会存在,然后才能找到合适的元音。

试试这个:

while i < len(word) and word[i] in 'bcdfghjklmnpqrstvwxyz':