创建一个输入文件并计算成绩

时间:2016-03-17 12:20:55

标签: python python-3.x file-io

文件的每一行都有以下格式:

enter image description here

,其中

  • name是一个字符串

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

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

  • 期中评分(整数)

  • final是期末考试成绩(整数)

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

enter image description here

文本格式的文件内容:

tom,10,20,0,100,0,100,70,80,90,0,80,85

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

joan,0,80,40,10,50,60,7,80,90,0,00,5

请注意,每行中的条目之间可能还有其他空格。

您的函数应返回字典,例如:

enter image description here

注意:

  • 应该删除两个最低的测验,其余四个测验的平均值为总成绩的25%。

  • 应删除最低分配分数,其余三项分配的平均值为总分的25%。

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

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

CODE(迄今为止开发):

1 def my_final_grade_calculation(filename):
2 file_pointer = open(filename, 'r')
3 data = file_pointer.readlines()
4 for line in data:
5     a=[]
6     q=[]
7     dict_={}
8     name, q1, q2, q3, q4, q5, q6, a1, a2, a3, a4, midterm, final =  line.strip().split(',')
9     q=[int(q1),int(q2),int(q3),int(q4),int(q5),int(q6)]
10    a=[int(a1),int(a2),int(a3),int(a4)]
11    int(midterm)
12    int(final)
13    for i in range(0,2):
14        q.remove(min(q))  
15    a.remove(min(a))
16    a_avg=0.0
17    for j in range(0,len(a)):
18        a_avg+=a[j]/len(a)
19    q_avg=0.0
20    for i in range(0,len(q)):
21        q_avg+=q[i]/len(q)
22    final = ((float(q_avg)/4)) + ((float(a_avg)/4)) + ((float(midterm)/4)) + ((float(final)/4))
23    if (final>=60.0):
24        out='pass'
25        return dict_[name]=out
26    else:
27        out='fail'
28        return dict_[name]=out
29
30 #calling function  
31 print(my_final_grade_calculation('filename.txt'))

ERROR:

invalid syntax: <string>, line 25, pos 31

除此之外,我不确定我的答案是否正确?请帮忙。

1 个答案:

答案 0 :(得分:0)

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

Contains()

我将一些代码留作评论,以便向您展示差异。基本上,您的原始代码返回了一个命令,即在字典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')) 中将键name的值设置为out,而不是返回字典dict_。 注意,如果遇到dict_语句,方法my_final_grade将终止。因此,您的原始方法始终使用文本文件的第一行停止。