这是我的代码,我正在尝试制作加权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
答案 0 :(得分:0)
您的代码尝试在sum()
上调用credit_attempt
,这是一个整数 - 在这种情况下为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
的值。
答案 1 :(得分:0)
这里有几个错误。让我们来看看它们中的几个,底部有一个完整的工作示例。您的代码中的一些问题是:
grades
中接收credit_worth
和gpa_calculator
,也会立即用设定值替换它们,这意味着该函数将始终返回相同的值(如果它返回任何值) grades
是一个列表,因此它永远不会等于任何字符串(例如['A', 'B', 'C'] != 'A'
)credit_attempt
,但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])))
答案 2 :(得分:0)
您的错误是因为credit_attempt
变量是单个值,一个int,因此不可迭代。 sum()
旨在对可迭代对象(如列表)执行操作。您可以使用credit_attempt = []
进行初始化,以创建一个空列表。
我还应该指出,传入的函数参数不会在任何地方使用,因为你会立即用函数顶部的静态列表覆盖它们。