出于某种原因,无论变量“msg”存储了什么,都会触发此语句。它应该只对您在代码中看到的内容做出反应。请让我知道我是否正确地写了这句话或如果我需要另一种格式。谢谢你
if (username == "ssj3goku878") or (username == "mgnlive") and msg == "!load":
keyholder.holdForSeconds("F7", 1);
if (username == "ssj3goku878") or (username == "mgnlive") and msg == "!save":
keyholder.holdForSeconds("F8", 1);
你需要另一组括号,即
由于operator precedence,}。例如,与您类似的表达式是:
or
的绑定优先级低于{如括号所示:
^{pr2}$因为
and
具有更高的优先级。在这种情况下,如果a
为真,则表达式将始终为True,而子表达式(b and c)
将不被计算。因此,子表达式的计算结果没有任何区别,因此更改c
的值不会影响结果(当a
为真时为N.B)。在因此,对于您的表达式,每当
username == "ssj3goku878"
为真时,msg
的值与整个结果没有关系,您将发现这两个if语句都执行它们的主体。在若要更正此问题,应显式添加括号以覆盖默认引用:
您可能有2个以上的用户,并且不希望在添加新用户时更改程序,因此最好这样做:
users
列表可以从文件、数据库或其他持久源填充。在这种情况下,in
的优先级高于and
,因此不需要括号,但是显式地添加括号通常比您(或任何正在阅读代码的人)记住(或查找)先例要容易得多,因此这通常更好:Python在or运算符之前计算and运算符(除非它们在括号中)。因此,如果你想用你想要的方式来评估逻辑,你应该加上括号,例如:
有关这些操作员工作的更多信息,请访问: https://docs.python.org/2/library/stdtypes.html#boolean-operations-and-or-not
相关问题 更多 >
编程相关推荐