首页 > 解决方案 > 如何计算文本文件中班级成员的平均分?

问题描述

对于我的初学者课程 python,我得到了以下任务:

在输入文件中,列出了第 2b 组地理测试的成绩。已经进行了三项测试,其中的成绩将包含在圣诞节假期前发给学生的半年度报告中。在输入的每一行中,您都可以找到学生的姓名,后跟一个或多个分数('_')。这些是通过测试的成绩来完成的,例如:

Anne Adema____________6.5 5.5 4.5
Bea de Bruin__________6.7 7.2 7.7
Chris Cohen___________6.8 7.8 7.3
Dirk Dirksen__________1.0 5.0 7.7

可能的最低成绩是 1,最高成绩是 10。如果有人错过了考试,列表中的成绩是 1。你的任务是为 2b 组的地理课程做报告,应该如下所示:

Report for group 2b

Anne Adema has an average grade of 5.5
Bea de Bruin has an average grade of 7.2
Chris Cohen has an average grade of 7.3
Dirk Dirksen has an average grade of 4.6

End of report

到目前为止,这是我的 python 代码:

NUMBER_OF_GRADES = 3

file =open('grades1.in.txt').read().split('\n')
for scores in file:
    name_numbers = (scores.split('_'))

def averages ():
    for numbers in file:
        sum=0
        numbers = split("\n")
        for num in numbers:
            sum = sum + int(num)
        averages = sum/NUMBER_OF_GRADES
    print ('% has an average grade of %.1') %(name, averages)

它哪里出错了?我错过了什么?我分裂的方式不对吗?

标签: python

解决方案


首先,您根本没有调用您的函数averages。您应该将其添加为代码的最后一行,但您根本不需要函数定义。

  • 使用with-statement 打开和自动关闭文件。
  • 接下来,您可以使用该re包在下划线处拆分行。
  • 您必须拆分成绩列表(假设它们用空格分隔)
  • 您可以使用内置函数sumlen计算总和和等级数。

最后,它可能看起来像这样

import re

with open('grades1.in.txt') as grades_file:
    for line in grades_file:
        name, grades = re.split("_+", line)
        grades = [float(k) for k in grades.split()]
        avg = sum(grades)/len(grades)
        print("{} has an average grade of {:.2f}.".format(name, avg))

推荐阅读