2008-09-25 8 views
540

Дано:дисплей число с ведущими нулями

a = 1 
b = 10 
c = 100 

Я хочу, чтобы отобразить ведущие нули для всех чисел с менее чем 2 цифр, то есть:

01 
10 
100 
+0

Дубликат: http://stackoverflow.com/questions/733454/best-way -to-format-integer-as-string-with-leading-zeros – darkgaze 2016-09-08 09:50:30

+5

Я предполагаю, что связанный вопрос должен быть дубликатом этого (с точки зрения голосов, качества ответов и возраста) – TheEspinosa 2017-02-06 10:27:09

ответ

575

Здесь вы:

print "%02d" % (1,) 

В основном %, как printf или sprint.

+4

Пример: напечатать «% 05d»% result ['postalCode'] для 5-значного почтового индекса. – 2012-06-05 12:08:01

+1

`x ="% 02d.txt "% i` вызывает TypeError (не может конкатенировать объекты 'str' и 'int'), но` x = "% 02d.txt"% (i,) `does not. Интересно. Интересно, где это задокументировано – theta 2012-11-05 18:10:47

+0

@theta В 2.7.6, я не получаю сообщение об ошибке. Может быть, это была ошибка в конкретной версии Python, с которой они были исправлены? – 2014-04-04 14:51:00

49
x = [1, 10, 100] 
for i in x: 
    print '%02d' % i 

Результаты:

01 
10 
100 

Прочитать more information about string formatting using % в документации.

+9

Пример документации отстой. Они бросают сопоставление с ведущим нулевым образцом, поэтому трудно понять, что есть, если вы уже не знаете, как это работает. То, что привело меня сюда, на самом деле. – Grant 2009-07-01 17:52:50

274

В Python 2.6+ и 3.0+, вы бы использовать метод format() строки:

for i in (1, 10, 100): 
    print('{num:02d}'.format(num=i)) 

или с помощью (для одного номера):

print(format(i, '02d')) 

См. Документацию для новых функций форматирования PEP-3101.

599

Вы можете использовать zfill:

print str(1).zfill(2) 
print str(10).zfill(2) 
print str(100).zfill(2) 

печатает:

01 
10 
100 
36

вещий способ сделать это:

str(number).rjust(string_width, fill_char) 

Таким образом, исходная строка возвращается без изменений, если ее длина больше, чем string_width. Пример:

a = [1, 10, 100] 
for num in a: 
    print str(num).rjust(2, '0') 

Результаты:

01 
10 
100 
73
print('{:02}'.format(1)) 
print('{:02}'.format(10)) 
print('{:02}'.format(100)) 

печатает:

01 
10 
100 
2
width = 5 
num = 3 
formatted = (width - len(str(num))) * "0" + str(num) 
print formatted 
-1

Если дело с числами, которые являются либо одна или две цифры:

'0'+str(number)[-2:] или '0{0}'.format(number)[-2:]

6

В Python 3.6, вы можете сделать это сжато с f -струны с помощью:

f'{val:02}' 

, который печатает переменную с именем val с fill значением 0 и a width от 2.

Для вашего конкретного примера вы можете сделать это красиво в цикле:

a, b, c = 1, 10, 100 
for val in {a, b, c}: 
    print(f'{val:02}') 

который печатает:

01 
10 
100