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

Dynamische Formatierung von Zahlen

Beitragvon Master_of_Mechanic » Sonntag 10. Juni 2007, 16:14

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:

Beitragvon Sr4l » Sonntag 10. Juni 2007, 17:01

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: 4866
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Sonntag 10. Juni 2007, 17:04

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.html?highlight=nullen
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: Dynamische Formatierung von Zahlen

Beitragvon gerold » Sonntag 10. Juni 2007, 17:41

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])

Beitragvon mawe » Sonntag 10. Juni 2007, 17:50

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

Beitragvon Master_of_Mechanic » Sonntag 10. Juni 2007, 17:52

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: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Sonntag 10. Juni 2007, 18:26

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.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder