Python 如何获得学期平均成绩
我有一个代码,它将获取等级图例和等级数,然后为其返回值。除了学期平均成绩外,我一切都好。以下是求学期平均数的公式:Python 如何获得学期平均成绩,python,file,Python,File,我有一个代码,它将获取等级图例和等级数,然后为其返回值。除了学期平均成绩外,我一切都好。以下是求学期平均数的公式: homework average * 0.2 + quiz average * 0.2 + project average * 0.6. 我的代码适用于家庭作业平均数、测验平均数和项目平均数,但不适用于学期平均数。 以下是我写的: def get_header(): gb_data = open('gb_data.txt','r') header = gb_d
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
我想让他们完全匹配,直到每个角色。我只需要知道如何正确地圆它。这不是家庭作业,只是一个项目,以更好地理解文件,我非常接近!!我的名字是斯佳丽顺便说一句,请帮忙 您在这一行有一个输入错误: 数据行=名称+”:hw avg=“+str(round(avg[0],2))+”,测验avg=“+str(round(avg[2],2))+”,proj avg=“+str(round(avg[1],2))+”,sem avg=“+str(round(avg[2]),2))+“\n” 应该是 数据行=名称+”:hw avg=“+str(round(avg[0]),2))+”,测验avg=“+str(round(avg[1],2))+”,proj avg=“+str(round(avg[2]),sem avg=“+str round(avg[3],2))+”\n 相反。计算很好,只是输出搞乱了(打印的是0,2,1,2而不是0,1,2,3)。为了防止将来出现这样的错误,不妨看看熊猫的列名?在这种情况下,Pandas可能是一个过火的工具,但对于基于表格的计算来说,它是一个非常强大的工具。这应该可以:
from statistics import mean
legend = ['last', 'first', 'hw', 'hw', 'project', 'quiz', 'hw', 'hw', 'hw', 'quiz', 'hw', 'hw', 'project']
grades = ['Cat', 'Figaro', 57, 58, 71, 93, 56, 86, 90, 99, 55, 99, 88]
hw_avg = mean([g for l, g in zip(legend, grades) if l == 'hw'])
quiz_avg = mean([g for l, g in zip(legend, grades) if l == 'quiz'])
project_avg = mean([g for l, g in zip(legend, grades) if l == 'project'])
sem_avg = hw_avg * 0.2 + quiz_avg * 0.2 + project_avg * 0.6
print(f'{grades[0]}, {grades[1]}: hw avg = {hw_avg:.2f}, quiz avg = {quiz_avg:.2f}, project avg = {project_avg:.2f}, sem avg = {sem_avg:.2f}')
它给了我以下信息:
Cat, Figaro: hw avg = 71.57, quiz avg = 96.00, project avg = 79.50, sem avg = 81.21
请注意,我只是使用statistics.mean,因为它使代码更干净。但你也可以用你这样的方法 考虑一下使用Pandas,Python流行的数据分析库,它是为这种计算设计的,使用的方法比使用列表更有效。这对计算项目和学期平均成绩有效,但却打破了我的测验平均成绩??