Frage

Gegeben:

a = 1
b = 10
c = 100

Wie zeige ich eine führende Null für alle Zahlen mit weniger als zwei Ziffern?

Das heißt,

01
10
100
War es hilfreich?

Lösung

In Python 2 Sie tun können:

print "%02d" % (1,)

Im Grunde % ist wie printf oder sprintf.


Für Python 3. + das gleiche Verhalten kann erreicht werden durch:

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

Für Python 3.6+ das gleiche Verhalten kann mit f-Strings erreicht werden:

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

Andere Tipps

Sie können mit str.zfill :

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

druckt:

01
10
100

In Python 2.6+ und 3.0+, würden Sie die format() string Methode:

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

oder mit dem integrierten (für eine einzelne Zahl):

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

Sehen Sie die PEP-3101 Dokumentation für die neuen Formatierungsfunktionen.

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

druckt:

01
10
100

Oder diese:

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

In Python> = 3.6 , können Sie dies kurz und bündig mit den neuen f-Strings, die durch die Verwendung eingeführt wurden:

f'{val:02}'

, die drucken die Variable mit Namen val mit einem fill Wert von 0 und ein width von 2.

Für Ihr spezielles Beispiel können Sie dies in einer Schleife gut tun:

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

, welche druckt:

01 
10
100

Weitere Informationen über die f-Strings, werfen Sie einen Blick auf PEP 498 wo sie eingeführt wurden.

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

Ergebnisse in:

01
10
100

Lesen Sie Weitere Informationen zu Zeichenfolge Formatierung% in der Dokumentation verwendet wird.

Der Pythonic Weg, dies zu tun:

str(number).rjust(string_width, fill_char)

Auf diese Weise wird die ursprüngliche Zeichenfolge zurückgegeben, wenn seine Länge größer als string_width ist. Beispiel:

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

Ergebnisse:

01
10
100

oder eine andere Lösung.

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

einen Format-String verwenden - http://docs.python.org/lib/typesseq -strings.html

Zum Beispiel:

python -c 'print "%(num)02d" % {"num":5}'
width = 5
num = 3
formatted = (width - len(str(num))) * "0" + str(num)
print formatted

Dies ist, wie ich es tun:

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

Im Grunde nimmt ZFill die Anzahl der führenden Nullen Sie hinzufügen möchten, so ist es einfach, die größte Zahl zu nehmen, schalten Sie ihn in einen String und die Länge zu erhalten, wie folgt:

Python 3.6.5 (default, May 11 2018, 04:00:52) 
[GCC 8.1.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> total = 100
>>> print(str(1).zfill(len(str(total))))
001
>>> total = 1000
>>> print(str(1).zfill(len(str(total))))
0001
>>> total = 10000
>>> print(str(1).zfill(len(str(total))))
00001
>>> 

Verwendung:

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

oder mit dem math Modul:

import math
'00'[math.ceil(math.log(i, 10)):] + str(i)
s=1    
s="%02d"%s    
print(s)

das Ergebnis wird sein, 01

Wenn Umgang mit Zahlen, die entweder eine oder zwei Ziffern sind:

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

! / Usr / bin / env python3

Urheberrecht 2009-2017 BHG http://bw.org/

x = 5

while (x <= 15):
    a =  str("{:04}".format(x))
    print(a)
    x = x + 1;

gleichen Code wie ein Bild

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top