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

1 投票
6 回答
1292 浏览
提问于 2025-04-16 13:27

我正在用Python创建一个简单的冒险游戏。现在我需要问用户他们想选择选项A还是B,所以我用一个循环来实现这个功能:

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 个回答

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

被理解为

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

而且因为 "a" 总是 true,所以这个检查的结果总是 true

3

这段代码的意思是,原来的写法 AB != "A" or "a" or "B" or "b" 是不对的。正确的写法应该是 AB.upper() not in ('A','B')

简单来说,第一行代码试图检查变量 AB 的值是否不等于 "A"、"a"、"B" 或 "b"。但是这样写会导致一些问题,因为它并没有正确地比较每一个值。

而第二行代码则是把 AB 的值转换成大写字母,然后检查这个大写字母是否不在 ('A', 'B') 这个列表里。如果不在,就说明 AB 的值不是 "A" 或 "B"。

这样写更清晰,也能避免错误。

5

你的 while 语句是在检查条件 or,而你提供的字符串总是会让这个条件成立,也就是说它总是为真。

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

这意味着:

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

非空字符串总是被认为是真,所以写 or "B" 这个条件总是成立,程序会一直要求输入。更好的写法是:

while AB.lower() not in ('a','b'):

撰写回答