В одной компьютерной игре игрок выставляет в линию шарики разных цветов. Когда образуется непрерывная цепочка из трех и более шариков одного цвета, она удаляется из линии. Все шарики при этом сдвигаются друг к другу, и ситуация может повториться.
Напишите программу, которая по данной ситуации определяет, сколько шариков будет "уничтожено". Естественно, непрерывных цепочек из трех и более одноцветных шаров в начальный момент может быть не более одной.
crush=1
count=0
L = [int(num) for num in input().split()]
for i in range(1,len(L)):
if L[i]==L[i-1]:
crush+=1
elif crush>2:
for k in range(crush):
del L[i-k-1]
count+=crush
crush=1
print(count)
Python
Почему list index out of range? что надо исправить?
Потому, что в конструкции range(1,len(L)) верхняя граница цикла - len(L) - фиксируется в момент начала цикла и дальше никак не меняется. А реальная длина L в процессе работы уменьшается.
cur = list(map(int, input().split())) + ['@']
lng, old = len(cur), []
while len(cur) != len(old):
old, pos = cur, 0
for i in range(1, len(cur)):
if cur[i] == cur[i - 1]: continue
if i - pos < 3: pos = i
else:
cur = cur[:pos] + cur[i:]
break
print(lng - len(cur))
L = list(map(int, input().split())) + ['@']
lng, pos, i = len(L), 0, 1
while i < len(L):
if L[i] == L[i - 1]: i += 1
elif i - pos < 3: pos, i = i, i + 1
else:
L, i = L[:pos] + L[i:], pos
while pos > 0 and L[pos - 1] == L[i]: pos -= 1
print(lng - len(L))
Ошибка "list index out of range" возникает, потому что вы удаляете элементы из списка `L` внутри цикла `for k in range(crush)`, и после удаления элементов длина списка `L` уменьшается. Это может привести к тому, что в какой-то момент индекс `i` станет больше, чем новая длина списка `L`, и возникнет ошибка "list index out of range".
Чтобы исправить эту ошибку, вы можете переписать ваш код таким образом:
```python
crush = 1
count = 0
L = [int(num) for num in input().split()]
i = 1
while i < len(L):
if L[i] == L[i - 1]:
crush += 1
elif crush > 2:
del L[i - crush:i]
count += crush
crush = 1
i -= crush
else:
i += 1
print(count)
```
В этой версии кода мы используем `while` цикл вместо `for` цикла, чтобы управлять индексом `i` вручную и избежать проблемы с выходом за пределы списка. Кроме того, мы используем `del` для удаления элементов внутри списка, но корректно обновляем значение `i` после удаления элементов.
Чтобы исправить эту ошибку, вы можете переписать ваш код таким образом:
```python
crush = 1
count = 0
L = [int(num) for num in input().split()]
i = 1
while i < len(L):
if L[i] == L[i - 1]:
crush += 1
elif crush > 2:
del L[i - crush:i]
count += crush
crush = 1
i -= crush
else:
i += 1
print(count)
```
В этой версии кода мы используем `while` цикл вместо `for` цикла, чтобы управлять индексом `i` вручную и избежать проблемы с выходом за пределы списка. Кроме того, мы используем `del` для удаления элементов внутри списка, но корректно обновляем значение `i` после удаления элементов.
Руслан Краснов
ясно, спасибо! а в строчке del L[i - crush:i] имеется в виду del L[i - crush-1]? и еще почему то исправленная программа в бесконечный цикл уходит
Руслан Краснов
на примере 5 1 3 3 3 2 он уходит в цикл бесконечный
Похожие вопросы
- Питон, циклы, функция range
- Помогите с информатикой Задание сделать через ввод массива и for i in range() Python
- Ошибка TypeError: 'str' object is not callable . Python 3. Как исправить?
- Помогите исправить ошибку в коде. Python
- Опять "записная книжка" на Python. В прошлый раз упустил из виду что index возвращает только первое вхождение, т. е. (+)
- Как исправить число Pi? :)
- Помогите исправить код на питоне я постоянно проигрываю в камень ножницы бумага и игра не идёт до трех побед
- Помогите пожалуйста исправить мой код на языке питон
- Помогите исправить код
- Cannot import name 'XXX' from 'XXXXX' ошибка возникает как исправить?