Başında sıfır bulunan görüntüleme sayısı


910

Verilen:

a = 1
b = 10
c = 100

İki basamaktan az olan tüm sayılar için önde gelen sıfırı nasıl görüntülerim?

Bu beklediğim çıktı:

01
10
100

Yanıtlar:


1059

Python 2'de (ve Python 3'te) şunları yapabilirsiniz:

print "%02d" % (1,)

Temel olarak % , gibidir printfveya sprintf(bkz. Dokümanlar ).


Python 3. + için aynı davranış aşağıdakilerle de elde edilebilir format:

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

Python 3.6+ için aynı davranış f-stringleri ile elde edilebilir :

print(f"{1:02d}")

8
Örnek: 5 basamaklı bir posta kodu için "% 05d"% sonucunu ['postalCode'] yazdırın.
Nick Woodhams

2
x = "%02d.txt" % iTypeError öğesini yükseltir ('str' ve 'int' nesnelerini birleştiremez), ancak oluşturmaz x = "%02d.txt" % (i,). İlginç. Acaba bu nerede belgelendi
teta

@theta 2.7.6 sürümünde hata almıyorum. Belki de bu, Python'un belirli bir versiyonunda düzelttikleri bir hataydı?
Jack

1
Olabilir. 2.7.6'da, biçim değerinin bir demet olmaması durumunda bir istisna yoktur (en azından bu örnek için). Yorumumun tarihine baktığımda, o zaman 2.7.3 çalıştırıyordum ve o zaman tek bir değişkeni bir demet içine koymanın %dize formatlayıcı kullanırken sizi güvenli bir tarafa götürdüğünü bilmiyordum .
teta

1
Ayrıntılı olarak, dokümanlar bunu burada açıklıyor: "Açık bir hizalama verilmediğinde, genişlik alanının sıfır ('0') karakteri ile önüne geçilmesi, sayısal türler için işaretli sıfır dolgusu sağlar. Bu, ' 0 ',' = 'hizalama türüyle. "
JHS

940

Şunları kullanabilirsiniz str.zfill:

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

baskılar:

01
10
100

71
Bu sayıyı seviyorum, çünkü sadece sayı çıktısını verirken değil, bir değişkene atamanız gerektiğinde ... örneğin x = str (datetime.date.today (). Ay) .zfill (2) x şubat ayı için '02' olarak.
EroSan

2
Bu doğru yanıt olmalıdır, çünkü "{1:02d}"yerine değişkenler olamaz 2(dinamik bir işlev oluşturuyorsunuz gibi).
Joshua Varghese

363

Python 2.6+ ve 3.0+ sürümlerinde format()string yöntemini kullanırsınız:

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

veya yerleşik (tek bir numara için) kullanarak:

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

Bkz PEP-3101 yeni biçimlendirme işlevleri için belgelere.


29
Python 2.7.5'te de çalışır. Adlandırılmış bağımsız değişkenleri kullanmak istemiyorsanız '{: 02d}'. Biçimini (1) de kullanabilirsiniz.
Jason Martens

1
2.7.2 'de kayar nokta "{0: 04.0f}" ile iyi çalışır. Format (1.1) 0001 (: 04 = en az 4 karakter, bu durumda önde gelen 0'lar, .0f = ondalıksız kayan nokta) verir . % Biçimlendirme farkındayım ama her şeyi yeniden yazmadan varolan bir .format deyimini değiştirmek istedim . Teşekkürler!
Michael Stimson

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

baskılar:

01
10
100

1
Bu şekilde, argümanı dize içinde birkaç kez tekrarlamanıza izin verin:One zero:{0:02}, two zeros: {0:03}, ninezeros: {0:010}'.format(6)
srodriguex

2
Sadece Python 3 ile uyumludur. Python 2.7 kullanıyorsanızprint '{:02}'.format(1)
Blairg23


73

In Python> = 3.6 ve öz olarak kullanarak başlanan yeni f-dizeleri ile yapabilirsiniz:

f'{val:02}'

değişkenin adıyla ve a arasında valbir filldeğer yazdırır .0width2

Özel örneğiniz için bunu bir döngüde güzelce yapabilirsiniz:

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

hangi baskılar:

01 
10
100

F-dizeleri hakkında daha fazla bilgi için , tanıtıldıkları PEP 498'e bakınız .



49

Bunu yapmanın Pythonic yolu:

str(number).rjust(string_width, fill_char)

Bu şekilde, uzunluğu string_width değerinden büyükse orijinal dize değişmeden döndürülür. Misal:

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

Sonuçlar:

01
10
100

33

Ya da başka bir çözüm.

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

3
Bu, Python yolu olurdu, ancak netlik parametresini ekleyeceğim - "{0:0>2}".format(number)eğer birisi nLeadingZeros isteyecekse, şunları da yapabileceğini not etmelidir:"{0:0>{1}}".format(number, nLeadingZeros + 1)
Jonathan Allan


4

Bunu nasıl yaparım:

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

Temel olarak zfill, eklemek istediğiniz önde gelen sıfırların sayısını alır, bu nedenle en büyük sayıyı almak, bir dizeye dönüştürmek ve uzunluğu elde etmek kolaydır:

Python 3.6.5 (varsayılan, 11 Mayıs 2018, 04:00:52) 
[GCC 8.1.0] Linux üzerinde
Daha fazla bilgi için "yardım", "telif hakkı", "kredi" veya "lisans" yazın.
>>> toplam = 100
>>> yazdır (str (1) .zfill (len (str (toplam)))))
001
>>> toplam = 1000
>>> yazdır (str (1) .zfill (len (str (toplam)))))
0001
>>> toplam = 10000
>>> yazdır (str (1) .zfill (len (str (toplam)))))
00001
>>> 


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

1

Bunu f dizeleri ile yapabilirsiniz .

import numpy as np

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

Bu, 8 sabit uzunluğunu yazdıracak ve gerisini önde olacak şekilde yerleştirecektir 0.

00000001
00000124
00013566

0

kullanın:

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

Veya mathmodülle:

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


-2

Bir veya iki basamaklı sayılarla ilgileniyorsanız:

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.