文件的每一行都有以下格式:
,其中
name是一个字符串
q1到q6是测验分数(整数)
a1到a4是分配分数(整数值)
期中评分(整数)
final是期末考试成绩(整数)
例如,如果文件的内容如下所示:
文本格式的文件内容:
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
请注意,每行中的条目之间可能还有其他空格。
您的函数应返回字典,例如:
注意:
应该删除两个最低的测验,其余四个测验的平均值为总成绩的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
除此之外,我不确定我的答案是否正确?请帮忙。
答案 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
将终止。因此,您的原始方法始终使用文本文件的第一行停止。