1

从代码中可以看出它是不言自明的,但我想检查输入是否不等于这些值而不是再次询问。我认为这会起作用,但它不起作用而且它有故障,有什么更好的方法来做到这一点?

type=input("Please choose an option: ")
while type.isalpha() == False:
    type=input("Please choose an option: ")
while type != ("a" and "A" and "b" and "B" and "c" or "C"):
    type=input("Please choose an option: ")
4

3 回答 3

4

只需while not type in ("a","A","b","B" ...)检查是否type是列出的元素之一。

正如评论中提到的,上面的代码等价于while type != someListElement因为andandor被首先评估。

于 2013-10-03T23:52:39.320 回答
1

你需要写:

while (type != "a" and type !="A" and type !="b" and type !="B" and type !="c" or type !="C"):
于 2013-10-03T23:55:17.940 回答
1

我认为最简单的解决方案是使用

type = raw_input("Please choose an option: ")
while type not in list('AaBbCc'):
    type = raw_input("Please choose an option: ")

list将从字符串转换为单字符串列表,然后您可以使用in. 我认为您不需要测试isalpha,因为您要检查的所有内容都已经是一封信。

此外,您应该始终使用raw_input而不是input获取用户输入,因为raw_input始终返回一个字符串,同时input尝试eval用户输入的内容,这不是您想要的。

(这是假设您使用的是 Python 2。如果您使用的是 Python 3,input则为raw_input以前的版本,raw_input不再存在。)

于 2013-10-04T00:27:05.290 回答