условное утверждение работает некорректно-Python - PullRequest
0 голосов
/ 09 февраля 2019

У меня есть два сценария: 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 лет, *Заявление 1009 * не должно выполняться, и все же оно выполняется.Может кто-нибудь объяснить, почему?

Если заметить, если я изменю or на and, он не будет выполнен.

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

Да, это способ, которым вы группируете вещи.Его всегда оценивают как Истина, а не делают то, что вы ожидаете.Вы можете использовать оператор «any», чтобы избежать условной записи несколько раз.

elif any(x > 50 for x in [player_1.age, player_2.age]) and abs(player_1.age-player_2.age) > 10:
0 голосов
/ 09 февраля 2019

Это способ группировки условных операторов.Вам нужно изменить его на:

elif (player_1.age > 50) or (player_2.age > 50) and abs(player_1.age-player_2.age) > 
10:

Он оценивает условное короткое замыкание, означающее, что, поскольку player_1.age1 находится слева от ИЛИ, а player_1.age не равен нулю (оценивается какtrue) что elif оценивается как true перед выполнением других проверок.См. Раздел 3.8 этого https://www.pythonlearn.com/html-008/cfbook004.html

...