1440 votes

Afficher le numéro avec les zéros de tête

Étant donné :

a = 1
b = 10
c = 100

Je veux afficher un zéro de tête pour tous les nombres de moins de 2 chiffres, c'est-à-dire.. :

01
10
100

1928voto

Jack M. Points 8224

Vous êtes ici :

print "%02d" % (1,)

En fait, % est comme printf ou sprintf.

14 votes

Exemple : imprimer "%05d" % result['postalCode'] pour un code postal à 5 chiffres.

6 votes

x = "%02d.txt" % i soulève une TypeError (impossible de concaténer les objets 'str' et 'int'), mais x = "%02d.txt" % (i,) ne le fait pas. Intéressant. Je me demande où cela est documenté

2 votes

@theta En 2.7.6, je n'obtiens pas d'erreur. Peut-être s'agissait-il d'un bogue dans une version spécifique de Python qui a été corrigé depuis ?

1229voto

Datageek Points 2846

Vous pouvez utiliser zfill :

print str(1).zfill(2) 
print str(10).zfill(2) 
print str(100).zfill(2) 

des empreintes :

01
10
100

91 votes

J'aime cette solution, car elle est utile non seulement pour sortir le nombre, mais aussi pour l'affecter à une variable... par exemple, x = str(datetime.date.today().month).zfill(2) renverra x comme '02' pour le mois de février.

6 votes

Ce devrait être la bonne réponse, puisque le "{1:02d}" ne peuvent pas avoir de variables à la place de 2 (comme si vous créez une fonction dynamique).

7 votes

@JoshuaVarghese Il peut avoir des variables : "{0:0{1}}" . Passez le nombre de zéros que vous voulez comme deuxième argument.

386voto

Ber Points 10364

En Python 3, vous utiliseriez la méthode de chaîne format() :

for i in (1, 10, 100):
    print('{num:02d}'.format(num=i))

ou en utilisant l'intégré (pour un seul numéro) :

print(format(i, '02d'))

Voir le PEP-3101 la documentation relative aux nouvelles fonctions de formatage.

30 votes

Fonctionne également dans Python 2.7.5. Vous pouvez également utiliser '{:02d}'.format(1) si vous ne souhaitez pas utiliser d'arguments nommés.

1 votes

Cela fonctionne bien en 2.7.2, avec une virgule flottante "{0:04.0f}".format(1.1) donne 0001 (:04 = au moins 4 caractères, dans ce cas des 0 de tête, .0f = virgule flottante sans décimales). Je suis conscient du formatage en %, mais je voulais modifier une instruction .format existante sans réécrire l'instruction ensemble du site chose. Merci.

93voto

ajd Points 241

Ou ça :

print '{0:02d}'.format(1)

73voto

nosklo Points 75862
x = [1, 10, 100]
for i in x:
    print '%02d' % i

les résultats :

01
10
100

Lire plus d'informations sur le formatage des chaînes de caractères à l'aide de %. dans la documentation.

9 votes

L'exemple de la documentation est nul. Ils jettent le mappage avec l'échantillon de zéro en tête, il est donc difficile de savoir lequel est lequel à moins de savoir comment ça marche. C'est ce qui m'a amené ici, en fait.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X