Обработка текстового файла и дальнейшие подсчеты

Алексей2000

И можете для чайников ) обьяснить, как в питоне осуществляется выполнение программы используя файл, и вообще как это сделать)Заранее спасибо)На вход программы подаётся текст (с клавиатуры или из файла), содержащий протокол проведения игры “Самый умный программист”. Обозначения: ● ID - это целое число от 1 до 32768, являющееся идентификатором участника. Формат входных данных: - число участников Фамилия участника 1 Фамилия участника 2 … Фамилия участника N - число ходов (изменений баллов участников) 10 -5 … 20 Здесь после - ID одного из участников - следует целое число от -200 до 200 - число баллов, которые присвоили участнику с данным идентификатором Требуется подсчитать сумму баллов каждого участника и вывести список фамилий участников и их сумму баллов. Примеры работы программы: Входные данные Вывод программы 2 100 Петров 101 Сидоров 3 100 10 101 5 101 2 Петров 10 Сидоров 7 3 200 Иванов 201 Петров Иванов 1 Петров 0 Сидоров 10202 Сидоров 2 200 1 202 10
3 ответа

Алексей2000

with open('input.txt') as fle:
    res = [i.strip() for i in fle.readlines()]
 
dict_name = {}
for _ in range(int(res.pop(0))):
    ID,name = res.pop(0).split()
    dict_name[ID] = [name,0]
 
for _ in range(int(res.pop(0))):
    ID,ball = res.pop(0).split()
    dict_name[ID][1] += int(ball)
    
for i in sorted(dict_name):
    print(*dict_name[i])


Алексей2000

как вариант
import re
 
with open('input01.txt') as f:
    txt = f.read()
 
id_names, id_scores = map(str.split, 
                          re.search(r'(?:\d+\n((?:\d+\s\w+\n)+))(?:\d+\n((?:\d+\s\d+\n?)+))', txt).groups())
 
d1 = dict(zip(id_names[::2], id_names[1::2]))
d2 = tuple(zip(id_scores[::2], id_scores[1::2]))
res = {d1[x]: sum(int(a[1]) for a in filter(lambda t: t[0] == x, d2)) for x in d1}
print('\n'.join('{} {}'.format(k, v) for k, v in res.items()))
input
2
100 Петров
101 Сидоров
3
100 10
101 5
101 2
output:
Петров 10
Сидоров 7


Алексей2000

Спасибо)))))))