Python

Питон, циклы, функция range

a='123456789abcdef'
start=0
stop=len(a)
step=1
for i in range(start,stop,step):
print(a[i])
step=step+1
возможно ли как-то повлиять внутри цикла на параметры фунции range ( start,stop,step)?
Документация как бы намекает нам:
The range type represents an immutable sequence of numbers...
и
New in version 3.3: The start, stop and step attributes.
https://docs.python.org/3/library/stdtypes.html#range
Атрибуты какбэ есть, но их нельзя менять.

Берём, пробуем, чтобы понять, насколько нельзя:
 r = range(0, 10, 2)
for i in r:
print(i)
if i == 6: r.stop = 16
Запускаем, получаем от интерпретатора по щам:
 0
2
4
6
Traceback (most recent call last):
File "/home/main.py", line 199, in
if i == 6: r.stop = 16
AttributeError: readonly attribute
Двойные стандарты: мне-то не даёт сделать класс с атрибутами только для чтения. Прямо как Паскаль какой-то, прости, Господи.

Какие варианты:
1) Переделать на while, как выше советуют.
2) Если нужно уменьшить диапазон на ходу, можно использовать break.
3) Если шаг меняется по некоему закону (например, кольцо шагов в списке), можно итерироваться по отдельному индексу, а сам шаг на каждой итерации брать из списка или вычислять.
4) Написать свой range, с шагом и атрибутами.
5) Использовать самомодифицирующийся цикл. Верный путь к труднообнаружимым ошибкам, но если ты не ПТУшник и не гуманитарий, то можно. Это тоже ручное управление циклом, как и while, но плюс - можно подложить в список сразу несколько элементов.
 my_range = [0]
for i in my_range:
print(i)
if i < 100: my_range.append((i + 1) ** 2)
6) Использовать функции из itertools. Они позволяют построить достаточно большое количество сценариев итерирования.
Алмазхан Чучбекович
Алмазхан Чучбекович
87 571
Лучший ответ
 a = '123456789abcdef' 
start = 0
stop = len(a)
step = 1

for i in range(start, stop, step):
print(a[i])

# Изменение параметров range
if i == 2:
start = 3
stop = 8
step = 2
Петр Енин
Петр Енин
97 785
Андрей Лахурин не получается
Петр Енин Ну , разумеется)))

 a = '123456789abcdef' 
start = 0
stop = len(a)
step = 1
i = start

while i < stop:
print(a[i])

# Изменение параметров range
if i == 2:
start = 3
stop = 8
step = 2

i += step