Строки и целые числа в Python - PullRequest
0 голосов
/ 08 июня 2018

Это мой файл данных (он называется «studentdata.txt»)

joe 10 15 20 30 40
bill 23 16 19 22
sue 8 22 17 14 32 17 24 21 2 9 11 17
grace 12 28 21 45 26 10
john 14 32 25 16 89

Мне нужно рассчитать среднюю оценку для каждого учащегося и распечатать имя ученика вместе со средней оценкой.Я могу без проблем извлечь имя и определить количество баллов за экзамен, но не могу понять, как суммировать баллы за экзамен.Это то, что я до сих пор:

file=open("studentdata.txt","r")

for aline in file:    
    data=aline.split()    

    print((data[0]),"Average grade:")
    print(len(data[1:]))


file.close()  

Ответы [ 3 ]

0 голосов
/ 08 июня 2018

Попробуйте приведенный ниже код, просто разбейте каждую строку на пробелы, затем получите числа не с именем, чтобы индексирование было i.strip().split()[1:], затем используйте map для преобразования этого числа в целое число, затем используйте statistics.mean, чтобы получить среднее значение:

from statistics import mean
d = {}
with open('studentdata.txt','r') as f:
   for i in f.readlines():
      d[i.split()[0]] = mean(list(map(int,i.strip().split()[1:])))
print(d)

Выход:

{'joe': 23.0, 'bill': 20.0, 'sue': 16.166666666666668, 'grace': 23.666666666666668, 'john': 35.2}
0 голосов
/ 08 июня 2018

Попробуйте это?

file = open("studentdata.txt", "r")
for aline in file:
    data = aline.split()

    # Convert list of string numerals to int
    grades = [int(grade) for grade in data[1:]]

    # Find average by dividing sum by length of numbers list
    average = sum(grades)/len(data[1:])

    print((data[0]), "Average grade:", str(average))

file.close()
0 голосов
/ 08 июня 2018

Кажется, что большая часть этого уже сделана, и вы уже хорошо понимаете, как разбить каждую строку на два нужных вам компонента, так что вы очень близки!

Во-первых, так какданные считываются в виде строки, вам необходимо преобразовать часть ваших данных в целые числа:

for line in file:
    tmp = line.split()
    name, scores = tmp[0], list(map(int, tmp[1:]))

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

average = sum(scores)/len(scores)

Давайте свяжем все это вместе, присвоив словарю:

dct[name] = average

И мы получим:

{'joe': 23.0, 'bill': 20.0, 'sue': 16.166666666666668, 'grace': 23.666666666666668, 'john': 35.2}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...