Frage

Ich muss herausfinden, wie man Zahlen als Zeichenfolgen formatiert.Mein Code ist hier:

return str(hours)+":"+str(minutes)+":"+str(seconds)+" "+ampm

Stunden und Minuten sind ganze Zahlen und Sekunden sind Gleitkommazahlen.Die Funktion str() wandelt alle diese Zahlen in Zehntelstellen (0,1) um.Anstatt dass mein String also „17:30:59,07 Uhr“ ausgibt, würde er etwa „5,0:30,0:59,1 Uhr“ anzeigen.

Fazit: Welche Bibliothek/Funktion benötige ich, um das für mich zu erledigen?

War es hilfreich?

Lösung

Ab Python 3.6 kann die Formatierung in Python mit erfolgen formatierte String-Literale oder F-Saiten:

hours, minutes, seconds = 6, 56, 33
f'{hours:02}:{minutes:02}:{seconds:02} {"pm" if hours > 12 else "am"}'

oder der str.format Funktion ab 2.7:

"{:02}:{:02}:{:02} {}".format(hours, minutes, seconds, "pm" if hours > 12 else "am")

oder der String-Formatierung % Operator für noch ältere Versionen von Python, aber beachten Sie den Hinweis in den Dokumenten:

"%02d:%02d:%02d" % (hours, minutes, seconds)

Und für Ihren speziellen Fall der Formatierungszeit gibt es noch etwas time.strftime:

import time

t = (0, 0, 0, hours, minutes, seconds, 0, 0, 0)
time.strftime('%I:%M:%S %p', t)

Andere Tipps

Ab Python 2.6 gibt es eine Alternative:Die str.format() Methode.Hier sind einige Beispiele für die Verwendung des vorhandenen String-Format-Operators (%):

>>> "Name: %s, age: %d" % ('John', 35) 
'Name: John, age: 35' 
>>> i = 45 
>>> 'dec: %d/oct: %#o/hex: %#X' % (i, i, i) 
'dec: 45/oct: 055/hex: 0X2D' 
>>> "MM/DD/YY = %02d/%02d/%02d" % (12, 7, 41) 
'MM/DD/YY = 12/07/41' 
>>> 'Total with tax: $%.2f' % (13.00 * 1.0825) 
'Total with tax: $14.07' 
>>> d = {'web': 'user', 'page': 42} 
>>> 'http://xxx.yyy.zzz/%(web)s/%(page)d.html' % d 
'http://xxx.yyy.zzz/user/42.html' 

Hier sind die entsprechenden Ausschnitte, aber mit str.format():

>>> "Name: {0}, age: {1}".format('John', 35) 
'Name: John, age: 35' 
>>> i = 45 
>>> 'dec: {0}/oct: {0:#o}/hex: {0:#X}'.format(i) 
'dec: 45/oct: 0o55/hex: 0X2D' 
>>> "MM/DD/YY = {0:02d}/{1:02d}/{2:02d}".format(12, 7, 41) 
'MM/DD/YY = 12/07/41' 
>>> 'Total with tax: ${0:.2f}'.format(13.00 * 1.0825) 
'Total with tax: $14.07' 
>>> d = {'web': 'user', 'page': 42} 
>>> 'http://xxx.yyy.zzz/{web}/{page}.html'.format(**d) 
'http://xxx.yyy.zzz/user/42.html'

Wie Python 2.6+ beherrschen alle Python 3-Versionen (bisher) beides.Ich habe dieses Zeug schamlos direkt herausgerissen mein Hardcore-Python-Einführungsbuch und die Folien für die Einführungs- und Mittelstufe Python-Kurse, die ich anbiete von Zeit zu Zeit. :-)

August 2018 UPDATE:Natürlich, jetzt wo wir es haben die F-String-Funktion in 3.6, wir brauchen die äquivalenten Beispiele von Das, ja noch eine Alternative:

>>> name, age = 'John', 35
>>> f'Name: {name}, age: {age}'
'Name: John, age: 35'

>>> i = 45
>>> f'dec: {i}/oct: {i:#o}/hex: {i:#X}'
'dec: 45/oct: 0o55/hex: 0X2D'

>>> m, d, y = 12, 7, 41
>>> f"MM/DD/YY = {m:02d}/{d:02d}/{y:02d}"
'MM/DD/YY = 12/07/41'

>>> f'Total with tax: ${13.00 * 1.0825:.2f}'
'Total with tax: $14.07'

>>> d = {'web': 'user', 'page': 42}
>>> f"http://xxx.yyy.zzz/{d['web']}/{d['page']}.html"
'http://xxx.yyy.zzz/user/42.html'

Python 2.6+

Es ist möglich, die zu verwenden format() Funktion, also können Sie in Ihrem Fall Folgendes verwenden:

return '{:02d}:{:02d}:{:.2f} {}'.format(hours, minutes, seconds, ampm)

Es gibt mehrere Möglichkeiten, diese Funktion zu verwenden. Weitere Informationen finden Sie hier Dokumentation.

Python 3.6+

f-strings ist eine neue Funktion, die der Sprache in Python 3.6 hinzugefügt wurde.Dies erleichtert die Formatierung von Zeichenfolgen notorisch:

return f'{hours:02d}:{minutes:02d}:{seconds:.2f} {ampm}'

Sie können die Zeichenfolgenformatierung im C-Stil verwenden:

"%d:%d:d" % (hours, minutes, seconds)

Siehe hier insbesondere: https://web.archive.org/web/20120415173443/http://diveintopython3.ep.io/strings.html

Sie können Folgendes verwenden, um die gewünschte Funktionalität zu erreichen

"%d:%d:d" % (hours, minutes, seconds)

str() in Python auf einem ganzzahligen Willen nicht Geben Sie alle Dezimalstellen aus.

Wenn Sie einen Float haben, bei dem Sie den Dezimalteil ignorieren möchten, können Sie str(int(floatValue)) verwenden.

Vielleicht demonstriert der folgende Code:

>>> str(5)
'5'
>>> int(8.7)
8

Wenn Sie einen Wert haben, der eine Dezimalzahl enthält, der Dezimalwert jedoch vernachlässigbar ist (d. h.:100.0) und versuchen Sie, das zu intieren, Sie erhalten eine Fehlermeldung.Es scheint albern, aber der Aufruf von float behebt das Problem.

str(int(float([Variable])))

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