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

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 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 zfill. 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.zfill(3)
  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.zfill(9)+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