Hi. I am asking help for something that I have already done. However, I believe there is a much better way to do it. I am pretty novice to python and I don't know (yet xD) all of its capabilities and I am sure some of you will find this my attempt ridiculous.
The goal of this piece of code is simply to display two 'rows' of values aligned to the right.
Here's the code:
# -*- coding: cp1252 -*-
import math
def n_algs(n):
"""
Returns the number of numbers a number has
"""
return int(math.floor(math.log(n, 10)) + 1)
n_matriculas = 500
n_matriculas_com_seguro = 412
n_matriculas_sem_seguro = 8
n_matriculas_invalidas = 7
n_max = max(n_matriculas_com_seguro, n_matriculas_sem_seguro, n_matriculas_invalidas)
n_max_algs = n_algs(n_max)
n_matriculas_com_seguro_pad = str(n_matriculas_com_seguro).rjust(n_max_algs)
n_matriculas_sem_seguro_pad = str(n_matriculas_sem_seguro).rjust(n_max_algs)
n_matriculas_invalidas_pad = str(n_matriculas_invalidas).rjust(n_max_algs)
perc_matriculas_com_seguro = float(n_matriculas_com_seguro)/n_matriculas*100
perc_matriculas_sem_seguro = float(n_matriculas_sem_seguro)/n_matriculas*100
perc_matriculas_invalidas = float(n_matriculas_invalidas)/n_matriculas*100
perc_max = max(perc_matriculas_com_seguro, perc_matriculas_sem_seguro, perc_matriculas_invalidas)
n_max_algs_perc = len(str(perc_max)) + 3 # por causa de '(' '%' ')'
perc_matriculas_com_seguro = "(" + str(perc_matriculas_com_seguro) + "%)"
perc_matriculas_sem_seguro = "(" + str(perc_matriculas_sem_seguro) + "%)"
perc_matriculas_invalidas = "(" + str(perc_matriculas_invalidas) + "%)"
perc_matriculas_com_seguro_pad = perc_matriculas_com_seguro.rjust(n_max_algs_perc)
perc_matriculas_sem_seguro_pad = perc_matriculas_sem_seguro.rjust(n_max_algs_perc)
perc_matriculas_invalidas_pad = perc_matriculas_invalidas.rjust(n_max_algs_perc)
print "numero de matriculas: %d" % n_matriculas
print "- com seguro: %s %s" % (n_matriculas_com_seguro_pad, perc_matriculas_com_seguro_pad)
print "- sem seguro: %s %s" % (n_matriculas_sem_seguro_pad, perc_matriculas_sem_seguro_pad)
print "- invalidas : %s %s" % (n_matriculas_invalidas_pad, perc_matriculas_invalidas_pad)
Lines 11-14 contain example values for values. This values will not be constant. I just did it like so in order to make tests easier.
The variable names are in my own language (portuguese), sorry about that. But that won't be a problem I hope.
I messed around with a lot of possibilities for this, (.format), but never managed to do it like I wanted too. As I said the code does what it is supposed to do, but I am pretty sure there's a much better way to accomplish this.
Thanks. Cheers.