7
votes

Comment boucle de 0000 à 9999 et convertir le nombre en chaîne relatif?

Je veux obtenir une ficelle, aller de 0000 à 9999, je veux imprimer la chaîne suivante: xxx

J'ai essayé d'utiliser imprimer "\ n n "Join ([Str (Num) pour Num in Plage (0, 9999)]) , mais j'ai échoué, je reçois le numéro suivant: xxx

i Voulez-vous que Python ajoutez le préfixe 0 automatiquement, rendant le numéro restez 4 bits chiffres tout le temps. Quelqu'un peut-il me donner une main? toute aide appréciée.


1 commentaires

Vous ne pouvez pas obtenir une séquence se terminant par "9999" avec une plage (0, 9999); Les gammes de python n'incluent pas la limite supérieure. Utilisez la plage (10 ** 4) si vous souhaitez inclure 9999.


8 Réponses :


32
votes

Un moyen d'obtenir ce que vous voulez, c'est utiliser la formatage des chaînes: xxx pré>

pour faire ce que vous voulez, faites ceci: p>

print("\n".join(['{0:04}'.format(num) for num in range(0, 10000)]))


7 commentaires

Non, ce n'est pas une solution parfaite. Défaut majeur là-bas. Si vous allez utiliser de grandes gammes comme 9999, vous devez utiliser xrange pour éviter d'attribuer toute la liste des chiffres. Cela peut ne pas faire une grande différence pour le faire une fois ou deux fois, mais si cette boucle est à l'intérieur d'une autre boucle à l'intérieur des appels de fonction récursive?


Ce que Michael a dit plus Supprimer [] (utilisez Gen EXP au lieu de la liste de liste).


@Michaeldillon, c'est seulement vrai dans Python 2. Dans Python 3, Plage == xRange et xRange est indéfini. L'OP a utilisé plage , alors j'ai supposé qu'il utilise Python 3.


@yak, cela dépend également des circonstances. L'utilisation d'un Genex enregistre la mémoire mais est en fait un peu plus lente dans ce cas. Sur ma machine, de toute façon.


@senderlele: L'instruction imprimé qu'il utilisait et que vous avez copié est un cadeau mort pour Python 2, cependant.


@TIMPIETZCKER, bon point - Je n'ai pas attrapé l'incohérence, sans avoir utilisé beaucoup de python 3 à l'époque.


Beaucoup d'années sur la route, Python 3 est la norme, donc je l'ai modifié à la plage !



5
votes

Essayez ceci xxx


0 commentaires

5
votes

Simplement simplement en utilisant str.rjust :

print "\n".join([str(num).rjust(4, '0') for num in range(0, 1000)])


0 commentaires

6
votes

http://docs.python.org/library/stdtypes.html# str.zfill

Renvoie la chaîne numérique laissée remplie de zéros dans une chaîne de longueur largeur. Un préfixe de signe est traité correctement. La chaîne d'origine est retourné si la largeur est inférieure ou égale à len (s).

E.g.: xxx


0 commentaires

2
votes

str.zfill fonctionne également:

Imprimer ('\ N'.Join ([Str (Num) .Zfill (4) pour Num in Plage (0, 10000)]))


0 commentaires

1
votes

Une autre façon de faire cela: xxx

ou xxx


0 commentaires

0
votes

Cela devrait faire l'astuce de la gauche-remplissage de la chaîne: xxx


0 commentaires

0
votes

Vous pouvez essayer ceci:

for i in range(9999):
    print(str(i).zfill(4)+"\n")


0 commentaires