Seite 1 von 1

Dynamische Formatierung von Zahlen

Verfasst: Sonntag 10. Juni 2007, 16:14
von Master_of_Mechanic
Hallo zusammen

Ich möchte eine Liste von Werten "Rechtsbündig" Ausgeben. Zu diesem Zweck
könnte ich ja folgendes machen

Code: Alles auswählen

for x in range(6,11):
    print '[%02d]' %(x)
das Ergebnis wäre dann folgerichtig:

[06]
[07]
[08]
[09]
[10]

Soweit alles klar (bis auf das mir der "Fachbegriff" für dies Formatierung fehlt! zum Nachschlagen)

Ich brauche aber etwas das mir eine variable Formatierung liefert. Also eine veränderbare Anzahl an vorangestellten Stellen

Ziel: abhängig von der größten Zahl in einer Liste, die Anzahl der Stellen festlegen. d.h. Bei Wert 11 halt 2 und bei 2486787354 eben 10.

Zu Fuß lässt sich das z.B. so umsetzen:

Code: Alles auswählen

def zz(Zahl,AnzahlStellen):
    s=str(Zahl)
    while len(s)<AnzahlStellen:
            s='0'+s
    return s
Aber da müsst es doch einen „eleganteren“ Weg gebe

Verfasst: Sonntag 10. Juni 2007, 17:01
von Sr4l
wiso habe ich hier gepostet?

*edit*
ach ich antworte mal:
angelehnt an EyDus posting auch wenn ich eins höher bin ;-)

Code: Alles auswählen

endzahl = 1234
max_laenge = len(str(endzahl))

for x in range(6,endzahl):
	print '[%s]' %(str(x).zfill(max_laenge))

Verfasst: Sonntag 10. Juni 2007, 17:04
von EyDu
Suchen hätte nicht geschadet, der letzte Thread mit diesem Thema ist noch gar nicht mal so alt:

http://www.python-forum.de/topic-10735. ... ght=nullen

Re: Dynamische Formatierung von Zahlen

Verfasst: Sonntag 10. Juni 2007, 17:41
von gerold
Master_of_Mechanic hat geschrieben:Soweit alles klar (bis auf das mir der "Fachbegriff" für dies Formatierung fehlt! zum Nachschlagen)
Ich brauche aber etwas das mir eine variable Formatierung liefert. Also eine veränderbare Anzahl an vorangestellten Stellen
Hallo Master_of_Mechanic!

Ich suche in diesem Fall immer auf http://docs.python.org/lib/genindex.html nach "%". Damit finde ich "% formatting" ("String Formatting Operations"). http://docs.python.org/lib/typesseq-strings.html

Das was du suchst ist "*". Damit kannst du die Stellenanzahl angeben.

Code: Alles auswählen

max_len = max( len(str(x)) for x in range(6, 11) )
for x in range(6,11):
    print '[%0*d]' % (max_len, x)
mfg
Gerold
:-)

Verfasst: Sonntag 10. Juni 2007, 17:50
von mawe

Code: Alles auswählen

max_len = max( len(str(x)) for x in range(6, 11) )
Mir wäre auf die Schnelle

Code: Alles auswählen

max_len = len(str(max(range(6, 11))))
eingefallen. Für Lisp-Liebhaber :) gerold's Variante ist aber farbenprächtiger :)

Verfasst: Sonntag 10. Juni 2007, 17:52
von Master_of_Mechanic
Danke gerold.
genau das habe ich gesucht!
mit ".zfill" ist es auch gut aber diese Variante ist wirklich genau das was ich gesucht habe und mit dem Begriff "formatting" komme ich für die Einzelheiten auch selbst weiter (denke ich :D )

Verfasst: Sonntag 10. Juni 2007, 18:26
von gerold
mawe hat geschrieben:

Code: Alles auswählen

max_len = max( len(str(x)) for x in range(6, 11) )
Mir wäre auf die Schnelle

Code: Alles auswählen

max_len = len(str(max(range(6, 11))))
eingefallen. Für Lisp-Liebhaber :) gerold's Variante ist aber farbenprächtiger :)
Hallo mawe!

Ich denke immer um mehrere Ecken herum. Das macht die Sache prickelnder. Auf den direkten Weg kommt sowiso jeder von selbst. :roll:

mfg
Gerold
:-)