0

我在这里很绝望。试图为我的一门课做一个程序,但遇到了很多麻烦。我添加了一个输入循环,因为部分要求是用户必须能够输入任意多的代码行。问题是,现在我得到索引超出范围的错误,我认为这是因为我正在打破以停止循环。

这是我的代码:

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

4 回答 4

2

在您的 while 循环中,因为您在设置 textinput = input() 之后正在测试 textinput == "",这意味着当它中断时,textinput 将始终为 ""!当您尝试访问 words[0] 时,会出现 index out of range 错误;“”中没有元素,所以你会得到一个错误。

此外,由于每次通过 while 循环时都会覆盖 textinput 的值,因此您实际上无法跟踪用户之前输入的所有内容,因为 textinput 会不断变化。相反,您可以将while循环下的所有代码放入while循环中。尝试:

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()  
    way = 'way'
    ay = 'ay'
    vowels = ('a', 'e', 'i', 'o', 'u','A', 'E', 'I', 'O', 'U')
    sentence = ""

    for word in words:
        for first in word:
            if first in vowels:
                pig_words = first[0:] + way
                sentence = sentence + pig_words
            else:
                pig_words = first[1:] + first[0] + ay
                sentence = sentence + pig_words
    print(sentence)

(顺便说一句,当您编写“for line in text”时,您也没有定义文本,并且您从未在该 for 循环中实际使用过“line”。只是需要注意的一些小注释,祝你好运!)

于 2015-10-16T04:02:50.097 回答
0

您可以使用 2 参数形式继续读取数据并单独处理iter

from functools import partial

for line in iter(partial(input, "Eng pharse> "), ""):
    print(line) # instead of printing, process the line here

它比看起来更简单:当你给出iter2 个参数并迭代它返回的内容时,它会调用第一个参数并产生它返回的内容,直到它返回等于第二个参数的东西。

并且partial(f, arg)lambda: f(arg).

所以上面的代码会打印他读到的内容,直到用户输入空行。

于 2015-10-16T07:04:09.973 回答
0

您在每次循环迭代时重新分配 textinput 变量。相反,您可以尝试以下操作:

textinput = ""
while True:
    current_input = (input("Please enter an English phrase: ")).lower()
    if current_input == "":
        break
    else:
        textinput += current_input
于 2015-10-16T03:55:34.557 回答
0

您的问题存在是因为该break语句仅跳出while循环,然后它将继续运行words = textinput.split()并继续运行。

要在收到空输入时停止脚本,请使用quit()而不是break.

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 == "":
        quit()
于 2015-10-16T03:58:50.653 回答