appliks
@appliks
Работает? Не трогай.

Задача из stepik. Как исправить проблему с занесением в список?

5f18d2e5c4f1b930010115.png
5f18d2da31efb489747523.png
Помучался, наделал костылей, и всё равно не получается. Ошибка в том, что результаты одной команды (Локомотив ) меняются с результатами второй команды (Спартак).
n = int(input())
teams = dict()

for i in range(n):
    team1, r1, team2, r2= input().split(';')

    if team1 not in teams.keys():
        teams[team1] = [0, 0, 0, 0, 0]

    if team2 not in teams.keys():
        teams[team2] = [0, 0, 0, 0, 0]       
 
    teams[team1][0] += 1
    teams[team2][0] += 1

    if r1> r2:
        teams[team1][1] += 1
        teams[team1][4] += 3
        teams[team2][3] += 1
    elif r1< r2: 
        teams[team2][1] += 1
        teams[team2][4] += 3
        teams[team1][3] += 1
    else:
        teams[team2][2] += 1
        teams[team2][4] += 1
        teams[team1][2] += 1
        teams[team1][4] += 1      
    
for key, value in teams.items():
    print(key, end=':')

    for v in value:
        print(v, end=' ')

    print()

Сначала думал проблема в выводе (самостоятельно не смог сделать, посмотрел в комментариях), потом сделал костыль, и он вывел также. Буду благодарен любой помощи
  • Вопрос задан
  • 931 просмотр
Решения вопроса 1
@gorodnev
Самая основная проблема Вашего кода - это неправильное сравнение типов.
Вот в этой строчке вы получаете название команды и ее очки, но все эти переменные имеют тип string.
team1, r1, team2, r2= input().split(';')

И сравниваются они соответственно в лексикографическом порядке. Например,
попробуйте сравнить 119 и 12 как числа, и как строки ('119' и '12'). Результаты могут удивить :)
Мое решение:
spoiler
import collections

results = collections.defaultdict(list)
n = int(input())
for _ in range(n):
  team1, score1, team2, score2 = input().strip().split(';')
  score1 = int(score1)
  score2 = int(score2)
  if score1 == score2:
    results[team1].append(1)
    results[team2].append(1)
    continue

  if score1 > score2:
    results[team1].append(3)
    results[team2].append(0)
  else:
    results[team2].append(3)
    results[team1].append(0)

for team, scores in results.items():
  games = str(len(scores))
  wins = str(scores.count(3))
  draws = str(scores.count(1))
  loses = str(scores.count(0))
  total = str(sum(scores))
  print('%s:%s' % (team, ' '.join((games, wins, draws, loses, total))))
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы