Como faço um programa que leia um número inteiro entre 0 e 999 e escreva o seu valor por extenso? Em python!
Soluções para a tarefa
O programa abaixo não conta com validação de dados e/ou tratamento de exceções, assim deve se ter cuidado ao informar o número para que não esteja além do limite estipulado (999) e, também, para que não seja digitado um dado não inteiro (int).
Leia com atenção o código e os comentários posteriores para compreender a solução proposta aqui, deixando claro que esta não é necessariamente a melhor ou a mais compacta forma de produzir o resultado solicitado.
Obs.: Os pontos que precedem as linhas de programação não fazem parte do programa, foram colocados apenas para garantir a indentação do código aqui no site.
menor_20 = ['', 'um', 'dois', 'três', 'quatro', 'cinco', 'seis', 'sete', 'oito', 'nove', 'dez', 'onze', 'doze', 'treze', 'quatorze', 'quinze', 'dezesseis', 'dezessete', 'dezoito', 'dezenove']
dezenas = ['' , '', 'vinte', 'trinta', 'quarenta', 'cinquenta', 'sessenta', 'setenta', 'oitenta', 'noventa']
centenas = ['', 'cento', 'duzentos', 'trezentos', 'quatrocentos', 'quinhentos', 'seiscentos', 'setecentos', 'oitocentos', 'novecentos']
numero = int(input('Digite o número: '))
print(f'O numero {numero} por extenso fica: ', end='')
if numero==100:
.....print('cem')
elif numero==0:
.....print('zero')
else:
.....if numero > 100:
..........print(centenas[int(str(numero)[0])], end='')
..........numero = numero - int(str(numero)[0])*100
..........if numero !=0:
...............print(' e', end=' ' )
.....if numero < 20:
..........print(menor_20[numero])
..........numero = 0
.....elif numero >= 20:
..........print(dezenas[int(str(numero)[0])], end=' ')
..........numero = numero - int(str(numero)[0])*10
.....if numero != 0:
..........print('e', menor_20[numero])
Comentários:
--> Começamos o código com listas contendo a nomenclatura para os números menores que 20 (menor_20), para as dezenas maiores que 10 (dezenas) e para as centenas.
--> Note que os números 0 (zero), 100 (cem) e os números de 11 a 19 são exceções à forma geral de escrita dos números.
--> Utilizamos estruturas condicionais para montar o número por extenso. Perceba que primeiro verificamos se o número é 100 ou 0.
--> Se o número for maior que 100 (>100), utilizamos funções de casting (str e int) para extrair o primeiro dígito do número (centena) e utiliza-lo como índice na lista "centenas". Depois este dígito é excluído do número, ou seja, retiramos as centenas.
--> O resto do código segue o mesmo princípio, mas talvez fique mais claro no exemplo que mostro logo abaixo.
Exemplo: Numero = 156
--> 256 é maior que 100.
--> Utilizamos o digito 2 como índice em "centenas", que corresponde à string 'duzentos'.
--> Excluímos o digito 2 (numero - 200), ficamos com o número 56.
--> 56 é diferente de 0 (!=0), mostramos na tela a string ' e'
--> 56 é maior que 20.
--> Utilizamos o digito 5 como índice em "dezenas", que corresponde à string 'cinquenta'.
--> Excluímos o digito 5 (numero - 50), ficamos com o número 6.
--> Utilizamos o digito 6 como índice em "menor_20", que corresponde à string 'seis'.
--> Resultado: duzentos e cinquenta e seis