我有两个脚本:rank.py和elo_7.py。该ELO脚本就会从排名信息。
在elo_7.py:
...
elif player_1.age or player_2.age > 50 and abs(player_1.age-player_2.age) > 10:
(make some adjustment)
在rank.py:
class Player:
def __init__(self,name,age,rank_nogi,record,weight,school):
self.name=name
self.age=age
self.rank_nogi=rank_nogi
self.record=record
self.weight=weight
self.school=school
player_1=Player('John',20,1600,0,91,'SJJ')
player_2=Player('Sally',29,1650,0,81,'SJJ')
由于年龄的差异只有9岁,没有球员超过50 elif
声明不应该执行,但它确实。可能有人请解释一下为什么?
在一个侧面说明,如果我改变or
到and
那么就不会执行。
它的方式,您是分组的条件语句。您需要将其更改为:
elif (player_1.age > 50) or (player_2.age > 50) and abs(player_1.age-player_2.age) >
10:
它评估了ELIF是做其他检查之前,作为真正的评估条件语句短路意思,既然player_1.age1
为OR的左侧,并且player_1.age非空(计算结果为true)。请参阅本https://www.pythonlearn.com/html-008/cfbook004.html的3.8节
是的,这是你在分组事物的方式。它总为真,而不是做你所期望的。您可以使用“任何”操作,以避免有条件多次写。
elif any(x > 50 for x in [player_1.age, player_2.age]) and abs(player_1.age-player_2.age) > 10: