我在完成作业时遇到了麻烦,问题是:
编写,测试和文档(内部)Python程序以解决以下问题:
对于班级中的每个学生,学生编号和六个考试成绩(满分100分)作为输入。学生人数不详。计算并输出以下内容:
为每个学生 100分的最终分数。前三分的价值分别为20%和最后三分,分别为15%,15%和10%。编写一个函数,给定六个标记,计算并返回100的最终标记。 与商标对应的字母等级。编写一个函数,给定最终标记100,根据下表计算并返回字母等级:...
为班级 平均最终分数。 最高分。 As,Bs,Cs,Ds和Fs的总数。
我为它写了一段代码,虽然尚未完成:
#student_name: Zhiwei Liu; student_number: 201604402
students={}
student_number= ''
def main():
global student_number = input('student number: ')
'''For python 2:
test_marks=[int(n) for n in raw_input('Enter test marks: ').split()]'''
#For python 3:
test_marks=[int(n) for n in input('Enter test marks: ').split()]
students[student_number]={}
students[student_number]['final_mark']=0.2*test_marks[0]+0.2*test_marks[1]+0.2*test_marks[2]+0.15*test_marks[3]+0.15*test_marks[4]+0.1*test_marks[5]
if 80<=students[student_number]['final_mark']<=100:
students[student_number]['letter_grade']='A'
elif 65<=students[student_number]['final_mark']<=79:
students[student_number]['letter_grade']='B'
elif 55<=students[student_number]['final_mark']<=64:
students[student_number]['letter_grade']='C'
elif 50<=students[student_number]['final_mark']<=54:
students[student_number]['letter_grade']='D'
elif 0<=students[student_number]['final_mark']<=49:
students[student_number]['letter_grade']='F'
main()
count=1
continue_=input('Continue? y/n')
while continue_.lower() == 'y':
average=0
main()
count+=1
average+=students[student_number]['final_mark']
average/=count
continue_=input('Continue? y/n')
print(students)
print(average)
它应该运行没有问题,但是,输出给我一个错误:
$ python3 FinalMarks.py
student number: 12
Enter test marks: 12 13 12 13 12 13
Continue? y/ny
student number: 13
Enter test marks: 12 14 12 14 12 14
Traceback (most recent call last):
File "FinalMarks.py", line 30, in <module>
average+=students[student_number]['final_mark']
KeyError: ''
我的道歉,如果这个问题对你来说太容易或太愚蠢了,但我是初学者,而且我对词典没有太多经验。谢谢。
答案 0 :(得分:0)
你可以试试这个:
students={}
student_number= ''
grades = {"A":lambda x: x >= 80 and x <= 100, "B":lambda x: x>= 65 and x < 80, "C": lambda x: x >= 55 and x < 65, "D": lambda x:x >= 50 and x < 55, "F":lambda x: x >=0 and x < 50}
def main():
global student_number
number = input('student number: ')
student_number = number
test_marks=[int(n) for n in input('Enter test marks: ').split()]
stats = [0.2, 0.2, 0.2, 0.15, 0.15, 0.1]
students[student_number]={}
students[student_number]['final_mark']= sum(a*b for a, b in zip(stats, test_marks))
grade = [a for a, b in grades.items() if b(students[student_number]['final_mark'])]
if not grades:
print("please enter valid grades as listed")
else:
print("grade is {}".format(grade[0]))
count=1
continue_=input('Continue? y/n')
while continue_.lower() == 'y':
average=0
main()
count+=1
average+=students[student_number]['final_mark']
average/=count
continue_=input('Continue? y/n')