带字典的代码引发了一个KeyError:''

时间:2017-10-07 13:42:33

标签: python python-3.x dictionary

我在完成作业时遇到了麻烦,问题是:

  

编写,测试和文档(内部)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: ''

我的道歉,如果这个问题对你来说太容易或太愚蠢了,但我是初学者,而且我对词典没有太多经验。谢谢。

1 个答案:

答案 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')
相关问题