我正在尝试创建一个函数,将列表中的每个数字四舍五入到该数字列表中的最接近的数字(-3,0,2,4,7,10,12)。当我尝试运行以下代码时,python给我以下错误消息:“ UnboundLocalError:分配前引用了本地变量'GR'”。谁能帮我解决这个问题?
def roundGrade(grades):
grades = []
for i in grades:
if (grades >= 11) and (grades <= 12):
gradesRounded == 12
elif (grades >= 8.5) and (grades < 11):
gradesRounded == 10
elif (grades >= 5.5) and (grades < 8.5):
gradesRounded == 7
elif (grades >= 3) and (grades < 5.5):
gradesRounded == 4
elif (grades >= 1) and (grades < 3):
gradesRounded == 2
elif (grades >= -1.5) and (grades < 1):
gradesRounded == 0
elif (grades >= -3) and (grades < -1.5):
gradesRounded = -3
else:
print("Grade out of range")
return gradesRounded
print(roundGrade([8.2, -0.5, 10.4, 5.7]))
答案 0 :(得分:0)
首先,您似乎并没有在比较各个成绩,而是在列表本身。
例如,您的其中一行应该看起来像
for i in grades:
if (i >= 11) and (i <= 12):
gradesRounded = 12
elif (i >= 8.5) and (i < 11):
gradesRounded = 10
您的主要问题是,您正在使用双等号向gradesRounded分配一个值,该值仅检查它们是否相等(返回true或false)。您只需要一个等号。我已经在上面的更改代码中对此进行了更改。
答案 1 :(得分:0)
def roundGrade(grades):
grades = []
for i in grades:
...
return gradesRounded
问题是第grades = []
行。它会创建一个新列表,该列表为空,因此,当您尝试迭代for i in grades:
时,grades
是一个空列表,它与传递给此函数的列表不同:roundGrade(grades):
< / p>
答案 2 :(得分:0)
您的代码中有几个问题。首先,您的函数被传递了一个称为成绩的参数,在您的情况下,这是一个列表。然后,您立即用一个空列表覆盖此值。由于您现在有一个空列表,因此无需在循环中进行任何迭代,因此您的循环永远不会运行。然后,您尝试返回从未设置的gradesRounded。
此外,即使您确实设法迭代了循环,这里还是有几个问题。您正在将变量等级(列表)与整数进行比较。这是行不通的。您应该比较将在每个循环上更新的i,以指向下一个等级值。
此外,您还比较了等级,因为您使用了double equals ==,所以用整数进行了舍入。如果要分配给它,则需要使用单个等于。最重要的是,您每次都覆盖了gradesRounded的值。因此,如果您曾经尝试过将返回的等级四舍五入,那么它将仅包含一个整数,这是它四舍五入的最后一个等级。
在这里我必须做一些假设,即您想通过一个成绩列表并返回一个等效的四舍五入成绩列表。下面是完成此操作的代码的更新版本。
def round_grades(grades):
rounded_grades = []
for grade in grades:
if 11 <= grade <= 12:
rounded_grades.append(12)
elif 8.5 <= grade < 11:
rounded_grades.append(10)
elif 5.5 <= grade < 8.5:
rounded_grades.append(7)
elif 3 <= grade < 5.5:
rounded_grades.append(4)
elif 1 <= grade < 3:
rounded_grades.append(2)
elif -1.5 <= grade < 1:
rounded_grades.append(0)
elif -3 <= grade < -1.5:
rounded_grades.append(-3)
else:
print("Grade out of range")
return rounded_grades
print(round_grades([8.2, -0.5, 10.4, 5.7]))
输入:[8.2, -0.5, 10.4, 5.7]
输出:[7, 0, 10, 7]