Проблемы с преобразованием строки в целые числа и обратно

Задача: написать функцию, которая определяет числа в строке и прибавляет 1 к этому числу.

Например: abc должен вывести abc1, cde000 должен вывести cde001, xyz0005 должен вывести xyz0006 и т. д.

Мой код:

def increment_string(strng):
    strlist = []
    numlist = []
    x = ''
    y = ''
    for i in strng:
        if i.isdigit() == False:
             strlist.append(i)
             x = ''.join(strlist)
        else:
            numlist.append(i)
            y = ''.join(numlist)
    if len(numlist) == 0:
        return x + '1'
    else:
        y = int(y)
        y +=1
        y = str(y)
        return x + y

И, собственно, проблема, которую я не могу решить:

print(increment_string('xyz0005'))

выдает мне xyz6, а не xyz0006.


Ответы (2 шт):

Автор решения: splash58

Пока в конце цифры, добавляем единичку с переносом. Как только не цифра, прерываем процесс и добавляем 1, если надо

def increment_string(strng):
    strng = list(strng)
    rest = 1
    i = len(strng)-1
    while i and strng[i].isdigit() :
        x = int(strng[i]) + rest
        rest,x = divmod(x, 10)
        strng[i] = str(x)
        i -= 1
    if rest :
        strng = strng[0:i+1]+[str(rest)]+strng[i+1:]
    return ''.join(strng)
→ Ссылка
Автор решения: vadim vaduxa
def increment_string(strng, s=''):
    for a in reversed(strng):
        if a.isdigit():
            if a == '0':
                if s: break
                else: return strng[:-1] + '1'
            else: s = a + s
        elif s: break
        else: return strng + '1'
    s = str(int(s) + 1)
    return strng[:-len(s)] + s
→ Ссылка