Comment faire pour aligner le texte de sortie en python?
Donc j'ai une fonction qui crée une petite star de la table en se basant sur des données recueillies ailleurs dans le programme. Alors que le tableau produit de bons résultats, puisque le nombre de caractères dans chaque numéro des modifications, de l'onu-aligne la table. Par exemple,
70-78: *****
79-87: ***
88-96: ****
97-105: **
106-114: ******
115-123: ****
Est-il possible de faire les étoiles s'alignent (hehe), de sorte que la sortie est à quelque chose comme ceci:
70-78: *****
79-87: ***
88-96: ****
97-105: **
106-114: ******
115-123: ****
Voici comment j'ai actuellement l'impression de la table.
for x in range(numClasses):
print('{0}-{1}: {2}'.format(lower[x],upper[x],"*"*num[x]))
Vous devez vous connecter pour publier un commentaire.
str.format
a déjà la possibilité de spécifier l'alignement. Vous pouvez le faire en utilisant{0:>5}
; ce qui permettrait d'aligner le paramètre0
à droite pour 5 caractères. On peut alors générer dynamiquement une chaîne de format en utilisant le nombre maximum de chiffres nécessaires pour afficher tous les numéros également:En fait, vous pourriez même utiliser une seule chaîne de format ici avec des champs imbriqués:
.format()
fonction.numLength=digits
la première partie est le nom du paramètre nom; la seconde partie est la valeur pour le paramètre nommé. Doncdigits=digits
définissez le paramètre nommédigits
de la fonction de la valeur de la variabledigits
.Cela devrait faire l'affaire. Je suppose que il y a des manières intelligentes.
Vous pouvez également utiliser
expandtabs()
print('{0}-{1}:\t{2}'.format(lower[x],upper[x],"*"*num[x]).expandtabs(10))
http://docs.python.org/3/library/string.html#format-specification-mini-language
Ok, alors que la solution que j'utilise est certes ad-hoc, il fonctionne, et les échelles de mieux que les réponses jusqu'à présent. En gros, c'est juste la méthode VR17 suggéré, mais avec un peu plus de sorte que la taille de la tabulation des échelles avec l'ensemble de données, et ce n'est pas seulement codées en dur dans.
J'ai d'abord fait une méthode qui retourne le nombre de caractères dans un certain nombre.
Ensuite, j'ai utilisé le
charNum()
fonction sur le dernier point de monlower
etupper
ensembles de données. Seul le dernier point devait être utilisé sur chaque liste, parce que le dernier point est le plus grand nombre. Je compte donc le personnage qui n'étaient pas des nombres(le tiret, le point-virgule et l'espace), et ajusté en conséquence.Donc au final tabLength variable ressemble à ceci:
J'ai ensuite branché le
tabLength
variable dans leexpandTab()
fonction pour obtenir un espacement approprié. Voici un exemple de sortie:Le seul problème que je peux vraiment voir avec cela est que si je voulais étendre cela à une table ou quelque chose les onglets en serait funky. Si je l'ai fait, cependant, je serais probablement regarder dans
ljust
etrjust
dont je ne suis pas du tout familier avec le droit maintenant. Je vais laisser la question ouverte pour un peu de temps dans le cas où quelqu'un arrive avec une meilleure réponse.Façon simple (dans votre cas) serait de mettre un onglet au lieu de l'espace:
Un autre moyen serait d'utiliser
str.ljust
: