Python if语句搭配and/or时如何用括号分隔or连接的两个选项
问题原因及解决方法
你写的条件语句没有达到预期,核心是混淆了Python逻辑运算符的运算规则和自然语言的表达逻辑:
错误原因
(sodium or nitrogen) <= 5的实际执行逻辑和你想的完全不一样:
- Python中
or会优先判断左侧操作数的布尔真值:如果左侧值为真(数值类型只要不等于0都为真),整个or表达式会直接返回左侧的值,根本不会读取nitrogen的数值;只有左侧值为假时才会返回右侧的值 - 所以你写的代码等价于只判断两个变量中的其中一个是否小于等于5,完全达不到「sodium和nitrogen只要有一个小于等于5就满足条件」的预期
你忽略的Python语法特性是:逻辑运算符and/or返回的是参与运算的操作数本身,不是单纯的布尔结果;同时比较运算符不会自动分配给or两侧的所有元素,不能像自然语言一样省略重复的比较条件。
正确写法
如果要实现「mass大于等于2.6,且sodium、nitrogen任意一个小于等于5」的逻辑,需要把两个比较条件分别写全,用括号包裹or连接的两个完整判断:
if mass >= 2.6 and (sodium <= 5 or nitrogen <= 5):
内容的提问来源于stack exchange,提问作者AkukuDanger
相关产品推荐
相关产品推荐

