我正在改编Codecademy的pyglatin.py来制作一个接受和翻译多个单词的翻译器。但是,我在翻译多个单词时遇到了麻烦。我已经能够将原始输入转移到列表并翻译第一个,但我不知道如何引用列表中的下一个项目。任何帮助将不胜感激。
def piglatin1():
pig = 'ay'
original = raw_input('Enter a phrase:').split(' ')
L = list(original)
print L
i = iter(L)
item = i.next()
for item in L:
if len(item) > 0 and item.isalpha():
word = item.lower()
first = word
if first == "a" or first == "e" or first == "i" or first == "o" or first =="u":
new_word = word + pig
print new_word
else:
new_word = word[1:] + word[0:1] + pig
# first word translated
L = []
M = L[:]
L.append(new_word)
print L # secondary list created.
again = raw_input('Translate again? Y/N')
print again
if len(again) > 0 and again.isalpha():
second_word = again.lower()
if second_word == "y":
return piglatin()
else:
print "Okay Dokey!"
else:
print 'Letters only please!'
return piglatin1()
答案 0 :(得分:4)
我最近也在研究这个问题,并提出了以下解决方案(而不是使用范围,使用enumerate来获取索引)。
for index, item in enumerate(L):
next = index + 1
if next < len(L):
print index, item, next
此示例显示如何访问当前索引,当前项目,然后是列表中的下一个项目(如果它存在于列表的边界内)。
答案 1 :(得分:3)
以下是一些值得注意的事项。
i = iter(L)
和item = i.next()
是不必要的。它们对此方法没有影响,因为您之后会在item
行中立即重新定义for item in L
。继续并注释掉这两行,以查看它是否对您的输出进行了任何更改。for item in L
将遍历列表中的每个项目。无论您在此循环中编写什么代码,都会对列表中的每个项执行一次。变量item
是迭代列表元素的句柄。for i in range(0,len(L))
。然后L[i]
将成为当前项目,L[i+1]
您将提供后续项目。 答案 2 :(得分:0)
一步一步:
如果您以这种方式设置变量原件:
original = raw_input('Enter a phrase:').split()
它已经是一个列表,所以需要额外的任务。
这些行的目的是什么?
i = iter(L)
item = i.next()
在一个循环中,你将变量分配给单词,当它实际上只是单词的第一个字母时,所以它会更好:first = word[0]
然后,如果你想检查首先是否是元音,你可以这样做:
if first in 'aeuoiy'
回答您的实际问题:不要将L分配给空列表!
如果你想重复一个函数的动作,你可以再次调用它,不需要重写代码。
答案 3 :(得分:0)
代码存在一些细微的问题,但我认为有一个主要原因,它不会重复。
为了处理整个字符串
again = raw_input('Translate again? Y/N')
并且它的后续行应该被带到for语句之外。 此外,您似乎将L设置为循环内的空字符串:
L = []
以下是您的代码的修改版本,它将遍历整个句子,然后再请求另一个。
def piglatin():
pig = 'ay'
while True:
L = raw_input('Enter a phrase:').split(' ')
M = []
for item in L:
if len(item) > 0 and item.isalpha():
word = item.lower()
first = word
if first == "a" or first == "e" or first == "i" or first == "o" or first =="u":
new_word = word + pig
print new_word
else:
new_word = word[1:] + word[0:1] + pig
M.append(new_word)
else:
print 'Letters only please!'
print M # secondary list created.
again = raw_input('Translate again? Y/N')
print again
if len(again) > 0 and again.isalpha():
second_word = again.lower()
if second_word == "n":
print "Okay Dokey!"
break
所做的更改:
希望这有帮助。