Informática, perguntado por jesicamacedo002, 9 meses atrás

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

Respondido por GeBEfte
5

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

\Huge{\begin{array}{c}\Delta \tt{\!\!\!\!\!\!\,\,o}\!\!\!\!\!\!\!\!\:\,\perp\end{array}}Qualquer~d\acute{u}vida,~deixe~ um~coment\acute{a}rio

Anexos:

jesicamacedo002: Perfeito! Entendi a explicação. Obrigada!
GeBEfte: Tranquilo :)
Perguntas interessantes