这是我的代码,我想做一个加权的GPA计算器。我尝试用来计算GPA的公式是获得的总评分点/尝试的总学分
def gpa_calculator(grades, credit_worth):
grades = ['A', 'B', 'C', 'D', 'F']
credit_worth = [4, 3, 2, 1, 0]
credit_attempt = 0
if grades == 'A':
credit_attempt += 4.0
if grades == 'B':
credit_attempt += 3.0
if grades == 'C':
credit_attempt += 2.0
if grades == 'D':
credit_attempt += 1.0
if grades == 'F':
credit_attempt += 0.0
GPA = (sum(credit_attempt)) / (sum(credit_worth))
return GPA我用这些进行了测试:
print("Testing gpa_calculator() with grades = ['A', 'A', 'A', 'A'], credit_worth = [4, 3, 2, 3]: " + str(
gpa_calculator(['A', 'A', 'A', 'A'], [4, 3, 2, 3])))
print("Testing gpa_calculator() with grades = ['F', 'F', 'F', 'F'], credit_worth = [2, 4, 3, 5]: " + str(
gpa_calculator(['F', 'F', 'F', 'F'], [2, 4, 3, 5])))
print("Testing gpa_calculator() with grades = ['F','A','B','A','A'], credit_worth = [2,5,5,3,1]: " + str(
gpa_calculator(['F', 'A', 'B', 'A', 'A'], [2, 5, 5, 3, 1])))返回值应为:
4.0
0.0
3.1875但我收到一条错误消息
TypeError: 'int' object is iterable发布于 2017-09-29 07:43:26
您的代码尝试在credit_attempt上调用sum(),在本例中是一个整数-0:
>>> sum(0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable设置credit_attempt的代码也是错误的:
if grades == 'A':
credit_attempt += 4.0在这里,grades是一个列表,它永远不会等于字符串A,所以credit_attempt永远不会从初始值0开始更改。
此外,该函数会立即用固定值覆盖参数grades和credit_worth的值。
发布于 2017-09-29 07:48:38
这里有几个错误。让我们来看几个例子,下面有一个完整的工作示例。代码中的一些问题包括:
gpa_calculator中接受grades和credit_worth,您也会立即将它们替换为设置值,这意味着该函数将始终返回您希望迭代通过每个等级及其相应的信用值的相同值(如果它返回任何值)grades是一个列表,因此它永远不会等于任何字符串(例如,credit_attempt上的['A', 'B', 'C'] != 'A')credit_attempt是一个浮点数,并且已经是收到的信用额度的总和。它的名字也不太好,因为它是收到的总积分,而不是尝试的总积分。以下是修复了这些错误的工作示例,并使用一种稍微干净的方式从成绩字母字符串中获取GPA值:
def gpa_calculator(grades, credit_worth):
gpa_value_dict = {
'A': 4.0,
'B': 3.0,
'C': 2.0,
'D': 1.0,
'F': 0.0,
}
total_credit = 0
for grade, credit in zip(grades, credit_worth):
total_credit += gpa_value_dict[grade] * credit
GPA = total_credit / sum(credit_worth)
return GPA
print("Testing gpa_calculator() with grades = ['A', 'A', 'A', 'A'], credit_worth = [4, 3, 2, 3]: " + str(
gpa_calculator(['A', 'A', 'A', 'A'], [4, 3, 2, 3])))
print("Testing gpa_calculator() with grades = ['F', 'F', 'F', 'F'], credit_worth = [2, 4, 3, 5]: " + str(
gpa_calculator(['F', 'F', 'F', 'F'], [2, 4, 3, 5])))
print("Testing gpa_calculator() with grades = ['F','A','B','A','A'], credit_worth = [2,5,5,3,1]: " + str(
gpa_calculator(['F', 'A', 'B', 'A', 'A'], [2, 5, 5, 3, 1])))发布于 2017-09-29 07:53:09
您的错误是因为credit_attempt变量是单值的,是一个整数,因此是不可迭代的。sum()被设计为作用于可迭代的对象,如列表。您可以使用credit_attempt = []进行初始化以创建一个空列表。
我还应该指出,您传递的函数参数将不会在任何地方使用,因为您会立即用函数顶部的静态列表覆盖它们。
https://stackoverflow.com/questions/46479758
复制相似问题