Как вывести переменную по частям

Например у меня есть переменная a= 123456789 Как вывести ее с дефисами следующим образом "12-345-67-89"


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

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

Как-то так?

b = str(123456789)
print(b[0:2]+'-'+b[2:5]+'-'+b[5:7]+'-'+b[7:9])

Или

a=[2,3,2,2]
b=str(123456789)

i=0
def sslice(n):
  global i
  j=i
  i+=n
  return b[j:i]

print("-".join(map(sslice,a)))
→ Ссылка
Автор решения: Oopss
def ins_minus(s:str, pos:list)->str:
    ls=list(s)
    cpos=0
    for i in pos:
        cpos+=i
        if cpos < len(ls):
            ls.insert(cpos,'-')
        cpos+=1
    return ''.join(ls)

a = '123456789'
t = [2,3,2,2]
print(ins_minus(a,t))

a = '1234567890'
t = [5]
print(ins_minus(a,t))

a = '1234567890'
t = [1,1,1,1,1,1,1,1,1]
print(ins_minus(a,t))

a = '1234567890'
t = [3,3,2,2]
print(ins_minus(a,t))

12-345-67-89
12345-67890
1-2-3-4-5-6-7-8-9-0
123-456-78-90
→ Ссылка
Автор решения: Stanislav Volodarskiy

Форматируйте удобно:

def format(fmt, n):
    it = iter(str(n))
    return ''.join(next(it) if c == '#' else c for c in fmt)


print(format('##-###-##-##', 123456789))
$ python format.py
12-345-67-89

Добавлена проверка, что все цифры выведены. Программа остановится если цифр слишком много или слишком мало:

def format(fmt, n):
    it = iter(str(n))
    s = ''.join(next(it) if c == '#' else c for c in fmt)
    for _ in it:
        assert False
    return s
→ Ссылка