Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:使用学分和成绩计算类的GPA_Python_Class_Methods_Python 3.x - Fatal编程技术网

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()