У меня есть код, который примет легенду об оценках и количество оценок, а затем вернет значения для него. У меня все в порядке, кроме среднего семестра. Вот формула для нахождения среднего за семестр:
homework average * 0.2 + quiz average * 0.2 + project average * 0.6.
Мой код хорошо работает со средними домашними заданиями, средними по тестам и средними по проектам, но не со средними по семестрам. Вот что я написал:
def get_header():
gb_data = open('gb_data.txt','r')
header = gb_data.readline()
return header.strip()
def get_content():
gb_data = open('gb_data.txt','r')
content = gb_data.readlines()
del content[0]
return content
hw_pos = []
project_pos = []
quiz_pos = []
header_list = get_header()
header_list = header_list.split(", ")
header_list_index = enumerate(header_list)
for index, target in header_list_index:
if target == "hw":
hw_pos.append(index)
elif target == "quiz":
quiz_pos.append(index)
elif target == "project":
project_pos.append(index)
content_list = get_content()
avg_dict = {}
for element in content_list:
element = element.strip().split(", ")
name = element[0] + ', ' + element[1]
hw_avg = sum([int(element[i]) for i in hw_pos]) / len(hw_pos)
quiz_avg = sum([int(element[i]) for i in quiz_pos]) / len(quiz_pos)
project_avg = sum([int(element[i]) for i in project_pos]) / len(project_pos)
sem_avg = hw_avg * 0.2 + quiz_avg * 0.2 + project_avg * 0.6
avg_dict.update({name:(hw_avg, quiz_avg, project_avg, sem_avg)})
f = open('avg.txt', 'w')
for name, avg in avg_dict.items():
dataline = name + ": hw avg = " + str(round(avg[0], 2)) + ", quiz avg = " + str(round(avg[2], 2)) + ", proj avg = " + str(round(avg[1], 2)) + ", sem avg = " + str(round(avg[2], 2)) + "\n"
f.write(dataline)
f.close()
Вот пример ввода, который я вставил:
last, first, hw, hw, project, quiz, hw, hw, hw, quiz, hw, hw, project
Cat, Figaro, 57, 58, 71, 93, 56, 86, 90, 99, 55, 99, 88
Верхняя строка - легенда, так что игнорируйте, мой код обрабатывает вот что должно быть возвращено:
Cat, Figaro: hw avg = 71.57, quiz avg = 96.0, proj avg = 79.5, sem avg = 81.21
Вот что я на самом деле получаю:
Cat, Figaro: hw avg = 71.57, quiz avg = 96.0, proj avg = 79.5, sem avg = 96.0
Я хочу, чтобы они соответствовали ТОЧНО, вплоть до каждого символа. Мне просто нужно знать, как правильно его округлить. Это НЕ домашнее задание, а просто проект для лучшего понимания файлов, я очень близок !! Меня зовут Скарлетт, пожалуйста, помогите !!!