我正在研究Python Pig Game作为一种爱好。我的具体问题是关于第二个if
陈述。为什么在我之前设置if
的{{1}}语句中运行?
player1roll = 'End Turn'
答案 0 :(得分:0)
由于运营商的优先权。 AND比OR更严格,所以你的表达式被评估为:
if dice1roll == 1 or (dice2roll == 1 and player2roll != 'End Turn'):
如果dice1roll等于1,它基本上是 True 和 False 的 OR 操作
参考:https://docs.python.org/3.3/reference/expressions.html#operator-precedence
答案 1 :(得分:0)
在此:
if dice1roll == 1 or dice2roll == 1 and player1roll != 'End Turn':
如果dice1roll == 1
为真,则整个语句由于操作顺序而通过。看看这些分组:
>>> (1 or 0) and 0
0
>>> 1 or (0 and 0)
1
>>> 1 or 1 and 0
1
>>> (1 or 1) and 0
0
>>> 1 or (1 and 0)
1
>>> 0 or 1 and 0
0
>>> (0 or 1) and 0
0
>>> 0 or (1 and 0)
0
请改用以下内容:
if (dice1roll == 1 or dice2roll == 1) and player1roll != 'End Turn':
答案 2 :(得分:0)
我想"第二个if语句"你提到的就是这个:
and
这个与前一个之间的区别在于,第一个和#34;如果A 和 B,请执行此操作",而第二个说"如果A 或 B 和C ,执行此操作"。
"和"如果A和B都为真,则运算符将使语句为 (如果其中一个为假,则该语句为false)。 "或"只有当A 或 B为真时,运算符才会使该语句成立(可以为真,但如果只有一个为真,那么该语句为真)。所以,虽然你需要A和B对于"和#34;陈述是真实的,你只有A或B(或两者)与"或"逻辑运算符是真的。
查看文档:{{3}}(注意:这适用于Python 2.7,但我认为在Python 3中也是如此)
编辑:我想我很慢,现在还有其他答案。一个指向重要的事情,运营商优先。 or
在True or True and False
之前进行评估。所以第二个if语句实际上说:"如果是A或(B和C)",这意味着"如果A是真,或者B 和 C都是是的,这样做"。
换句话说:True
会让你(True or True) and False
,同时False
会让你flex