01
Апр
2016

Сортировка данный в цикле в Python

Имеется файл с данными по успеваемости абитуриентов. Он представляет из себя набор строк, где в каждой строке записана следующая информация:

Фамилия;Оценка_по_математике;Оценка_по_физике;Оценка_по_русскому_языку

Atcheson;29;60;70
Holmes;84;72;75
Raleigh;45;46;97
Keat;75;66;60
Laird;51;63;50
Creighton;78;34;81
Hardman;90;66;70
Coleman;87;69;29
Johnson;33;81;92
Fraser;37;65;26
Gill;96;70;71

Поля внутри строки разделены точкой с запятой, оценки — целые числа.

Необходимо написать программу, которая считывает файл с подобной структурой и для каждого абитуриента выводит его среднюю оценку по этим трём предметам на отдельной строке, соответствующей этому абитуриенту.

Также в конце файла, на отдельной строке, через пробел нужно записать средние баллы по математике, физике и русскому языку по всем абитуриентам:

Sample Input:
Петров;85;92;78
Сидоров;100;88;94
Иванов;58;72;85

Sample Output:
85.0
94.0
71.666666667
81.0 84.0 85.666666667

В итоге получился примерно такой код:

lst = []
sred = []
fst = []
scnd = []
thr = []
with open("dataset_3363_4.txt", 'r') as s:
    for line in s:
        lst.extend([line.strip().split(';')])
for i in lst:
    sred.extend((int(i[1]))*2)
    fst.extend([int(i[1])])
    scnd.extend([int(i[2])])
    thr.extend([int(i[3])])
f = open("1.txt", "w+")
for i in sred:
    print (i, file = f)
print ((sum(fst)/len(fst)), (sum(scnd)/len(scnd)), (sum(thr)/len(thr)), file = f)

который должен выводить среднее значение по предметам в списке, но не удается его заставить функционировать. Выводит ошибку:

Traceback (most recent call last):
    sred.extend((int(i[1]))*2)
TypeError: 'int' object is not iterable

Подскажите, каким образом можно заставить функционировать код и по возможности, как лучше его оптимизировать?

Источник: https://ru.stackoverflow.com/questions/508850/%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9-%D0%B2-%D1%86%D0%B8%D0%BA%D0%BB%D0%B5-%D0%B2-python

Share

Тебе может это понравится...