GPA Calc Python

时间:2014-02-23 23:46:02

标签: python

我的GPA计算器一直出现错误,该计算器应根据4个等级计算出您的GPA。每当输入一个名为A,B,C,D,F的字母时,程序需要终止,我不知道该怎么做。

def GetName():
    name = raw_input ("Enter the student's name  ")
    grade1 = raw_input ("Enter a grade:  ")
    grade2 = raw_input ("Enter a grade:  ")
    grade3 = raw_input ("Enter a grade:  ")
    grade4 = raw_input ("Enter a grade:  ")
    return name, grade1, grade2, grade3, grade4

def GetGrades(grade1, grade2, grade3, grade4):
        if [grade1, grade2, grade3, grade4] == 'A' or [grade1, grade2, grade3, grade4] == 'a':
                [g1, g2, g3, g4] =4
        elif [grade1, grade2, grade3, grade4] == 'B' or [grade1, grade2, grade3, grade4] ==  'b':
                [g1, g2, g3, g4] =3
        elif [grade1, grade2, grade3, grade4] == 'C' or [grade1, grade2, grade3, grade4] == 'd':
                [g1, g2, g3, g4] =2
        elif [grade1, grade2, grade3, grade4] == 'D' or [grade1, grade2, grade3, grade4] == 'd':
                [g1, g2, g3, g4] =1
        elif [grade1, grade2, grade3, grade4] == 'F' or [grade1, grade2, grade3, grade4] == 'f':
                [g1, g2, g3, g4] =0
        else:
                return 'invalid grade'
        return g1, g2, g3, g4

def CalcGPA(g1,g2,g3,g4):
    GPA = (g1,g2,g3,g4)/4
    return GPA


def main(name, GPA):
    print "The GPA for", name,"is",GPA
    return 0

GetName()=name,grade1,grade2,grade3,grade4
GetGrades(grade1,grade2,grade3,grade4)=g1,g2,g3,g4
CalcGPA(g1,g2,g3,g4)=GPA
main(name,GPA)=0

2 个答案:

答案 0 :(得分:1)

Python中的赋值将等号右侧的值分配给左侧的引用,因此您要解包的元组需要位于左侧。

def GetName():
    name = raw_input("Enter the student's name  ")
    grade1 = raw_input("Enter a grade:  ")
    grade2 = raw_input("Enter a grade:  ")
    grade3 = raw_input("Enter a grade:  ")
    grade4 = raw_input("Enter a grade:  ")
    return name, grade1, grade2, grade3, grade4

grademap = { 'A': 4, 'B': 3, 'C': 2, 'D': 1 }

def grade2int(x):
    try:
        return grademap[x.upper()]
    except KeyError:
        raise Exception('invalid grade: ' + x)

def GetGrades(grades):
    return map(grade2int, grades)

def CalcGPA(grades):
    return sum(grades)/len(grades)

def main(name, GPA):
    print "The GPA for", name, "is", GPA
    return 0

if __name__ == '__main__':
    name, grade1, grade2, grade3, grade4 = GetName()
    grades = GetGrades([grade1, grade2, grade3, grade4])
    GPA = CalcGPA(grades)
    main(name, GPA)

答案 1 :(得分:0)

看起来有一些错误,这里有一些提示。

GetGrades中的第一个你的列表[grade1,grade2,grade3,grade4]永远不会等于'A'它只会等于一个列表,所以你必须重新考虑如何测试成绩。

其次你需要等级值的总和,并想要除以浮点数或python将删除小数(除非输入带有小数的g1-4)。

def CalcGPA(g1,g2,g3,g4):
    GPA = sum(g1,g2,g3,g4)/4.0
    return GPA

第三,错误来自您调用函数的语法 应该是:

name,grade1,grade2,grade3,grade4= GetName()
g1,g2,g3,g4=GetGrades(grade1,grade2,grade3,grade4)
GPA = CalcGPA(g1,g2,g3,g4)
0=main(name,GPA)

对于在输入无效成绩时结束程序,您可以考虑放入在毕业无效时结束的while循环。