#python #python-3.x
#python #python-3.x
Вопрос:
Я пытаюсь решить этот вопрос:
Первый входной массив является ключом к правильным ответам на экзамен, например
["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"]))
Комментарии:
1. Ну, а кем ты хочешь
arr[i]
стать?i
на данный момент он еще не определен. Он доступен только внутри цикла. Ты это имел в видуfor i in range(len(arr1)):
?2. Здесь нет необходимости использовать два цикла. Достаточно одного.
Ответ №1:
Ошибка связана с for i in arr[i]
тем, что вы используете as 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>))
.
Ответ №2:
Вы повторяете неправильно. Было бы лучше выполнять итерацию по индексу вместо прямых значений, поскольку здесь оба массива имеют одинаковую длину.
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"]))
Комментарии:
1. Было бы еще лучше использовать
zip
2. @Tomerikoo мой плохой на прохождении
Ответ №3:
Вы можете использовать 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
Функция принимает несколько итераций и перебирает их последовательно, а не по одной за раз, что позволяет нам сравнивать каждый элемент одного и того же индекса.