我目前正在通过在线课程自学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-即True
或False
。另一方面,你的表情混合了各种类型——让我们来分解一下:
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()