在使用While函数和IF的同时遇到一些困难,以便在没有符合INPUT的情况下,在结果正确之前会反复询问相同的问题。
county = input(str("County London/Kent/Essex: ")).upper()
while county != ("LONDON") and county != ("KENT") and county != ("ESSEX"):
if county == ("LONDON"):
county = ("LONDON")
elif county == ("KENT"):
county = ("KENT")
elif county == ("ESSEX"):
county = ("ESSEX")
else:
county = input(str("Invalid - Please enter an accepted county: ")).upper()
如果用户没有输入伦敦,肯特或埃塞克斯,则会询问输入消息,直到输入其中一个消息。
答案 0 :(得分:0)
让我猜一下。您收到的错误如
NameError: name 'London' is not defined
原因如下:input
将其读取的内容视为Python表达式,而不是字符串;因此,当您输入London
时,它会尝试将其解释为名为London
的变量名称。尝试输入字符串:"London"
- 它会起作用。
input
的作用示例:
>>> print input("-> ")
-> [1, 2, 3][0] + 4
5
它是5,因为input
将它所读取的内容视为Python exrpession。在这种情况下,它会看到三个数字的列表,取第一个数字并将其加4。
你真的不应该使用input()
。执行以下操作:
import sys
...
...
else:
print "some prompt goes here"
line = sys.stdin.readline().strip().upper()
评论中提到的 修改,使用raw_input()
代替sys.stdin.readline()
会更好。完全忘了它;在很长一段时间内没有编写从终端读取的程序:)
答案 1 :(得分:0)
尝试这样的事情:
counties = ["London", "Kent", "Essex"] # list of counties
prompt = "County " + "/".join(counties) + ": " # prompt of the input
while True:
county = raw_input(prompt).title() # using str.title to format the input
if county in counties: # the input is part of the list
county = county.upper()
break
else: # the input is invalid, try again
print "Invalid - Please enter an accepted county."
注意:我使用raw_input()
代替input()
答案 2 :(得分:0)
如果您可以使用Python 3而不是2,则代码将按原样顺利运行。
他们将input()
更改为不在3.4中将输入作为python表达式进行评估,以便像旧的raw_input()
一样工作。
这是python 2的文档:
输入([提示])
相当于eval(raw_input(prompt))。
此功能不会捕获用户错误。如果输入语法无效,则会引发SyntaxError。其他例外 如果评估过程中出现错误,可能会被提出。
如果加载了readline模块,则input()将使用它来提供精细的行编辑和历史记录功能。
考虑将raw_input()函数用于用户的一般输入。
和python 3:
输入([提示])
如果存在prompt参数,则将其写入标准输出而不带尾随换行符。然后该函数从中读取一行 输入,将其转换为字符串(剥离尾随换行符),和 返回。读取EOF时,会引发EOFError。例如:
>>> s = input('--> ') --> Monty Python's Flying Circus >>> s "Monty Python's Flying Circus"
如果加载了readline模块,则input()将使用它来提供精细的行编辑和历史记录功能。