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 seis mil seis cientos treinta y cinco'
Volta para CookBook.