associação pythonbrasil[11] django zope/plone planet Início Logado como (Entrar)

Revisão 6e 2005-03-24 20:08:26

Excluir mensagem

NumeroParaPalavrasEspanhol

Receita: Número para Palavras em Espanhol

Programa que, quando recebe um número (ex: 123), retorna sua forma "por extenso", em espanhol (ex: 'ciento veinti tres') Esse codigo é adaptado de um que eu achei no [http://aspn.activestate.com/ASPN/Python/Cookbook/ Python Cookbook]. Mudei apenas alguns trechos como funções que, dado um numero retornava um nome, trocando por listas, ou outro em que 16 linhas viraram uma com um metodo rjust. O algoritmo que faz a parte 'suja', da conversão em si, eu não mudei nada. Se alguém estiver interessado... Falta também o mais óbvio, traduzir para o português. Acho que assim ele serve pra ensinar a contar em espanhol, pelo menos!

Código

   1 unidades = ["cero", "un", "dos", "tres", "cuatro",
   2             "cinco", "seis", "siete", "ocho", "nueve"]
   3 
   4 teens = ["diez", "once", "doce", "trece", "catorce", "quince"]
   5 
   6 tens = ["diez", "veinte", "treinta", "cuarenta", "cincuenta",
   7         "sesenta", "setenta", "ochenta", "noventa"]
   8 
   9 def tercia(num):
  10     numero=str(num)
  11     numero.rjust(3, '0')
  12     a=int(numero[0])
  13     b=int(numero[1])
  14     c=int(numero[2])
  15     if a == 0:
  16         if b == 0:
  17             resultado=unidades[c]
  18             return resultado
  19         elif b == 1:
  20             if c >= 0 and c <= 5:
  21                 resultado = teens[c]
  22                 return resultado
  23             elif c >= 6 and c <= 9:
  24                 resultado = tens[b-1]+' y '+unidades[c]
  25                 return resultado
  26         elif b == 2:
  27             if c == 0:
  28                 resultado = 'veinte'
  29                 return resultado
  30             elif c > 0 and c <= 9:
  31                 resultado ='veinti '+unidades[c]
  32                 return resultado
  33         elif b >=3 and b <= 9:
  34             if c == 0:
  35                 resultado = tens[b-1]
  36                 return resultado
  37             if c >= 1 and c <= 9:
  38                 resultado = tens[b-1]+' y '+unidades[c]
  39                 return resultado
  40     if a == 1:
  41         if b == 0:
  42             if c == 0:
  43                 resultado = 'cien'
  44                 return resultado
  45             elif c > 0 and c <= 9:
  46                 resultado ='ciento '+unidades[c]
  47                 return resultado
  48         elif  b == 1:
  49             if c >= 0 and c <= 5:
  50                 resultado = 'ciento '+teens[c]
  51                 return resultado
  52             elif c >= 6 and c <= 9:
  53                 resultado = 'ciento '+tens[b-1]+' y '+unidades[c]
  54                 return resultado
  55         elif b == 2:
  56             if c == 0:
  57                 resultado = 'ciento veinte'
  58                 return resultado
  59             elif c > 0 and c <= 9:
  60                 resultado ='ciento veinti '+unidades[c]
  61                 return resultado
  62         elif b >= 3 and b <= 9:
  63             if c == 0:
  64                 resultado = 'ciento '+tens[b-1]
  65                 return resultado
  66             elif c > 0 and c <= 9:
  67                 resultado = 'ciento '+tens[b-1]+ ' y '+unidades[c]
  68                 return resultado
  69 
  70     elif a >= 2 and a <= 9:
  71         if a == 5:
  72             prefix='quinientos '
  73         elif a == 7:
  74             prefix='setecientos '
  75         elif a == 9:
  76             prefix='novecientos '
  77         else:
  78             prefix=unidades[a]+' cientos '
  79         if b == 0:
  80             if c == 0:
  81                 resultado = prefix
  82                 return resultado
  83             elif c > 0 and c <= 9:
  84                 resultado = prefix+unidades[c]
  85                 return resultado
  86         elif b == 1:
  87             if c >= 0 and c <= 5:
  88                 resultado = prefix+teens[c]
  89                 return resultado
  90             elif c >= 6 and c <= 9:
  91                 resultado = prefix+tens[b-1]+' y '+unidades[c]
  92                 return resultado
  93         elif b == 2:
  94             if c == 0:
  95                 resultado = prefix+' veinte'
  96                 return resultado
  97             elif c > 0 and c <= 9:
  98                 resultado = prefix+' veinti '+unidades[c]
  99                 return resultado
 100         elif b >= 3 and b <= 9:
 101             if c == 0:
 102                 resultado = prefix+tens[b-1]
 103                 return resultado
 104             elif c > 0 and c <= 9:
 105                 resultado = prefix+tens[b-1]+' y '+unidades[c]
 106                 return resultado
 107 def main(num):
 108     result=''
 109     numero=str(num)
 110     numero=numero.rjust(9,'0')+numero
 111     posicion=1
 112     for i in [0,3,6]:
 113         var=numero[i]+numero[i+1]+numero[i+2]
 114         if int(var) != 0:
 115             res=tercia(var)
 116             if i == 0:
 117                 result=res+" millones "
 118             elif i == 3:
 119                 result=result+res+" mil "
 120             elif i == 6:
 121                 result=result+res
 122     return result

Exemplo de uso

Dos comentários do programa original:

>>>main('45635')

'Cuarenta y cinco mil seis cientos treinta y cinco'

Volta para CookBook.


EduardoDeOliveiraPadoan