#python
Вопрос:
- Pxxx = идентификатор игрока,
- 1 = победа (счет 1),
- 0 = проигрыш (счет -1),
- -1 = не играет (оценка 0),
- 503 = в игре/игра не закончена (оценка 0)
player_score = [['P001', '1', '0', '-1', '503', '1'], ['P067', '1', '1', '0', '-1', '503'], ['P218', '0', '1', '1', '-1', '-1'], ['P101', '0', '0', '1', '1', '503'], ['P456', '1', '1', '-1', '1', '-1']]
Мой код:
scores_table = {"1" : 1, "0" : -1} # use the key parameter of max to compute the score res = max(player_score, key=lambda x: sum(scores_table[i] for i in x[1:] if i in scores_table))[0] print(res)
Я смог получить только идентификатор игрока, не зная, как хранить общий выигрыш и проигрыши.
Я хотел бы найти игрока с наибольшим количеством очков и распечатать его идентификатор игрока, общее количество побед и общее количество поражений
Ожидаемый результат:
The top player is P456 with 3 wins and 0 loses.
Комментарии:
1. Не могли бы вы поделиться тем, какой код вы пробовали до сих пор
Ответ №1:
IIUC, вы можете найти игрока и использовать Counter
, и print
вам понравится, что вы хотите:
gt;gt;gt; from collections import Counter gt;gt;gt; lst_res = next(ps for ps in player_score if ps[0] == res) gt;gt;gt; lst_res ['P456', '1', '1', '-1', '1', '-1'] gt;gt;gt; dct_res = Counter(lst_res) gt;gt;gt; print(f"The top player is {res} with {dct_res.get('1', 0)} wins and {dct_res.get('0',0)} loses") The top player is P456 with 3 wins and 0 loses
Ответ №2:
sums = [] for i in player_score: for j in i[1:]: score = 0 if j != "503": score = int(j) sums.append(score) winner = player_score[sums.index(max(sums))][0]
Ответ №3:
Вы также можете преобразовать счет, количество выигрышей и количество проигрышей в словарь и попытаться получить из него максимальный балл, как показано ниже :-
player_score = [['P001', '1', '0', '-1', '503', '1'], ['P067', '1', '1', '0', '-1', '503'], ['P218', '0', '1', '1', '-1', '-1'], ['P101', '0', '0', '1', '1', '503'], ['P456', '1', '1', '-1', '1', '-1']] DStats = dict() for player_stats in player_score: score, wins, loses = 0, 0, 0 for i in player_stats: if "P" in i: PID = i elif i == '1': wins = 1 score = 1 elif i == '0': loses = 1 score -= 1 else: DStats[PID] = (score, wins, loses) max_score = max([i[0] for i in DStats.values()]) for i in DStats: if DStats[i][0] == max_score: print(f"the top player is {i} with {DStats[i][1]} wins and {DStats[i][2]} loses")
Что здесь происходит, так это то, что я подсчитал выигрыши, проигрыши и счет соответственно и сохранил их в словаре с идентификатором игрока в качестве ключа, затем я перебираю значения словаря и получаю максимальный балл, затем я перебираю словарь, чтобы найти игрока с максимальным баллом и распечатать его статистику соответственно.
Ответ №4:
Попробуйте что-нибудь вроде этого:
max_player = ["P0",0] for p in player_score: t_max = 0 for s in p: if "P" in s or '503' in s: continue else: t_max = int(s) if t_max gt; max_player[1]: max_player[1] = t_max max_player[0] = p[0]
Комментарии:
1. ваша
max_player
переменная должна быть списком, а не кортежем, чтобы вы могли обновлять ее значения. Кортежи не изменчивы.2. @pySam1459 ты прав, я отредактировал свой ответ.