Dúvida sobre alinhamento do texto

2,389 views
Skip to first unread message

Rafael Pauwels

unread,
Jul 20, 2012, 10:00:19 PM7/20/12
to python...@googlegroups.com
Olá pessoal, sou novo no python e para treinar um pouco comecei a fazer os exercícios dessa página www.python.org.br/wiki/ListaDeExercicios e quando cheguei ao exercício 2-12 foi pedido que o programa imprimisse uma tabela mais ou menos assim:

        Salário Bruto: (5 * 220)        : R$ 1100,00
        (-) IR (5%)                     : R$   55,00  
        (-) INSS ( 10%)                 : R$  110,00
        FGTS (11%)                      : R$  121,00
        Total de descontos              : R$  165,00
        Salário Liquido                 : R$  935,00

Mas não consigo alinhar a parte direita corretamente, aqui esta meu código:

def main():
vh = float(input('Quanto você recebe por hora? '))
ht = float(input('Quantas horas você trabalha por mês? '))

sab = vh*ht

if sab <= 900:
ir = 0
elif sab > 900 and sab <= 1500:
ir = 5/100
elif sab > 1500 and sab <= 2500:
ir = 10/100
elif sab > 2500:
ir = 20/100

print('Salário Bruto: ({0} * {1}){2:>30}{3:.2f}\n(-) IR ({4:.0%}){2:>30}{5:.2f}\n(-) INSS (10%){2:>30}{6:.2f}\nFGTS (11%){2:>30}{7:.2f}\nTotal de descontos{2:>30}{8:.2f}\nSalário Liquido{2:>30}{9:.2f}'.format(vh, ht, ': R$ ', sab, ir, sab*ir, sab*10/100, sab*11/100, sab*ir + sab*10/100, sab - (sab*ir + sab*10/100)))

if __name__ == '__main__':
main()



Fiz algumas pesquisas na internet e encontrei alguns módulos para fazer tabelas mas não consigo encontrar como fazer o que preciso. Alguém pode me ajudar?

Douglas Camata

unread,
Jul 20, 2012, 10:02:17 PM7/20/12
to python...@googlegroups.com
Amigo, use o caracter especial \t, ele é equivalente a um TAB no texto.

[]s

2012/7/20 Rafael Pauwels <rafa.p...@gmail.com>

--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com



--
Douglas Camata
Graduando em Ciência da Computação (UENF)

Skype: douglas_camata
-----------------------------------
Linux User #509211

Rafael Pauwels

unread,
Jul 20, 2012, 10:21:27 PM7/20/12
to python...@googlegroups.com
Nunca pensei que pudesse ser tão fácil >.<
Mas obrigado pela ajuda.

Douglas Camata

unread,
Jul 20, 2012, 10:26:58 PM7/20/12
to python...@googlegroups.com
Só uma dica, você pode preparar sua string em variáveis separadas e depois simplesmente somar elas pra gerar a maior. Vai deixar o código bem mais legível.

[]s

2012/7/20 Rafael Pauwels <rafa.p...@gmail.com>
Nunca pensei que pudesse ser tão fácil >.<
Mas obrigado pela ajuda.

--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com

Eduardo Cereto Carvalho

unread,
Jul 23, 2012, 7:10:28 PM7/23/12
to python...@googlegroups.com
Tenta assim.


'{0:30} : R${1:10}'.format(description, value)

Eduardo Cereto Carvalho



2012/7/20 Douglas Camata <d.ca...@gmail.com>

Johan Dahlin

unread,
Jul 23, 2012, 7:14:54 PM7/23/12
to python...@googlegroups.com
2012/7/23 Eduardo Cereto Carvalho <eduard...@gmail.com>:
> Tenta assim.
>
>
>
> '{0:30} : R${1:10}'.format(description, value)

Na verdade, se for monetario, é melhor fazer assim:

import locale

'{0:30} : {1:10}'.format(description,
locale.currency(value,
symbol=True, grouping=True))

Aí fica certo com separadores, virgulas e R$ automaticamente se seu
sistema operacional suporta.

--
Johan Dahlin

Eduardo Cereto Carvalho

unread,
Jul 23, 2012, 7:42:54 PM7/23/12
to python...@googlegroups.com
O locale realmente é a melhor opção. Pq ele coloca os separadores de milhar/decimal corretos.

Eu acabo usando format direto, Uma versão um pouco melhorada sem usar locale.

>>> '{0:30} : R$ {1:10,.2f}'.format('Eduardo', 123123.55)
'Eduardo                        : R$ 123,123.55'


Ou então se vc não quiser o separador de milhar:

>>> '{0:30} : R$ {1:10.2f}'.format('Eduardo', 123123.55)
'Eduardo                        : R$  123123.55'



Eduardo Cereto Carvalho



Leonardo Santagada

unread,
Jul 24, 2012, 1:03:38 AM7/24/12
to python...@googlegroups.com
o unico problema com o locale é que não dá pra confiar que o usuário
esta com o locale correto, então ou tem que documentar ou trocar o
locale antes de dar um print. Até hoje não sei se tem um jeito melhor
de fazer isso, algo como

currency(value, 'pt_br' ...)
e ele sempre retorna em unicode os dados formatados.
--

Leonardo Santagada
Reply all
Reply to author
Forward
0 new messages