Python 创建一个输入文件并计算成绩的函数

Python 创建一个输入文件并计算成绩的函数,python,python-3.x,file-io,Python,Python 3.x,File Io,文件的每一行的格式如下: 在哪里 名称是一个字符串 q1到q6是测验分数(整数) a1到a4是分配分数(整数值) 期中成绩是期中成绩(整数) 期末考试是期末考试分数(整数) 例如,如果文件内容如下所示: 文本格式的文件内容: 汤姆,10,20,0,100,0,100,70,80,90,0,80,85 玛丽,0,50,66,40,10,60,70,80,90,100,80,85 琼,0,80,40,10,50,60,7,80,90,0,80,5 请注意,每行中的条目之间可能有额外的空格 函

文件的每一行的格式如下:

在哪里

  • 名称是一个字符串

  • q1到q6是测验分数(整数)

  • a1到a4是分配分数(整数值)

  • 期中成绩是期中成绩(整数)

  • 期末考试是期末考试分数(整数)

例如,如果文件内容如下所示:

文本格式的文件内容:

汤姆,10,20,0,100,0,100,70,80,90,0,80,85

玛丽,0,50,66,40,10,60,70,80,90,100,80,85

琼,0,80,40,10,50,60,7,80,90,0,80,5

请注意,每行中的条目之间可能有额外的空格

函数应返回一个字典,例如:

注:

  • 最低的两个小测验应该取消,其余四个小测验的平均成绩占总成绩的25%

  • 最低的作业分数应该取消,剩下的三份作业的平均分数占总分数的25%

  • 期中考试和期末考试各占总成绩的25%

计算学生的总分,如果总分大于或等于60(总分>=60),则该学生通过考试。请注意,字典的键(名称)和值(通过或失败)都应该是小写的,其中任何一个都不能有空格

代码(迄今已开发):

错误:

invalid syntax: <string>, line 25, pos 31
无效语法:,第25行,位置31
除此之外,我不确定我的回答是否正确?请帮助。

以下代码有效(但是,我没有检查您的计算)

我留下了一些代码作为注释,以便向您展示它们之间的差异。基本上,您的原始代码返回了一个命令,即在dictionary
dict\u
中将key
name
的值设置为
out
,而不是返回dictionary
dict\u

注意,如果遇到
return
语句,则该方法
my_final_grade
终止。因此,原始方法总是在文本文件的第一行停止。

如错误所示,请查看第25行。那是哪一行代码?第31个字符是什么?@LynnCrumbling我添加了行号如何在1行以上运行我给你的代码在整个文件中运行不,它没有。我在我的编译器上运行了它可能是您的缩进有问题吗?我为您的示例获得了以下输出:{'joan':'fail','mary':'pass','tom':'pass'}
invalid syntax: <string>, line 25, pos 31
def my_final_grade_calculation(filename):
    file_pointer = open(filename, 'r')
    data = file_pointer.readlines()
    dict_={}
    for line in data:
        #a=[]
        #q=[]
        #dict={}
        name, q1, q2, q3, q4, q5, q6, a1, a2, a3, a4, midterm, final =  line.strip().split(',')
        q=[int(q1),int(q2),int(q3),int(q4),int(q5),int(q6)]
        a=[int(a1),int(a2),int(a3),int(a4)]
        #int(midterm)
        #int(final)
        for i in range(0,2):
            q.remove(min(q))  
        a.remove(min(a))
        a_avg=0.0
        for j in range(0,len(a)):
            a_avg+=a[j]/len(a)
        q_avg=0.0
        for i in range(0,len(q)):
            q_avg+=q[i]/len(q)
        final = ((float(q_avg)/4)) + ((float(a_avg)/4)) + ((float(midterm)/4)) + ((float(final)/4))
        if final>=60.0:
            out='pass'
            dict_[name]=out
        else:
            out='fail'
            dict_[name]=out
    return dict_

#calling function  
print(my_final_grade_calculation('filename.txt'))