Проблемы с преобразованием строки в целые числа и обратно
Задача: написать функцию, которая определяет числа в строке и прибавляет 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