Dynamische Formatierung von Zahlen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Master_of_Mechanic
User
Beiträge: 5
Registriert: Samstag 12. Mai 2007, 18:35

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
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

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))
Zuletzt geändert von Sr4l am Sonntag 10. Juni 2007, 17:16, insgesamt 2-mal geändert.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

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 :)
Master_of_Mechanic
User
Beiträge: 5
Registriert: Samstag 12. Mai 2007, 18:35

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 )
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten