Решение задачи Python. IndexError: string Index ot of range
Кодирование осуществляется следующим образом:
s = 'aaaabbсaa' преобразуется в 'a4b2с1a2', то есть группы одинаковых символов исходной строки заменяются на этот символ и количество его повторений в этой позиции строки.
vvod = input()
c = 1
povt = 1
for i in range((len(vvod))):
while vvod[(c-1)] == vvod[c]:
povt += 1
c += 1
print(vvod[c-1] + str(povt), end='')
povt = 1
c += 1
все выводится правильно, только когда призодит время вывода последних букв, он пишет, что IndexError: string Index ot of range
Я уже решил сам эту задачу, но способ, которым я исправил ошибку... Я ору...
vvod = input()
idea = vvod + '.'
c = 1
povt = 1
for i in range((len(vvod))):
if c > len(vvod):
break
while idea[(c-1)] == idea[c]:
povt += 1
c += 1
print(idea[c-1] + str(povt), end='')
povt = 1
c += 1
Ответы (3 шт):
На ~последней итерации цикла for переменная c становится равной len(vvod). То есть равной максимальному индексу + 1 (так как индексы начинаются с нуля). Из этого вылезает ошибка на следующем входе (+-. Вашу реализацию сложно понять. Поработайте над кодом..) в цикл.
Можно сказать, что когда переменная c после последней строчке цикла равна len(vvod), то цикл for прошел все символы, а значит следующий вход в цикл несколько некоректен. Можно это исправить добавив условие проверки перед телом цикла вроде if c == len(vvod): break, но лучше написать правильней все с нуля...
string =input()
result =str()
repeats =int()
for index, char in enumerate(string):
if index != 0 and char == string[index - 1]:
""" Текущий символ такой же, что и предыдущий.
Увеличиваем счетчик:
"""
repeats=repeats + 1
""" Блокируем добавление повторяющегося символа:
"""
continue
else:
if repeats:
""" Учет повтора закончен.
"""
result=result + str(repeats + 1)
""" Сбросим счетчик:
"""
repeats=int()
""" Добавляем уникальный символ:
"""
result=result + char
print(result)
Можно навернуть все куда компактней, но в качестве демонстрации это будет лучше.
Поделюсь своим вариантом без использования индексации:
inp = input('Введите произвольную строку:')
prev = '' # предыдущий символ
repeat = 1 # счетчик повторов
result = [] # буфер результатов
# проход по символам полученной строки
for cur in inp:
# если предыдущий и текущий символы равны, то наращиваем счетчик
if prev == cur:
repeat += 1
# если предыдущий и текущий символы неравны и предыдущий не пустой,
# то сбрасываем результат в буфер и обнуляем счетчик
elif (prev != cur) and (prev != ''):
result.append(f'{prev}{repeat}')
repeat = 1
# передача текущего символа в предыдущий
prev = cur
# сброс последнего результата в буфер
result.append(f'{prev}{repeat}')
# генерация строки результата
print(''.join(result))
Результат выполнения:
> Введите произвольную строку:aaadddddffcsserrrrrrraassss
a3d5f2c1s2e1r7a2s4
Если убрать из вашего кода лишнее, то останется:
vvod = 'aaaabbсaa'
povt = 1
for i in range(1, len(vvod) + 1):
if i == len(vvod) or vvod[i-1] != vvod[i]:
print(vvod[i-1] + str(povt), end='')
povt = 1
else:
povt += 1