2016-07-25 69 views
-1
Grade1 = input ('Grade for Class 1?') 
Grade2 = input ('Grade for Class 2?') 
Grade3 = input ('Grade for Class 3?') 
Grade4 = input ('Grade for Class 4?') 

Grades = (str(Grade1), str(Grade2), str(Grade3), str(Grade4)) 

def average(numbers): 
    total= sum(numbers) 
    return total/len(numbers) 

def RealGPA(semestergrades): 
    PointValues = {'A+': 4.2, 'A':4.0, 'A-': 3.7, 'B+': 3.3, 'B': 3.0, 'B-': 2.7, 'C+': 2.3, 'C':2.0, 'C-': 1.7, 'D+': 1.3, 'D': 1.0, 'D-': 0.7, 'F': 0.00} 
    PointsEarned= [] 
    for Grade in Grades: 
     Values=(PointValues[Grades]) 
     PointsEarned.append(Values) 
return average(PointsEarned) 

print (RealGPA(Grades)) 

如果你在所有的輸入中鍵入A,這就說「關鍵錯誤:('A','A','A','A') - 這很奇怪,因爲'A'存在於。PointValues我做輸入正確這個基本的GPA計算器爲什麼會返回一個KeyError?

+1

PointValues [Grades]應該是PointValues [等級] – Yegers

+0

您在'RealGPA'函數中沒有使用參數'semestergrades'。你的全局'Grades'元組被用來代替你的局部變量。 –

回答

0

PointValues[Grades]查找在PointValues字典中的元組(str(Grade1), str(Grade2), str(Grade3), str(Grade4)),這顯然產生一個KeyError

也許你的意思是PointValues[Grade]

0

一個簡單的錯字 - ?。你寫Grades而不是Grade

添加一些其他的變化,以及(有一個看看PEP8風格指南):

grade1 = input ('Grade for Class 1?') 
grade2 = input ('Grade for Class 2?') 
grade3 = input ('Grade for Class 3?') 
grade4 = input ('Grade for Class 4?') 

grades = (str(grade1), str(grade2), str(grade3), str(grade4)) 

def average(numbers): 
    total = sum(numbers) 
    return total/len(numbers) 

def real_GPA(semestergrades): 
    point_values = {'A+': 4.2, 'A':4.0, 'A-': 3.7, 'B+': 3.3, 'B': 3.0, 
        'B-': 2.7, 'C+': 2.3, 'C':2.0, 'C-': 1.7, 'D+': 1.3, 
        'D': 1.0, 'D-': 0.7, 'F': 0.00} 
    points_earned = [] 
    for grade in grades: 
     values = point_values[grade] 
     points_earned.append(values) 
return average(points_earned) 

print(real_GPA(grades)) 
0

有一個小錯字。這Values=(PointValues[Grades])將是Values=(PointValues[Grade])。並且函數名和變量名應該全部小寫。