I am writing a program to take credits and grades and return calculated GPA. I need to figure out to take more than one grade as a parameter. It takes one perfectly but my code is written so it keeps taking grades and credits until nothing is entered. But it doesn't work that way. My code so far: class Student: def __init__(self, hours, qpoints, credits): self.hours = float(hours) self.qpoints = float(qpoints) def getName(self): return self.name def getHours(self): return self.hours def getQPoints(self): return self.qpoints def gpa(self): return self.qpoints/self.hours def addGrade(self, gradePoint, credits): self.hours += credits self.qpoints += credits*gradePoint def addLetterGrade(self, grade): total = 0 for i in grade(A,B,C,D,E,F): if grade == 'A': total = total + 4.0 elif grade == 'A-': total = total + 3.7 elif grade == 'B+': total = total + 3.3 elif grade == 'B': total = total + 3.0 elif grade == 'B-': total = total + 2.7 elif grade == 'C+': total = total + 2.3 elif grade == 'C': total = total + 2.0 elif grade == 'C-': total = total + 1.7 elif grade == 'D+': total = total + 1.3 elif grade == 'D': total = total + 1.0 elif grade == 'E': total = total + 0.0 elif grade == 'F': total = total + 0.0 def main(): grade = input('Enter grade for next course, or type done finish: ') credits = input('Enter number of credit hours for this course: ') error_float = 'error: expected a floating-point number' # make a new Student object students = Student('students', 0.0, 0.0) # user-feedback loop while 1: # prompt user to enter a grade grade_str = input(grade) # quit if no grade is entered if grade_str.strip() == 'done': break try: # convert input to a floating-point value grade = float(grade_str) except ValueError: # if input cannot be converted, restart feedback loop print(error_float) continue # prompt user to enter the number of credits credits_str = input(credits).strip() try: # convert input to a floating-point value credits = float(credits_str) except ValueError: # if input cannot be converted, restart feedback loop print(error_float) continue # update the student's grades students.addGrade(grade, credits) # after user has entered all grades, compute the cumulative GPA if students.getHours() == 0.0: # can't compute GPA if hours = 0 print('*** zero credit hours recorded') else: # otherwise, output cumulative GPA and finish print('*** final GPA =', students.gpa()) if __name__ == '__main__': main() Continue reading...