for n in weights:
Перебирает все значения в весах (29, 30, 31, 31, 33)
expect = expected[n]
пытается получить доступ к индексу n из списка expected
, который не существует (индекс 29в 1-й итерации), таким образом вызывая исключение
Чтобы выполнить итерацию по обоим спискам, вы можете выполнить:
for weight, expect in zip(weights, expected):
# do something with weight, expect
Чтобы выполнить итерацию с использованием индексов, вы можете выполнить
for n in range(0, len(weights)):
# do something with weights[n], expected[n]