用于python的GPA计算器并在循环中添加变量?

时间:2017-03-17 13:48:49

标签: python python-3.x loops variables

我必须为我的班级制作GPA计算器。它必须取数字等级并将它们转换为我们学校的规模。它还必须确定该课程是AP还是荣誉课程。 AP增加+1重量,荣誉增加+5重量。如果类是CP或职业,我们的规模很简单,只有F = 0 D = 1 C = 2 B = 3 A = 4。我知道最终的GPA还没有计算好,但我无法弄清楚如何在输入成绩时添加变量points的点数。我做错了什么?

apClass= int(input('How many AP classes are you taking?'))
honClass= int(input('\nHow many Honors classes are you taking?'))
g1=int(input('\nWhat is your first grade?'))
g2=int(input('\nWhat is your second grade?'))
g3=int(input('\nWhat is your third grade?'))
g4=int(input('\nWhat is your fourth grade?'))
points=(apClass*1)+(honClass*.5)

def GetGrades (g1,g2,g3,g4):
    if [g1,g2,g3,g4] < 90:
        points += 4.0
    elif [g1,g2,g3,g4] >90>80:
        points += 3.0
    elif [g1,g2,g3,g4] >70>80:
        points += 2.0
    elif [g1,g2,g3,g4] >60>70:
        points += 1.0
    elif [g1,g2,g3,g4] < 60:
        points += 0.0
    else:
        return('invalid grade')

print (points)

1 个答案:

答案 0 :(得分:0)

好的,这是我对问题的解决方案:

class CalcGPA:

def __init__(self):
    self.g1 = float(input("Please enter grade 1: "))
    self.g2 = float(input("Please enter grade 2: "))
    self.g3 = float(input("Please enter grade 3: "))
    self.g4 = float(input("Please enter grade 4: "))
    self.ap = float(input("Please enter total AP classes: "))
    self.hn = float(input("Please enter total Honors classes: "))
    self.weight = self.ap + (self.hn * 0.5)
    self.grades_list = [self.g1, self.g2, self.g3, self.g4]
    self.gpa_list = []
    self.gpa = 0

def conv_grades(self):
    for i in self.grades_list:
        if i >= 90:
            self.gpa_list.append(4)
        elif 80 <= i <= 89:
            self.gpa_list.append(3)
        elif 70 <= i <= 79:
            self.gpa_list.append(2)
        elif 60 <= i <= 69:
            self.gpa_list.append(1)
        else:
            self.gpa_list.append(0)
    self.gpa = (sum(self.gpa_list) + self.weight) / len(self.gpa_list)

def show_gpa(self):
    print("Your current GPA as calculated is: {}".format(self.gpa))

让我们分解一下,这样你就可以理解这里发生的事情了,可以解释为什么你会遇到一些问题。首先,我们这样做是面向对象编程的,因为我假设你将有多个对象(I.E.学生需要计算他们的成绩)。这允许您将数据封装到可重用的结构中。虽然我确信我的版本可以大大改进,但这是我在10分钟内掀起的。所以首先我们定义我们的类,然后定义init。这会初始化运行您尝试创建的程序所需的开始提示和变量。

正如你所看到的,我有4个等级,ap类和hn类被采用并存储为浮点数。现在,这是你对事情不太清楚的地方。这些类添加到整体GPA的权重为AP为1,荣誉为0.5(hn)。因此,如果它是AP的1分,我认为没有理由将任何东西成倍增加,因为它已经是一个整数。随着0.5添加到混合中,我们将乘以0.5,所以我们得到半分或每个荣誉的类。将这两个数字加在一起,你得到这些类最终会影响我们的gpa的最终权重。

然后我将给出的成绩存储在一个简单的列表中,以便稍后进行迭代。我为我们要计算的gpa值初始化了一个空列表,并将我们的最终gpa设置为0。

接下来,我们将第一个方法定义为conv_grades()。如您所见,我们使用一个简单的for循环遍历列表中每个项目位置的列表。然后我们使用If Elif语句返回正确计算gpa值所需的值。每次循环运行到我们在初始化下创建的gpa_list时,这会附加值。

从这里计算gpa是一个简单的数学计算。现在你对这一部分也不太清楚了,但我在这里假设你要将你的gpa值加起来并将它们除以提交的类/等级总数。 I.E.得到你的gpa分数的平均值来计算一个真正的gpa。为此,我们取gpa_list的总和,然后将权重加到它上面。在那之后,我们除以列表的len(),以便将来可扩展,如果你想拥有更大的成绩列表(当然你需要更改一些代码以允许来自用户的更多输入而不是现在静态可用。)通过这样做,我们返回我们的gpa值。

此时你可以简单地将它打印出来,但我决定用另一种方法来打印我们的gpa。这是底部的show_gpa()方法。

现在,如果您不熟悉如何运行这样的代码,因为它不是线性的,您需要将它导入到python解释器中。

import "whatever you named this file(for demo im calling this gpa.py"

现在要创建一个实例(对象),我们称之为:

student_1 = gpa.CalcGPA() # Notice the gpa first, this denotes the filename we just imported

通过这样做,它将开始询问您在 init ()函数下设置的所有变量。输入那些。

现在我们已经创建了对象,插入了我们的数字。计算gpa只需键入:

student_1.conv_grades()

这不会向屏幕输出任何内容,只显示gpa输入:

student_1.show_gpa()

那就是它!现在希望这能告诉你我至少会如何做到这一点,并希望你可以看到你的代码出了问题,而不是其他人已经告诉你的。希望这对你有所帮助。

P.S。使用接受用户输入的程序,您将需要某种错误处理和检查以确保它们不会尝试输入非法字符。我认为这超出了被问到你的范围,但我只是想指出这一点,所以我不会因此而受到抨击。