问题描述
我正在尝试用Python创建一个简单的冒险游戏。 我到了要问用户是否要选择选项A或B的问题,并且正在使用while循环尝试执行此操作:
AB = input("A or B?")
while AB != "A" or "a" or "B" or "b":
input("Choose either A or B")
if AB == "A" or "a":
print("A")
elif AB == "B" or "b":
print("B")
问题是,无论您输入什么内容,都会出现“选择A或B”问题。 我究竟做错了什么?
1楼
您的while
陈述式会根据条件or
评估,这对于您提供的字串总是正确的。
while AB != "A" or "a" or "B" or "b":
手段:
while (AB != "A") or "a" or "B" or "b":
非空字符串始终为True,因此写入or "B"
将始终为true,并始终要求输入。
最好写:
while AB.lower() not in ('a','b'):
2楼
AB != "A" or "a" or "B" or "b"
应该是AB.upper() not in ('A','B')
3楼
AB != "A" or "a" or "B" or "b"
被解释为
(AB != "A") or ("a") or ("B") or ("b")
并且由于"a"
始终为true
,因此此检查的结果始终为true
。
4楼
最好使用:
AB = raw_input("A or B?").upper()
然后不像其他人建议的not in
构建。
5楼
改为使用raw_input()
函数,如下所示:
ab = raw_input('Choose either A or B > ')
while ab.lower() not in ('a', 'b'):
ab = raw_input('Choose either A or B > ')
input()
需要一个Python表达式作为输入;
根据Python文档,它等效于eval(raw_input(prompt))
。
只需使用raw_input()
以及此处发布的其他建议即可。
6楼
try:
inp = raw_input # Python 2.x
except NameError:
inp = input # Python 3.x
def chooseOneOf(msg, options, prompt=': '):
if prompt:
msg += prompt
options = set([str(opt).lower() for opt in options])
while True:
i = inp(msg).strip().lower()
if i in options:
return i
ab = chooseOneOf('Choose either A or B', "ab")
lr = chooseOneOf('Left or right', ('left','right'))