Python冒险游戏 - >在while循环中选择A或B不起作用!

时间:2011-03-10 19:29:00

标签: python loops if-statement while-loop

我正在尝试用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”的问题。我做错了什么?

6 个答案:

答案 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'))