Python:用信贷和年级的班级计算《全球行动纲领》
原标题:Python: Calculating GPA with classes using credits and grades
I am so close with this code, 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:
#! /usr/bin/python3
# gpa.py
# Program to take credits and grades and return calculated GPA
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()
问题回答
students = Student( students , 0.0, 0.0)
However in the init you got:
def __init__(self, hours, qpoints, credits):
self.hours = float(hours)
so you re giving it a string instead of int/float... and you try to convert it to float, which fails
students = Student(0.0, 0.0, 0)
or put name or something in the init:
def __init__(self, name, hours, qpoints, credits):
You may try this way...
#! /usr/bin/python3
# gpa.py
# Program to take credits and grades and return calculated GPA
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) # This is wrong declaration because you initialised "def __init__(self, hours, qpoints, credits): "
students = Student(0.0, 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()