РЕДАКТИРОВАТЬ: в этом есть что-то большее, чем просто ошибка "поштучно".
В следующем простом алгоритме я обнаружил ошибку "поштучно", которая должна отображатьколичество букв в строке вдоль строк run-length encoding
.
Я могу понять, почему последний символ не добавляется в строку результата, но если я увеличу range
до i
Iполучить index out of range
по понятным причинам.
Я хочу знать, в чем здесь концептуальная проблема с точки зрения разработки алгоритма, а также просто заставить мой код работать.
Нужно ли мне немногоспециальный регистр кода для обработки последнего элемента в исходной строке? Или, может быть, имеет смысл сравнивать текущий символ с символом previous
, хотя это создает проблему в начале алгоритма?
Существует ли общий подход к алгоритму такого типа, где текущийэлементы сравниваются с предыдущими / следующими элементами, что позволяет избежать проблем с индексом вне диапазона?
def encode(text):
# stores output string
encoding = ""
i = 0
while i < len(text) - 1:
# count occurrences of character at index i
count = 1
while text[i] == text[i + 1]:
count += 1
i += 1
# append current character and its count to the result
encoding += text[i] + str(count)
i += 1
return encoding
text = "Hello World"
print(encode(text))
# Gives H1e1l2o1 1W1o1r1l1