使用布尔逻辑:和/或和真/假

Var*_*tty 0 python boolean

我正在用Python学习基本的布尔逻辑.我理解了相等的运算符,但是当ands和ors被抛入时会感到困惑.例如,看看下面的代码:

people = 20
cats = 30
dogs = 15

if people < cats:
   print "too many cats! the world is doomed!"

if people == cats or dogs == cats:
   print "this is too hard"
Run Code Online (Sandbox Code Playgroud)

我理解第一个if语句以及它打印的原因.我不知道如何评估第二个if语句.我怎么能改变它来打印那条线?

谢谢你的帮助!

Lev*_*von 5

and要求表达式中的所有部分都True为整个表达式求值True.

or一旦表达式的任何部分评估True整个表达式,就不那么挑剔了True.

在这种情况下,您可能会遇到短路这个术语.它只是意味着我们一旦确定结果就停止评估表达式.

因此,and一旦我们找到一个评估的部分,我们就可以停止查看表达式的其余部分,False因为此时表达式永远无法计算True.

同样地,or一旦我们找到一个部分True,我们就会知道整个表达式,True并且没有理由进一步观察.

对于您发布的代码示例:

if people == cats or dogs == cats:
    print "this is too hard"
Run Code Online (Sandbox Code Playgroud)

如果任何一个的这些,或两者 people == cats,dogs == cats评价True,在整个表达式if语句将变为True.由于它们都不True,因此语句中的if表达式失败,即is False,并且不执行print语句.

最后,如果要打印要执行的语句,则必须确保对布尔表达式求值True.一种方法是将值更改为 dogsto,30因为那样dogs == catsTrue足以制作整个表达式True并使打印执行.