我很绝望。试着为我的一个班做一个程序却遇到了很多麻烦。我添加了一个输入循环,因为部分要求是用户必须能够输入任意多行代码。问题是,现在我得到了一个错误,索引超出了范围,我想这是因为我正在中断以停止循环。
这是我的密码:
print ("This program will convert standard English to Pig Latin.")
print("Enter as many lines as you want. To translate, enter a blank submission.")
while True:
textinput = (input("Please enter an English phrase: ")).lower()
if textinput == "":
break
words = textinput.split()
first = words[0]
way = 'way'
ay = 'ay'
vowels = ('a', 'e', 'i', 'o', 'u','A', 'E', 'I', 'O', 'U')
sentence = ""
for line in text:
for words in text.split():
if first in vowels:
pig_words = word[0:] + way
sentence = sentence + pig_words
else:
pig_words = first[1:] + first[0] + ay
sentence = sentence + pig_words
print (sentence)
我绝对是个业余爱好者,我需要所有能得到的帮助/建议。
非常感谢
4条答案
按热度按时间6yoyoihd1#
你的问题存在是因为
break
声明只能从while
循环,然后它将继续运行words = textinput.split()
以及以后。要在收到空输入时停止脚本,请使用
quit()
而不是break
.ppcbkaq52#
在每次循环迭代中重新分配textinput变量。相反,您可以尝试以下方法:
ivqmmu1c3#
在while循环中,因为在设置textinput=input()之后正在测试textinput==“”,这意味着当它中断时,textinput将始终为“”!当您尝试访问单词[0]时,会出现索引超出范围错误;“”中没有元素,因此将出现错误。
另外,由于每次执行while循环时都会覆盖textinput的值,因此实际上无法跟踪用户之前输入的所有内容,因为textinput一直在变化。相反,您可以将while循环下的所有代码放入while循环。尝试:
(顺便说一句,在编写“for line in text”时也没有定义文本,而且在for循环中也从未实际使用过“line”)。只是需要注意的小纸条,祝你好运!)
cygmwpex4#
通过使用2参数形式的
iter
:这比看上去要简单:当你付出时
iter
它将调用第一个参数并返回它所返回的内容,直到它返回与第二个参数相等的内容。以及
partial(f, arg)
同lambda: f(arg)
.所以上面的代码打印他读到的内容,直到用户输入空行。