Reputation: 37
I keep getting an error for this GPA calculator that is supposed to calculate your GPA based on 4 grades. Also the program needs to be terminated whenever a letter not named A,B,C,D,F is entered which i'm not sure how to do.
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
Upvotes: 2
Views: 9818
Reputation: 266
It looks like there are a few errors, here are some hints.
First in GetGrades Your list [grade1, grade2, grade3, grade4] will never equal 'A' it will only be equal to a list, so you will have to rethink how you are testing the grades.
Second you need the sum of the grade values, and want to divide by a float or python will remove the decimals (unless the g1-4 are entered with decimals).
def CalcGPA(g1,g2,g3,g4):
GPA = sum(g1,g2,g3,g4)/4.0
return GPA
Third the error is coming from the syntax of how you are calling the functions should be:
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)
As for getting the program to end when an invalid grade is entered, you may consider putting in a while loop that ends when the grad is invalid.
Upvotes: 0
Reputation: 8419
Assignment in Python assigns the value on the right hand side of the equal sign to the reference on the left-hand side, so the tuples you're unpacking need to be on the left.
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)
Upvotes: 1