Mettre en forme les nombres en chaînes en Python


112

J'ai besoin de savoir comment formater les nombres sous forme de chaînes. Mon code est ici:

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

Les heures et les minutes sont des nombres entiers et les secondes sont des flottants. la fonction str () convertira tous ces nombres en dixièmes (0,1). Ainsi, au lieu que ma chaîne affiche "5: 30: 59.07 pm", elle afficherait quelque chose comme "5.0: 30.0: 59.1 pm".

En bout de ligne, de quelle bibliothèque / fonction ai-je besoin pour faire cela pour moi?

Réponses:


138

À partir de Python 3.6, le formatage en Python peut être effectué à l'aide de littéraux de chaîne formatés ou de chaînes f :

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

ou la str.formatfonction commençant par 2.7:

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

ou l' opérateur de mise en forme de chaîne% pour les versions encore plus anciennes de Python, mais consultez la note dans la documentation:

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

Et pour votre cas spécifique de temps de formatage, il y a time.strftime:

import time

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

96

À partir de Python 2.6, il existe une alternative: la str.format()méthode. Voici quelques exemples utilisant l'opérateur de format de chaîne existant ( %):

>>> "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' 

Voici les extraits équivalents mais en utilisant 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'

Comme Python 2.6+, toutes les versions de Python 3 (jusqu'à présent) comprennent comment faire les deux. J'ai arraché sans vergogne ce truc directement de mon livre d'intro hardcore Python et des diapositives pour les cours Intro + Intermediate Python que je propose de temps en temps.:-)

Août 2018 Mise à jour : Bien sûr, maintenant que nous avons la fonction f-chaîne en 3.6 , nous avons besoin des exemples équivalents que , oui une autre 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'

8

Python 2.6+

Il est possible d'utiliser la format()fonction, donc dans votre cas, vous pouvez utiliser:

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

Il existe plusieurs façons d'utiliser cette fonction, donc pour plus d'informations, vous pouvez consulter la documentation .

Python 3.6+

f-strings est une nouvelle fonctionnalité qui a été ajoutée au langage dans Python 3.6. Cela facilite notoirement le formatage des chaînes:

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


1

Vous pouvez utiliser les éléments suivants pour obtenir la fonctionnalité souhaitée

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

1

Vous pouvez utiliser str.format () pour que Python reconnaisse tous les objets en chaînes.


0

str () en python sur un entier va pas imprimer les décimales.

Si vous avez un flottant dont vous souhaitez ignorer la partie décimale, vous pouvez utiliser str (int (floatValue)).

Peut-être que le code suivant démontrera:

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

0

Si vous avez une valeur qui inclut une décimale, mais que la valeur décimale est négligeable (c'est-à-dire: 100,0) et essayez de l'intégrer, vous obtiendrez une erreur. Cela semble idiot, mais appeler float corrige d'abord ce problème.

str (int (float ([variable])))

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.