Прошу прощения, неверно прочитал условия задачи.
Абсолютно верную логику подсказывает Дима. Нужно "проваливаться" вглубь от конца при достижении z и инкрементировать значение предыдущего индекса, сбрасывая текущий индекс на начало алфавита.
Однако, у вас есть условие, которое противоречит заданной логике. ID содержит так же и цифры, которые не содержатся в алфавите.
Я позволил себе представить, что цифры в алфавите так же должны быть, и написал неоторую развернутую версию решения:
Python:
abc = "0123456789abcdefghijklmnopqrstuvwxyz"
notice_1 = "1ab3g"
def update_id(some, pivot=-1):
if some[pivot] == abc[-1]:
if len(some)+pivot == 0:
some[0:pivot] = abc[0]
else:
update_id(some, pivot-1)
some[pivot] = abc[0]
else:
some[pivot] = abc[abc.index(some[pivot])+1]
# для тестов генерируем 10000 идентификаторов от notice_1
for i in range(100000):
notice_1 = list(notice_1)
update_id(notice_1)
print("".join(notice_1))
Решение основывается на принципе изменяемости (мутабельности) списков и рекурсии.
В нулевой строке мы задаем алфавит (т.е. порядок следования элементов для замены).
Внутри цикла for, где генерируются идентификаторы - приводим наш notice_1 к списку, чтобы иметь возможность менять его элементы "на лету" не прибегая к возвратам и новым заменам.
А вот что происходит внутри функции update_id.
"Точка привязки" (pivot) - это индекс обрабатываемого элемента. По умолчанию = -1 - т.е. последний элемент от конца
Если в нашем списке последний элемент равен "z" (на самом деле последнему символу алфавита), то мы выполним ту же функцию для элемента -2 - это предпоследний элемент, тем временем имеющийся "z" мы заменим на первый символ из алфавита (в нашем случае - это 0)
Если же рабочий элемент (по индексу pivot) - не является "z" - то мы просто заменим его на следующий символ из алфавита.
Тут нужно учесть, что когда мы сталкиваемся с ситуацией, в которой уже все символы заменились на "z" - нам необходимо "обнулить строку" и добавить к ней еще один элемент. Делается это при условии, что длина массива стала быть равна сдвигу нашей точки привязки (pivot)