当前位置: 代码迷 >> python >> Python冒险游戏->在while循环中选择A或B无效!
  详细解决方案

Python冒险游戏->在while循环中选择A或B无效!

热度:85   发布时间:2023-07-16 10:13:45.0

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

您的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'):

AB != "A" or "a" or "B" or "b"应该是AB.upper() not in ('A','B')

AB != "A" or "a" or "B" or "b"

被解释为

(AB != "A") or ("a") or ("B") or ("b")

并且由于"a"始终为true ,因此此检查的结果始终为true

最好使用:

AB = raw_input("A or B?").upper()

然后不像其他人建议的not in构建。

改为使用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()以及此处发布的其他建议即可。

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