我有两个脚本: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
,它将无法执行。
答案 0 :(得分:1)
这是对条件语句进行分组的方式。您需要将其更改为:
elif (player_1.age > 50) or (player_2.age > 50) and abs(player_1.age-player_2.age) >
10:
它评估条件短路的含义,因为player_1.age1
位于OR的左侧,并且player_1.age为非null(评估为true),因此elif在执行之前被评估为true其他检查。参见此https://www.pythonlearn.com/html-008/cfbook004.html
答案 1 :(得分:0)
是的,这是您对事物进行分组的方式。它总是将评估结果设为True,而不是按照您的期望进行。您可以使用“ any”运算符来避免多次编写条件语句。
elif any(x > 50 for x in [player_1.age, player_2.age]) and abs(player_1.age-player_2.age) > 10: