而Python中的IF - 循环if语句是不正确的

时间:2017-03-03 13:58:29

标签: python

在使用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()

如果用户没有输入伦敦,肯特或埃塞克斯,则会询问输入消息,直到输入其中一个消息。

3 个答案:

答案 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()将使用它来提供精细的行编辑和历史记录功能。