Извиняюсь, если это что-то сложное, я стараюсь предоставить ключевые слова / фразы для вас, чтобы найти, чтобы узнать больше.
Предполагается, что вы ищете отдельное среднее значение для каждого студента:
in_file = open('classgrades.txt', 'r') # python naming style is under_score
out_file = open('classcores.txt', 'w')
all_grades = [] # if you want a class-wide average as well as individual averages
for line in in_file:
# make a list of the things between spaces, like ["studentname", "90", "100"]
student = line.split(' ')[0]
# this next line includes "list comprehension" and "list slicing"
# it gets every item in the list aside from the 0th index (student name),
# and "casts" them to integers so we can do math on them.
grades = [int(g) for g in line.split(' ')[1:]]
# hanging on to every grade for later
all_grades += grades # lists can be +='d like numbers can
average = int(sum(grades) / len(grades))
# str.format() here is one way to do "string interpolation"
out_file.write('{} {}\n'.format(student, average))
total_avg = sum(all_grades) / len(all_grades)
print('Class average: {}'.format(total_avg))
in_file.close()
out_file.close()
Как отмечали другие, полезно привыкнуть закрывать файлы.
Другие ответы здесь используют with open()
(в качестве «диспетчера контекста»), что является наилучшей практикой, поскольку оно автоматически закрывает файл для вас.
Чтобы работать с двумя файлами без контейнера данных (например, словарь Amit d1
), вы должны сделать что-то вроде:
with open('in.txt') as in_file:
with open('out.txt', 'w') as out_file:
... do things ...