2008-09-25 40 views
540

Given:số hiển thị với số không hàng đầu

a = 1 
b = 10 
c = 100 

Tôi muốn hiển thị một số không hàng đầu cho tất cả các số có ít hơn 2 chữ số, ví dụ:

01 
10 
100 
+0

trùng lặp: http://stackoverflow.com/questions/733454/best-way -to-định dạng-số nguyên-như-chuỗi-với-hàng đầu-số không – darkgaze

+5

Tôi đoán câu hỏi được liên kết nên là bản sao của điều này (về số phiếu, chất lượng câu trả lời và tuổi) – TheEspinosa

Trả lời

575

Ở đây bạn là:

print "%02d" % (1,) 

Về cơ bản % là như printf hoặc sprint.

+4

Ví dụ: in "% 05d"% result ['postalCode'] cho mã bưu chính gồm 5 chữ số. –

+1

'x ="% 02d.txt "% i' tăng TypeError (không thể nối các đối tượng 'str' và 'int'), nhưng' x = "% 02d.txt"% (i,) 'thì không. Hấp dẫn. Tôi tự hỏi đâu là tài liệu – theta

+0

@theta Trong 2.7.6, tôi không gặp lỗi. Có lẽ đây là lỗi trong một phiên bản Python cụ thể mà họ đã khắc phục? –

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

kết quả:

01 
10 
100 

Đọc more information about string formatting using % trong tài liệu.

+9

Ví dụ tài liệu hút. Họ ném bản đồ vào với mẫu số 0 đứng đầu, vì vậy thật khó để biết được cái nào trừ khi bạn đã biết nó hoạt động như thế nào. Đó là những gì mang lại cho tôi ở đây, thực sự. – Grant

274

Trong Python 2.6+ và 3.0+, bạn sẽ sử dụng phương pháp format() chuỗi:

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

hoặc sử dụng được tích hợp (cho một số):

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

Xem tài liệu PEP-3101 cho các chức năng định dạng mới.

+25

Hoạt động trong Python 2.7.5. Bạn cũng có thể sử dụng định dạng '{: 02d}' (1) nếu bạn không muốn sử dụng các đối số được đặt tên. –

+0

Hoạt động tốt trong 2.7.2, với dấu phẩy động "{0: 04.0f}". Định dạng (1.1) cho 0001 (: 04 = ít nhất 4 ký tự, trong trường hợp này dẫn 0, .0f = dấu phẩy động không có số thập phân). Tôi biết về định dạng% nhưng muốn sửa đổi câu lệnh .format hiện có mà không cần viết lại toàn bộ * toàn bộ *. Cảm ơn! –

599

Bạn có thể sử dụng zfill:

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

in:

01 
10 
100 
+49

Tôi thích giải pháp này, vì nó giúp không chỉ khi xuất số, nhưng khi bạn cần gán nó cho một biến ... ví dụ x = str (datetime.date.today(). month) .zfill (2) sẽ trả về x là '02' cho tháng feb. – EroSan

82

Hoặc này:

print '{0:02d}'.format(1)

36

Cách pythonic để làm điều này:

str(number).rjust(string_width, fill_char) 

Bằng cách này, chuỗi gốc được trả về không đổi nếu chiều dài của nó lớn hơn string_width. Ví dụ:

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

Kết quả:

01 
10 
100 
+0

Ma thuật của python! Câu trả lời tuyệt vời – SAAD

+0

các giải pháp tuyệt vời !!! –

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

in:

01 
10 
100 
+1

Cách này cho phép bạn lặp lại đối số vài lần trong chuỗi: 'Một số không: {0:02}, hai số không: {0:03}, chínzeros: {0: 010} '. Định dạng (6)' – srodriguex

+2

Chỉ tương thích với Python 3. Nếu sử dụng Python 2.7, làm 'print '{: 02}'. Định dạng (1)' – Blairg23

2
width = 5 
num = 3 
formatted = (width - len(str(num))) * "0" + str(num) 
print formatted 
29

Hoặc một giải pháp.

"{:0>2}".format(number) 
+2

Rõ ràng hơn, Cảm ơn bạn. – Zety

+0

Đây sẽ là cách Python, mặc dù tôi sẽ bao gồm các tham số cho rõ ràng - '" {0: 0> 2} ".định dạng (số) ', nếu ai đó sẽ muốn nLeadingZeros họ nên lưu ý họ cũng có thể làm:' "{0: 0> {1}}". định dạng (số, nLeadingZeros + 1) ' –

-1

Nếu đối phó với những con số mà là một hoặc hai chữ số:

'0'+str(number)[-2:] hoặc '0{0}'.format(number)[-2:]

6

Trong Python 3.6, bạn có thể làm điều này một cách ngắn gọn với f -strings bằng cách sử dụng:

f'{val:02}' 

in biến có tên val với giá trị fill của 0width trong số 2.

Ví dụ cụ thể của bạn, bạn có thể làm điều này độc đáo trong một vòng lặp:

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

mà in:

01 
10 
100 
Các vấn đề liên quan