我开始编程,自学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:字符串索引超出范围
玩了很多东西后,我有点难过。任何帮助将不胜感激。
答案 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':