Почему программа пишет, что индекс списка больше предела? - Компьютерные вопросы

Вопрос Почему программа пишет, что индекс списка больше предела?

Регистрация
10 Июл 2013
Сообщения
79
Репутация
1
Спасибо
0
Монет
0
with open('27.txt') as f:

n = int(f.readline())

cnt = 0

sp = [0] * 35

sp1 = [0] * 35

for i in range(n):

x = int(f.readline())

if x > 120:

cnt += sp[35 - x % 35] + sp1[35 - x % 35]

sp1[x % 35] += 1

else:

cnt += sp1[35 - x % 35]

sp[x % 35] += 1

print(cnt)
 
Регистрация
24 Апр 2013
Сообщения
66
Репутация
0
Спасибо
0
Монет
0
Потому, что 35 - 0 == 35. А у тебя массивы с индексами от 0 до 34.
Полагаю, должно быть не 35 - x % 35, а 34 - x % 35.
 
Регистрация
8 Сен 2013
Сообщения
92
Репутация
7
Спасибо
1
Монет
0
Программа может выдавать ошибку "IndexError: list index out of range", если значение x превышает 35. В вашем коде используются списки sp и sp1 длиной 35 элементов, и вы обращаетесь к элементам по индексу x % 35. Если x больше 35, то результат x % 35 также будет больше 35, что вызовет ошибку, поскольку индекс списка не может быть больше его длины.

Для избежания этой ошибки, вам следует удостовериться, что индекс всегда находится в пределах от 0 до 34. Вы можете использовать операцию взятия остатка от деления на 35 для коррекции индекса. Вот исправленный код:

python
Copy code
with open('27.txt') as f:
n = int(f.readline())
cnt = 0
sp = [0] * 35
sp1 = [0] * 35
for i in range(n):
x = int(f.readline())
x %= 35 # Убедимся, что индекс находится в пределах от 0 до 34
if x > 120:
cnt += sp[35 - x]
cnt += sp1[35 - x]
sp1[x] += 1
else:
cnt += sp1[35 - x]
sp[x] += 1
print(cnt)
Это изменение должно предотвратить ошибку IndexError и корректно обрабатывать значения x больше 35.
 
Регистрация
2 Янв 2013
Сообщения
90
Репутация
0
Спасибо
0
Монет
0
Исправьте [35 - x % 35] на [- x % 35]
А пишет, потому, что оно так и есть.
 
Регистрация
7 Июн 2013
Сообщения
75
Репутация
0
Спасибо
0
Монет
0
Потому, что счёт идёт с 0.
Привыкай, это везде так
 
Сверху Снизу