条件语句工作正确的Python

问题描述 投票:-1回答:2

我有两个脚本: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声明不应该执行,但它确实。可能有人请解释一下为什么?

在一个侧面说明,如果我改变orand那么就不会执行。

python class conditional
2个回答
1
投票

它的方式,您是分组的条件语句。您需要将其更改为:

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节


0
投票

是的,这是你在分组事物的方式。它总为真,而不是做你所期望的。您可以使用“任何”操作,以避免有条件多次写。

elif any(x > 50 for x in [player_1.age, player_2.age]) and abs(player_1.age-player_2.age) > 10:
© www.soinside.com 2019 - 2024. All rights reserved.