1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Python NumerosParaPalavras

Discussão em 'Programação' iniciada por s33k_, 7 de Janeiro de 2009. (Respostas: 8; Visualizações: 1906)

  1. s33k_

    s33k_ Power Member

    Alguem tem código de um programa em python que passe os números para palavras, ou seja, escreva por extenso os números? até 999.999.999,99
    Por exemplo...
    100 = cem
    200 = duzentos
    202 = duzentos e um

    tks..
     
  2. Ronnie_03

    Ronnie_03 Power Member

    Eu não percebo de python, mas já fiz um exercicio parecido com esse em scheme (só que era até 999.999) e posso dar-te uma ajuda para estruturares o programa.

    Tens de ter escrito por extenso os numeros de 0 a 9, para as unidades, tens de ter também os numeros 10 (11, 12,...(estes são casos especiais), 19), 20 30, 40,..90 e ainda 100 (cem e cento, porque dizes cem quando é 100 e cento quando é outra coisa), 200, 300,...900. Com estes numeros já podes escrever todos os numeros de 3 algarismos.

    Basicamente tens uma função que escreva a parte das centenas, outra para as dezenas e outra para as unidades.

    Depois precisas ainda do numero 1000 e 1000.000.
    Depois para a parte decimal é um pouco mais dificil, se calhar o melhor é separares logo o numero á partida em parte inteira e parte decimal. Na parte decimal só tens de a ler como inteira e colocar no fim a palavra centesimas (ou decimas se for 0.1, 0.2, ... 0.9).



    Não sei se dei grande ajuda, mas se tiver confuso (que deve estar :D ) diz que eu tento explicar de outra maneira. Já agora se perceberes de scheme arrajo-te o código do meu programa.


    Cumps
     
  3. napalm

    napalm Power Member

    Se tens dúvidas do teu trab de faculdade, expõe-as. Cc, rentacoder.com
     
  4. s33k_

    s33k_ Power Member

    Código:
    import sys
    
    ext = [{1:"um", 2:"dois", 3:"tres", 4:"quatro", 5:"cinco", 6:"seis",
    7:"sete", 8:"oito", 9:"nove", 10:"dez", 11:"onze", 12:"doze",
    13:"treze", 14:"quatorze", 15:"quinze", 16:"dezesseis", 
    17:"dezessete", 18:"dezoito", 19:"dezenove"}, {2:"vinte", 3:"trinta",
    4:"quarenta", 5:"cinquenta", 6:"sessenta", 7:"setenta", 8:"oitenta",
    9:"noventa"}, {1:"cento", 2:"duzentos", 3:"trezentos",
    4:"quatrocentos", 5:"quinhentos", 6:"seissentos", 7:"setessentos",
    8:"oitocentos", 9:"novecentos"}]
    
    und = ['', ' mil', (' milhao', ' milhoes'), (' biliao', ' bilioes'),
    (' trilhiao', ' trilhioes')]
    
    def cent(s, grand):
        s = '0' * (3 - len(s)) + s
        if s == '000':
            return ''
        if s == '100': 
            return 'cem'
        ret = ''
        dez = s[1] + s[2]
        if s[0] != '0':
            ret += ext[2][int(s[0])]
            if dez != '00':
              ret += ' e '
        if int(dez) < 20:
            ret += ext[0][int(dez)]
        else:
            if s[1] != '0':
                ret += ext[1][int(s[1])]
                if s[2] != '0':
                    ret += ' e ' + ext[0][int(s[2])]
        
        return ret + (type(und[grand]) == type(()) and (int(s) > 1 and und[grand][1] or und[grand][0]) or und[grand])
    
    def extenso(n):
        sn = str(int(n))
        ret = []
        grand = 0
        while sn:
            s = sn[-3:]
            sn = sn[:-3]
            ret.append(cent(s, grand))
            grand += 1
        ret.reverse()
        return ' e '.join([r for r in ret if r])
    
    if __name__ == '__main__':
        n = sys.argv[1]
        print n
        print extenso(n)
      
    /usr/bin/python -u "/media/S33K PEN/Numerosextenso.py"
    Traceback (most recent call last):
    File "/media/S33K PEN/Numerosextenso.py", line 55, in <module>
    n = sys.argv[1]
    IndexError: list index out of range


    Alguém me pode dizer que erro tenho no código?

    cumpz
     
    Última edição pelo moderador: 12 de Janeiro de 2009
  5. Ragnarok

    Ragnarok Folding Member

    Estás a passar o número que queres converter nos argumentos do script? Aparentemente não.
     
  6. napalm

    napalm Power Member

    Algo estranho fazer aquele código todo e esquecer-se de passar o argumento :rolleyes:
     
  7. Ragnarok

    Ragnarok Folding Member

    De facto é mas repara na mensagem de erro:

    Código:
    n = sys.argv[1]
    IndexError: list index out of range
    Aquela posição do argv deveria ter o primeiro argumento da execução do script.
     
  8. napalm

    napalm Power Member

    Eu percebi, estava era a insinuar que o código não era dele.
    Ou posso estar enganado e então resolveu fazer o programa todo para só no fim testar... o que infelizmente já vi acontecer.
     
  9. Ragnarok

    Ragnarok Folding Member

    Pois, depois de postar apercebi-me que poderias estar a querer dizer isso. :redface:
     

Partilhar esta Página