“and”和“or”语句的意外结果

在下面的代码中,我希望它打印出来reach here 2,因为没有一个变量满足if语句的条件但是,代码打印出来了reach here 1。


m = 1

type1 = 'a'

type2 = 'x'


if m > 1 and type1 == 'b' and type2 == 'y' or 'z':

    print('reach here 1')

elif type1 == 'a' and type2 == 'x':

    print('reach here 2')

任何人都可以解释代码为什么能够“ reach here 1”,并帮助我更正该if语句,以便它reach here 1仅在m > 1和type1 = 'b'等于type2或'y'时打印'z'?欣赏!


回首忆惘然
浏览 91回答 2
2回答

茅侃侃

触发“reach here 1”语句的原因是第一个 if 条件被评估为 true。由于您没有括号/“和”语句分组,如果所有三个和语句都为真或一个“或”语句为真,则第一个“如果”语句将被评估为真并且“到达此处 1”将是打印。在这种情况下,一个“或”语句为真。Python 正在查看行if m > 1 and type1 == 'b' and type2 == 'y' or 'z'并说,“好吧,m>1,检查。type1 不 == b,所以不,这些 AND 语句是假的。然后,它移动到 OR 语句并说‘或 Z’是真的。在 python 中,任何非空字符串值都为真。因此,'z' 的计算结果为 TRUE 并且满足 OR 条件 - 感谢@juanpa.arrivillaga 进行了此更正。有关详细信息,请参阅此页面:python 中字符串的真值

慕村225694

对于语句,type2 == 'y' or 'z'这不会检查 type2 是“y”还是“z”。相反,您应该使用in将值作为列表的运算符In [19]: m = 1    ...: type1 = 'a'    ...: type2 = 'x'    ...:    ...: if m > 1 and type1 == 'b' and type2 in ["x","z"]:    ...:     print('reach here 1')    ...: elif type1 == 'a' and type2 == 'x':    ...:     print('reach here 2')    ...:reach here 2
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python