-1

我正在尝试解决这个问题:

第一个输入数组是考试正确答案的关键,例如["a", "a", "b", "d"]. 第二个包含学生提交的答案。

这两个数组不为空且长度相同。返回此答案数组的分数,每个正确答案为 +4,每个错误答案为 -1,每个空白答案为 +0,表示为空字符串(在 C 中使用空格字符)。

我不断收到此代码的此错误消息:

UnboundLocalError: local variable 'i' referenced before assignment

这是我的代码:

def check_exam(arr1, arr2):
    res = 0
    for i in arr1[i]:
        while arr2[i] != "":
            if arr2[i] == arr1[i]:
                res += 4
            else:
                res -= 1
    return res
    
print(check_exam(["a", "a", "b", "b"], ["a", "c", "b", "d"]))
4

3 回答 3

1

该错误是由于for i in arr[i]i在声明它之前使用的。

我以这种方式解决了这个问题:

def check_exam(arr1, arr2):
res = 0

#As len(arr1) = len(arr2) I choose one of them.
for i in range(len(arr1)):

    if arr1[i] != arr2[i]:

        if arr2[i] != "": res-=1
        else: res+=0 #Blank answer.

    elif arr1[i] == arr2[i]: res+=4

return res

print(check_exam(["a","a","b","b"],["a","c","b","d"]))

您可以使用 简单地比较具有相同索引的两个数组的元素for i in range(len(<one of the two arrays>))

于 2020-12-08T19:42:23.497 回答
0

你迭代错了。最好通过索引而不是直接值进行迭代,因为两个数组在这里具有相同的长度。

def check_exam(arr1,arr2):
    res = 0
    for i in range(len(arr1)):
        if arr2[i] == arr1[i]:
            res += 4
        elif arr[2] == '':
            continue
        else:
            res -= 1
    return res
    


print(check_exam(["a", "a", "b", "b"], ["a", "c", "b", "d"]))
于 2020-12-08T19:09:53.800 回答
0

您可以使用zip

def check_exam(arr1, arr2):
    res = 0
    for i, j in zip(arr1, arr2):
        if i == j:
            res += 4
        elif i:
            res -= 1
    return res
    
print(check_exam(["a", "a", "b", "b"], ["a", "c", "b", "d"]))

输出:

6

解释:

zip函数接受许多可迭代对象,并并排遍历它们,而不是一次一个,从而允许我们比较同一索引的每个元素。

于 2020-12-08T19:12:58.910 回答