Python:使用学分和成绩计算类的GPA
我对这段代码非常熟悉,我需要弄清楚如何将多个等级作为一个参数。它需要一个完美的,但我的代码是书面的,所以它不断采取成绩和学分,直到没有输入。但不是这样的 到目前为止,我的代码是:Python:使用学分和成绩计算类的GPA,python,class,methods,python-3.x,Python,Class,Methods,Python 3.x,我对这段代码非常熟悉,我需要弄清楚如何将多个等级作为一个参数。它需要一个完美的,但我的代码是书面的,所以它不断采取成绩和学分,直到没有输入。但不是这样的 到目前为止,我的代码是: #! /usr/bin/python3 # gpa.py # Program to take credits and grades and return calculated GPA class Student: def __init__(self, hours, qpoints, credits):
#! /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()
但是在初始化中,您得到:
def __init__(self, hours, qpoints, credits):
self.hours = float(hours)
所以你给它一个字符串而不是int/float。。。你试着把它转换成浮点数,
哪个失败了
students = Student(0.0, 0.0, 0)
或者在初始化中输入名称或其他内容:
def __init__(self, name, hours, qpoints, credits):
你可以这样试试
#! /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()
好的,很好。有什么问题吗?@jeremyD我仍然需要添加学分的输入,可能还有更多。不确定这会因为太模糊而被关闭。我建议你先问一个具体的问题,并在这之前提供一个准确的指示。@斯波克先生已经更新了我的问题。这是家庭作业问题吗?仍然返回一个错误:第63行,在main students=Student(0.0,0.0,0)TypeError:uuuuu init_uuu()缺少1个必需的位置参数:“credits”,您需要传递定义的任意多个参数,因此对于原始示例,它是:hours、qpoints、credits,即3。你现在可以忽略自我。如果定义更多参数,则需要传递更多参数。你修改了init吗?是的,它可以工作,但我需要弄清楚如何将多个等级作为参数。它只适用于一个等级,因为某些原因,我的代码在没有输入等级之前不会继续。您可能想看看这个,您只需提交一个值列表即可
#! /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()