@anton_zaboev

Как перебрать объекты и найти максимальное значение свойства у одного из объектов?

Здравствуйте! Столкнулся с задачей найти победителя по кол-во очков. Входные данные такие
player_1 = Player('user_name_1')
    player_2 = Player('user_name_2')
    player_1.scores = 50
    player_2.scores = 35
    players = [player_1, player_2]

class Player:
    def __init__(self, name):
        self.name = name
        self.words = []
        self.scores = 0

    def __repr__(self):
        return self.name


Сейчас я решил задачу вот так
if players[0].scores == players[1].scores:
        print('Ничья!')
    elif players[0].scores > players[1].scores:
        print(f'Победил игрок – {players[0].name}')
        print(f'======')
    elif players[0].scores < players[1].scores:
        print(f'Победил игрок – {players[1].name}')
        print(f'======')


Но есть ли другой способ более красивый как этот можно реализовать?

К примеру как то так
if players[0].scores == players[1].scores:
        print('Ничья!')

    winner = ???
    print(f'Победил игрок – {winner.name}')
    print(f'======')


Но я не знаю как мне найти объект с максимальным значением свойства объекта,
  • Вопрос задан
  • 99 просмотров
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
winner = max(player1, player2, key=lambda p: p.scores)

Параметр key задаёт функцию-ключ. Эта функция должна для каждого сравниваемого объекта вернуть его "вес", и max() тогда вернёт целый объект с наивысшим "весом".
Но вообще твое решение тоже норм.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы