2015-05-03 3 views
0

У меня есть набор имен с тремя оценками, назначенными каждому из них в файле .txt, и я хочу напечатать средний балл для каждого имени. До сих пор у меня есть следующий код, но я зациклился на том, как усреднять баллы и печатать их в оболочке python.Вычисление среднего значения для каждой строки баллов в текстовом файле

File_name=open('class_2.txt', 'r') 
List_ = File_name.readlines() 
List_.sort() 
print('Class average scores below :') 
for line in List_: 
    print(line) 

Этот код выводит имена в алфавитном порядке с баллами, прикрепленных к ним, но он не печатает средний балл.

Файл .txt отформатирован следующим образом:

tom,6,4,7 

steve,3,6,4 

john,10,9,8 

mike,6,8,9 
+2

Посмотрите на 'split' функцию, так что вы можете получить отдельные номера из линии. Затем вы можете подсчитать их среднее значение и распечатать. – Adalee

+1

Исправьте свой отступ, почему вы отступаете после своего открытого заявления. Кроме того, рассмотрите возможность открытия файла с помощью инструкции WITH, чтобы ваш файл закрывался должным образом. В-третьих, будьте осторожны с именами переменных, они должны быть строчными, и я не вижу необходимости иметь это подчеркивание. – reticentroot

+0

Кто-то просто отклонил мой ответ, но я считаю, что он производит правильный вывод и отличный код. Что-то не так с этим? Я могу только представить, что кто-то неправильно понял, что вы хотите, поэтому, пожалуйста, * укажите желаемый результат * в своем вопросе. И если мой ответ на самом деле хороший, то, пожалуйста, примите его. (ответ mpolednik на самом деле ошибочен, поэтому я понимаю, почему это занижается) –

ответ

-1

Вам не хватает код, чтобы сделать средний расчет. Попробуйте следующую модификацию:

with open('class_2.txt', 'r') as f: 
    List_ = f.readlines() 
    List_.sort() 
    print('Class average scores below :') 
    for line in List_: 
     data = line.split(',') 
     print(data[0], sum([int(score) for score in data[1:]])/len(data) - 1) 

Это работает с помощью метода сплита(), чтобы разделить данные в массив, такие как [ «том», «6», «4», «7»], а затем с помощью языка Python нарезать, чтобы извлечь значения в целые числа, суммировать их и усреднить их.

+1

лучше 'len (data) -1' вместо' 3' –

+1

Отступ здесь по-прежнему не так, и вы не объясняете, почему ваши изменения работают. – reticentroot

+0

, а не добавлять идею 'with' в конец, просто отредактируйте свой первый блок кода, чтобы использовать его. – dbliss

0

Программа:

with open('class_2.txt') as students: 
    for student in sorted(students): 
     name, *scores = student.split(',') 
     average = sum(map(int, scores))/len(scores) 
     print(name, average) 

Выход:

john 9.0 
mike 7.666666666666667 
steve 4.333333333333333 
tom 5.666666666666667 
Смежные вопросы