Как изменить данные в словаре?
Решаю одну задачу по словарям.
Напишите программу, которая принимает на стандартный вход список игр футбольных команд с результатом матча и выводит на стандартный вывод сводную таблицу результатов всех матчей.
За победу команде начисляется 3 очка, за поражение — 0, за ничью — 1.
Формат ввода следующий:
В первой строке указано целое число nn — количество завершенных игр.
После этого идет nn строк, в которых записаны результаты игры в следующем формате:
Первая_команда;Забито_первой_командой;Вторая_команда;Забито_второй_командой
Вывод программы необходимо оформить следующим образом:
Команда:Всего_игр Побед Ничьих Поражений Всего_очков
Конкретный пример ввода-вывода приведён ниже.
Входные данные:
3
Спартак;9;Зенит;10
Локомотив;12;Зенит;3
Спартак;8;Локомотив;15
Выходные данные:
Спартак:2 0 0 2 0
Зенит:2 1 0 1 3
Локомотив:2 2 0 0 6
col = int(input())
spi = []
slov = {}
for i in range(col):
team = input().split(';')
team[1], team[3] = int(team[1]), int(team[3])
spi.append(team)
a = slov.fromkeys([team[0], team[2]], [0, 0, 0, 0, 0])
slov.update(a)
for i in range(len(spi)):
for j in range(1):
if spi[i][1] > spi[i][3]:
print(spi[i])
for key, value in slov.items():
if spi[i][0] in key:
value[0] = value[0] + 1
value[1] = value[1] + 1
value[2] = value[2] + 0
value[3] = value[3] + 0
value[4] = (value[1] * 3) + (value[2] * 1)
print(slov)
Не понимаю почему программа выдает такие данные:
{'Спартак': [1, 1, 0, 0, 3], 'Зенит': [0, 0, 0, 0, 0], 'Локомотив': [1, 1, 0, 0, 3]}
По моей задумке она должна вывести такие данные в цикле при определённых условиях:
{'Спартак': [0, 0, 0, 0, 0], 'Зенит': [0, 0, 0, 0, 0], 'Локомотив': [1, 1, 0, 0, 3]}
Кто сможет объяснить почему так ведёт себя код?
Ответы (1 шт):
У вас не были прописаны варианты для ничьи, победы другой команды. Также не учитывались количество игр, если попадало в условие. Изменил код на более менее рабочее:
col = int(input())
spi = []
slov = {}
def newUpdate(oldValue, newValue):
s = oldValue.copy()
for i in range(5):
s[i] += newValue[i]
return s
for i in range(col):
team = input().split(';')
team[1], team[3] = int(team[1]), int(team[3])
spi.append(team)
a = slov.fromkeys([team[0], team[2]], [0, 0, 0, 0, 0])
slov.update(a)
for i in range(len(spi)):
if spi[i][1] > spi[i][3]:
tmp = newUpdate(slov[spi[i][0]], [1, 1, 0, 0, 3])
slov.update({spi[i][0]: tmp})
tmp = newUpdate(slov[spi[i][2]], [1, 0, 0, 1, 0])
slov.update({spi[i][2]: tmp})
elif spi[i][1] == spi[i][3]:
tmp = newUpdate(slov[spi[i][0]], [1, 0, 1, 0, 1])
slov.update({spi[i][0]: tmp})
tmp = newUpdate(slov[spi[i][2]], [1, 0, 1, 0, 1])
slov.update({spi[i][2]: tmp})
else:
tmp = newUpdate(slov[spi[i][2]], [1, 1, 0, 0, 3])
slov.update({spi[i][2]: tmp})
tmp = newUpdate(slov[spi[i][0]], [1, 0, 0, 1, 0])
slov.update({spi[i][0]: tmp})
print(slov)