Если вы можете использовать RegEx , вы можете иметь чистый и читаемый код:
import re
def decode(mstr):
reg_res = re.findall("\d*\w", text)
res = ''.join([x[-1]*int(x[0:-1]) for x in reg_res])
return res
text = "02t04a10b"
print(decode(text))
Выход:
ttaaaabbbbbbbbbb
Объяснение строки:
reg_res = re.findall("\d*\w", text)
В этой строке мы находим все пары цифра / буква. В контексте RegEx \d*
означает «все цифры», а \w
означает «букву»: мы ищем все группы, образованные n цифрами, за которыми следует буква
res = ''.join([x[-1]*int(x[0:-1]) for x in reg_res])
В этой строке для каждой пары (for x in reg_res
) мы берем последний символ x[-1]
(мы знаем, что это наша буква) и умножаем его на предыдущее число int(x[0:-1)
. мы объединяем все результаты в одну строку без пробелов с ''.join(list)
Если вы не можете использовать RegEx :
def decode(mstr):
res = []
num = ''
for l in mstr:
if l.isdigit():
num += l
else:
res.append(l*int(num))
num = ''
return ''.join(res)
text = "02t04a10b"
print(decode(text))
Выход:
ttaaaabbbbbbbbbb
Объяснение строки:
if l.isdigit():
num += l
else:
res.append(l*int(num))
num = ''
для каждого char
в mstr
, если char
является цифрой, добавьте char
к держателю номера, иначе умножьте символ для держателя номера и добавьте результат