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.