Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何获得学期平均成绩_Python_File - Fatal编程技术网

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流行的数据分析库,它是为这种计算设计的,使用的方法比使用列表更有效。这对计算项目和学期平均成绩有效,但却打破了我的测验平均成绩??