条件语句无法正常工作-python

时间:2019-02-09 14:45:42

标签: python class conditional

我有两个脚本: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,它将无法执行。

2 个答案:

答案 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

的3.8节

答案 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: