[Python] Calculating GPA with classes using credits and grades

Discussão em 'Python' iniciado por Stack, Março 23, 2025.

  1. Stack

    Stack Membro Participativo

    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...

Compartilhe esta Página