为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

回首忆惘然 2023-03-16 17:14:15
在下面的代码中,我希望它打印出来reach here 2,因为没有一个变量满足if语句的条件但是,代码打印出来了reach here 1。m = 1type1 = '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'?欣赏!
查看完整描述

2 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

触发“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 中字符串的真值


查看完整回答
反对 回复 2023-03-16
?
慕村225694

TA贡献1880条经验 获得超4个赞

对于语句,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


查看完整回答
反对 回复 2023-03-16
  • 2 回答
  • 0 关注
  • 90 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信