Ну, ответ на вашу проблему: «у вас есть бесконечное число oop». Почему?
Проверьте эту часть вашего кода:
if j == len(n) - 1:
s += 1
m += n[j] + str(s)
Как видите, этот блок внутри оператора if
будет выполняться, когда j == len(n)-1
означает, что j
( вы используете для l oop через n
достигнет последнего элемента в строке n
. Таким образом, после этой строки j
останется то же значение и больше ничего не будет выполняться, то есть условие j < len(n)
будет будь True
навсегда, следовательно, твой бесконечный l oop. Теперь у тебя есть варианты здесь:
- Вы можете добавить j+=1
внутри этого блока if
.
if j == len(n) - 1:
s += 1
m += n[j] + str(s)
j += 1
- Вы можете добавить j+=1
вне всех if
блоков и удалить его из других if
блоков
while j < len(n):
if j == len(n) - 1:
s += 1
m += n[j] + str(s)
elif n[i] != n[j]:
m += n[i] + str(s)
i += 1
s = 1
else:
i += 1
s += 1
j += 1
Теперь есть некоторые проблемы логики c, касающиеся некоторых опций. Я проведу рефакторинг вашего кода и исправлю проблемы. Также я настоятельно рекомендую вам использовать значимые имена переменных. Это поможет другим и вам (в будущем) понять и отладить ваш код.
word = input()
result = "" # This will hold the result string
# Will assume user did not input an empty string. You could check that though
currentLetter = word[0] # Get the first letter
currentCount = 1 # Count it as 1
j = 1 # To start from the index 1 and iterate over word letters
while(j < len(word)):
if word[j] != currentLetter:
# if the letter on the current index is different from the currentLetter
# means there was a change so we must add to the result string what
# we counted (letter and count)
result += currentLetter + str(currentCount)
# Get the new letter and set its count to 1
currentLetter = word[j]
currentCount = 1
else:
# Else the letter is the same so far -> increase count
currentCount += 1
j += 1 # Increase index variable
else:
# This else will execute when the while condition is false
# add the remaining values
result += currentLetter + str(currentCount)
print(result)