Tampilkan nomor dengan nol di depan

911

Diberikan:

a = 1
b = 10
c = 100

Bagaimana cara menampilkan nol di depan untuk semua angka dengan kurang dari dua digit?

Ini adalah output yang saya harapkan:

01
10
100
ashchristopher
sumber

Jawaban:

1060

Dengan Python 2 (dan Python 3) Anda dapat melakukan:

print "%02d" % (1,)

Pada dasarnya % seperti printfatau sprintf(lihat dokumen ).


Untuk Python 3. +, perilaku yang sama juga dapat dicapai dengan format:

print("{:02d}".format(1))

Untuk Python 3.6+ perilaku yang sama dapat dicapai dengan f-string :

print(f"{1:02d}")
Jack M.
sumber
8
Contoh: cetak "% 05d"% hasil ['kode pos'] untuk kode pos 5 digit.
Nick Woodhams
2
x = "%02d.txt" % imemunculkan TypeError (tidak dapat menggabungkan objek 'str' dan 'int'), tetapi x = "%02d.txt" % (i,)tidak. Menarik. Saya ingin tahu di mana itu didokumentasikan
theta
@ theta Dalam 2.7.6, saya tidak mendapatkan kesalahan. Mungkin ini adalah bug dalam versi Python tertentu yang sejak itu telah mereka perbaiki?
Jack M.
1
Mungkin. Dalam 2.7.6 tidak ada pengecualian jika nilai format tidak tuple (setidaknya untuk contoh ini). Melihat tanggal komentar saya, saya kira saya menjalankan 2.7.3 saat itu, dan pada saat itu saya tidak tahu bahwa menempatkan variabel tunggal dalam tuple membuat Anda berada di sisi yang aman saat menggunakan %string formater.
theta
1
Untuk menguraikan, dokumen menjelaskan ini di sini: "Ketika tidak ada penyejajaran yang diberikan secara eksplisit, mendahului bidang lebar dengan karakter nol ('0') memungkinkan tanda-padding nol untuk tipe numerik. Ini sama dengan karakter isian dari ' 0 'dengan jenis pelurusan' = '. "
JHS
940

Anda bisa menggunakan str.zfill:

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

cetakan:

01
10
100
Datageek
sumber
71
Saya suka solusi ini, karena ini membantu tidak hanya ketika mengeluarkan nomor, tetapi ketika Anda perlu menetapkannya ke variabel ... misalnya x = str (datetime.date.today (). Bulan) .zfill (2) akan kembali x sebagai '02' untuk bulan Februari.
EroSan
2
Ini harus menjadi jawaban yang benar, karena "{1:02d}"tidak dapat memiliki variabel di tempat 2(seperti jika Anda membuat fungsi dinamis).
Joshua Varghese
363

Di Python 2.6+ dan 3.0+, Anda akan menggunakan format()metode string:

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

atau menggunakan built-in (untuk satu nomor):

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

Lihat dokumentasi PEP-3101 untuk fungsi pemformatan baru.

Ber
sumber
29
Berfungsi di Python 2.7.5 juga. Anda juga dapat menggunakan format '{: 02d}' (1) jika Anda tidak ingin menggunakan argumen bernama.
Jason Martens
1
Bekerja dengan baik di 2.7.2, dengan floating point "{0: 04.0f}". Format (1.1) menghasilkan 0001 (: 04 = setidaknya 4 karakter, dalam hal ini memimpin 0's, .0f = floating point tanpa desimal) . Saya menyadari% format tetapi ingin memodifikasi pernyataan .format yang ada tanpa menulis ulang seluruh hal. Terima kasih!
Michael Stimson
129
print('{:02}'.format(1))
print('{:02}'.format(10))
print('{:02}'.format(100))

cetakan:

01
10
100
Kresimir
sumber
1
Dengan cara ini Anda dapat mengulangi argumen beberapa kali dalam string:One zero:{0:02}, two zeros: {0:03}, ninezeros: {0:010}'.format(6)
srodriguex
2
Hanya kompatibel dengan Python 3. Jika menggunakan Python 2.7, lakukanprint '{:02}'.format(1)
Blairg23
89

Atau ini:

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

ajd
sumber
73

Dalam Python> = 3.6 , Anda dapat melakukan ini secara ringkas dengan f-string baru yang diperkenalkan dengan menggunakan:

f'{val:02}'

yang mencetak variabel dengan nama valdengan fillnilai 0dan widthdari2 .

Untuk contoh spesifik Anda, Anda dapat melakukannya dengan baik dalam satu lingkaran:

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

yang mencetak:

01 
10
100

Untuk informasi lebih lanjut tentang f-string, lihat PEP 498 di mana mereka diperkenalkan.

Dimitris Fasarakis Hilliard
sumber
56
x = [1, 10, 100]
for i in x:
    print '%02d' % i

menghasilkan:

01
10
100

Baca informasi lebih lanjut tentang pemformatan string menggunakan% dalam dokumentasi.

nosklo
sumber
9
Contoh dokumentasi menyebalkan. Mereka melakukan pemetaan dengan nol sampel awal, jadi sulit untuk mengetahui yang mana kecuali Anda sudah tahu cara kerjanya. Sebenarnya itulah yang membawaku ke sini.
Berikan
49

Cara Pythonic untuk melakukan ini:

str(number).rjust(string_width, fill_char)

Dengan cara ini, string asli dikembalikan tidak berubah jika panjangnya lebih besar dari string_width. Contoh:

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

Hasil:

01
10
100
ZuLu
sumber
33

Atau solusi lain.

"{:0>2}".format(number)
WinterChilly
sumber
3
Ini akan menjadi cara Python, meskipun saya akan memasukkan parameter untuk kejelasan - "{0:0>2}".format(number), jika seseorang ingin nLeadingZeros mereka harus mencatat mereka juga dapat melakukannya:"{0:0>{1}}".format(number, nLeadingZeros + 1)
Jonathan Allan
4

Beginilah cara saya melakukannya:

str(1).zfill(len(str(total)))

Pada dasarnya zfill mengambil jumlah nol terkemuka yang ingin Anda tambahkan, jadi mudah untuk mengambil angka terbesar, mengubahnya menjadi string dan mendapatkan panjangnya, seperti ini:

Python 3.6.5 (default, 11 Mei 2018, 04:00:52) 
[GCC 8.1.0] di linux
Ketik "bantuan", "hak cipta", "kredit" atau "lisensi" untuk informasi lebih lanjut.
>>> total = 100
>>> cetak (str (1) .zfill (len (str (total))))
001
>>> total = 1000
>>> cetak (str (1) .zfill (len (str (total))))
0001
>>> total = 10.000
>>> cetak (str (1) .zfill (len (str (total))))
00001
>>> 
Roberto
sumber
Bukankah ini bertentangan dengan jawaban Datageek ?
Peter Mortensen
1
width = 5
num = 3
formatted = (width - len(str(num))) * "0" + str(num)
print formatted
nvd
sumber
1

Anda dapat melakukan ini dengan f string .

import numpy as np

print(f'{np.random.choice([1, 124, 13566]):0>8}')

Ini akan mencetak panjang konstan 8, dan menempelkan sisanya dengan memimpin 0.

00000001
00000124
00013566
Nicolas Gervais
sumber
0

Menggunakan:

'00'[len(str(i)):] + str(i)

Atau dengan mathmodul:

import math
'00'[math.ceil(math.log(i, 10)):] + str(i)
Linekio
sumber
-2

Jika berhadapan dengan angka yang satu atau dua digit:

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

Tahu siapa
sumber