import re
import string
value = 'Hel12o 16e15ple'
for number in re.findall(r'[0-9]+', value):
value = value.replace(number, string.ascii_lowercase[int(number) - 1])
Вариант без использования регулярного выражения:
import string
from typing import List
def find_numbers(string: str) -> List[int]:
temp_string = ''
numbers = []
for char in string:
if char.isdigit():
temp_string += char
elif temp_string:
numbers.append(int(temp_string))
temp_string = ''
return numbers
value = 'Hel12o 16e15ple'
for number in find_numbers(value):
value = value.replace(str(number), string.ascii_lowercase[number - 1])
"Поправленный" твой вариант:
latin="abcdefghijklmnopqrstuvwxyz"
text = input("Введите строку: ")
i = 0
s = ""
while i < len(text):
a = text[i]
while "0" <= a <= "9":
s += a
i += 1
if i < len(text):
a = text[i]
else:
break
i += 1
if s != "":
#print(type(s))
text = text.replace(s,latin[int(s)-1])
if len(s) > 1:
i -= len(s) - 1
s = ""
Еще один вариант, близкий твоему, но более правильный:
latin = "abcdefghijklmnopqrstuvwxyz"
text = input("Введите строку: ")
i = 0
s = ""
for a in text:
if "0" <= a <= "9":
s += a
continue
elif s != "":
text = text.replace(s, latin[int(s)-1])
s = ""