我正在尝试用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”的问题。我做错了什么?
答案 0 :(得分:5)
您的while
语句正在评估条件or
,对于您提供的字符串,该语句始终为真。
while AB != "A" or "a" or "B" or "b":
表示:
while (AB != "A") or "a" or "B" or "b":
非空字符串始终为True,因此写or "B"
将始终为真,并始终要求输入。最好写:
while AB.lower() not in ('a','b'):
答案 1 :(得分:3)
AB != "A" or "a" or "B" or "b"
应该
AB.upper() not in ('A','B')
答案 2 :(得分:2)
AB != "A" or "a" or "B" or "b"
被解释为
(AB != "A") or ("a") or ("B") or ("b")
由于"a"
始终为true
,因此此检查的结果始终为true
。
答案 3 :(得分:1)
最好使用:
AB = raw_input("A or B?").upper()
然后像其他人建议的那样构建not in
。
答案 4 :(得分:1)
请使用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()
,以及此处发布的其他建议。
答案 5 :(得分:0)
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'))