2013-08-23 3 views
0

Je fais juste un petit programme pour afficher les nombres premiers. Le code (ci-dessous) produit la bonne réponse, mais j'ai de la difficulté à obtenir une sortie "agréable".Obtenir les numéros de sortie à aligner dans les colonnes?

import math 
N = int(input('List primes up to: ')) 
maxDigits = math.ceil(math.log10(N)) #equal spacing, even with lesser digit stuff 
for i in range(3,N,2): 
    for d in range(2,int(math.sqrt(i))): 
     if i%d==0: 
      break 
    else : 
     print(str(i),end=' '*(maxDigits-len(str(i)))) 

L'idée était d'avoir autant de colonnes que possible en forme sur l'écran de sortie, en fonction du nombre maximal de chiffres que le premier pourrait avoir. Mais maintenant, quand je lance le programme, il affiche tous les nombres dans une longue ligne, sans aucun saut de ligne. Il en résulte la sortie qui ressemble à ceci:

IT'S SO UGLY! IT BURNS MY EYES! http://img194.imageshack.us/img194/5522/2eyd.png

... Ce qui est pas exactement ce que je visais. Si ce n'était pas le fait que les chiffres recouvraient les lignes, et savait juste aller à la ligne suivante s'il n'y a pas assez d'espace, tout irait bien. Alors, comment puis-je me débarrasser de cet emballage ennuyeux dans mon programme? Le plus élégant (s'il vous plaît ne me dites pas que je dois compter la largeur du terminal et le diviser par maxDigits) le meilleur ...: D

+3

Comptez la largeur du terminal et divisez-la par maxDigits. –

+0

Aussi, ne pas tester cela en utilisant la ligne de commande python. Enregistrez-le dans un fichier et lancez-le avec 'python somefile.py' –

+0

@ IgnacioVazquez-Abrams N'A PAS DIT MOI POUR FAIRE CECI !!! Non, sérieusement, c'est la meilleure façon de faire les choses? Et comment compter la largeur du terminal de manière non-manuelle? –

Répondre

0

Vous pouvez ajouter des sauts de ligne quand vous le souhaitez. Une approche simple consiste simplement à ajouter un caractère '\n' après un certain nombre de chiffres, disons tous les 10. Une approche plus complexe consiste à déterminer la largeur du terminal et à calculer le nombre de numéros que vous pouvez produire par ligne.

Vous pouvez également consulter str.format() qui vous permet de définir la largeur de chaque colonne de votre tableau. Consultez Format String Syntax pour plus de détails sur les options disponibles pour le formatage.

0

Regardez la bibliothèque PrettyPrinter (alias pprint) que vous pouvez configurer indentation et les niveaux de profondeur et il gère tous de façon autonome

Questions connexes