Используйте форматированную строку для разделения групп цифр - PullRequest
0 голосов
/ 27 апреля 2018

Учитывая число как 12345678910 Я хочу вывести number id 123.456.789-10.

Я пробовал это:

print('number id {0:1.3}.{0:1.3}.{0:1.3}-{0:1.3}'.format("12345678910"))

но результат равен number id 123.123.123-123. Как это сделать правильно?

1 Ответ

0 голосов
/ 27 апреля 2018

Это один из способов достичь того, что вы хотите сделать:

number = "12345678910"
print(
    'number id {0}.{1}.{2}-{3}'.format(
        *[number[i:i+3] for i in range(0,len(number), 3)]
    )
)
#number id 123.456.789-10.

Есть несколько проблем с вашим кодом. Сначала первое число в "{0...}" относится к позиционному аргументу в функции format(). В вашем случае вы использовали все 0, которое относится только к первому аргументу. Вот почему одна и та же подстрока повторяется снова и снова. (Обратите внимание, как я изменил его на {0}.{1}...{3}.)

Я передаю *[number[i:i+3] for i in range(0,len(number), 3)] в функцию форматирования, которая просто разбивает вашу строку на куски по 3.

print([number[i:i+3] for i in range(0,len(number), 3)])
#['123', '456', '789', '10']

Оператор * распаковывает аргумент , который передает элементы списка по порядку format().


Обновление

Если @ user2357112 упомянуто в комментариях , в этом случае вам ничего не нужно заключать в фигурные скобки. Просто используйте {} для представления заполнителей.

print(
    'number id {}.{}.{}-{}'.format(
        *[number[i:i+3] for i in range(0,len(number), 3)]
    )
)
...