为什么Python(2.7)OR布尔运算符会错误地返回True



我目前正在通过在线课程自学Python 2.7,并且在布尔运算符方面遇到了一些问题。上下文是一个非常简单的基于封闭文本的冒险游戏(运行需要30秒)。

我添加了下面的if语句,以允许不同的用户输入——然而,即使在say输入是"官样书"或"right"的情况下,也会调用bear_room()函数。我是否滥用了这里的OR函数?抱歉,如果这个问题已经在某个地方得到了答案,我对布尔逻辑的检查只是证实了我目前的想法,所以没有多大帮助!

choice = raw_input()    
if choice == "left" or "Left" or "LEFT":
            bear_room()

您需要使用if choice == "left" or choice == "Left" ...

但是,您可以将条件简化为使用if choice.lower() == 'left'

您误解了or运算符-它对布尔值执行逻辑OR-即TrueFalse。另一方面,你的表情混合了各种类型——让我们来分解一下:

  • choice == "left"是布尔值
  • 'Left'是一个字符串。or运算符无法处理字符串,因此它尝试将其转换为布尔值。它通过检查它是否为空来做到这一点——任何非空字符串都会转换为True,空字符串会转换为False
  • "left"-同上

字符串到布尔值转换后,表达式将变为

if choice == "left" or True or True:
            bear_room()

现在已经清楚了为什么任何输入都会导致bear_room执行。为了正确处理您的案件,您可以执行以下任何操作:

if choice == 'left' or choice == 'Left' or choice == 'LEFT':
    bear_room()
if choice.lower() == 'left': # convert all letters to lower case
    bear_room()
if choice in ['left', 'Left', 'LEFT']: # check choice is in the list of valid options
    bear_room()

最新更新