fork download
  1. def singular_plural(valor):
  2. if valor == 1:
  3. return ''
  4. return 's'
  5.  
  6. def juntar(textos):
  7. if len(textos) == 1:
  8. return textos[0]
  9. return ', '.join(textos[:-1]) + ' e ' + textos[-1]
  10.  
  11. while True:
  12. try:
  13. n = int(input('Digite um número menor que 1000 (ou zero para encerrar): '))
  14. if n == 0: # incluí essa condição para encerrar o programa
  15. break # sai do while
  16. if 0 < n < 1000: # deveria aceitar números negativos? Estou assumindo que não
  17. # não precisa transformar em string, é uma volta desnecessária
  18. # use apenas matemática
  19. unidade = n % 10
  20. dezena = (n // 10) % 10
  21. centena = n // 100
  22. # textos para centena, dezena e unidade
  23. textos = []
  24. if centena != 0:
  25. textos.append(f'{centena} centena{singular_plural(centena)}')
  26. if dezena != 0:
  27. textos.append(f'{dezena} dezena{singular_plural(dezena)}')
  28. if unidade != 0:
  29. textos.append(f'{unidade} unidade{singular_plural(unidade)}')
  30.  
  31. print(f'O número {n} tem {juntar(textos)}')
  32. else:
  33. print('O número deve ser menor que 1000 e não pode ser negativo, tente novamente')
  34. except: # se não digitar número, cai aqui no except
  35. print('Vc não digitou um número, tente novamente')
  36.  
  37. print('fim')
Success #stdin #stdout 0.02s 9016KB
stdin
1
5
10
20
42
100
102
120
316
495
10212
0
stdout
Digite um número menor que 1000 (ou zero para encerrar): O número 1 tem 1 unidade
Digite um número menor que 1000 (ou zero para encerrar): O número 5 tem 5 unidades
Digite um número menor que 1000 (ou zero para encerrar): O número 10 tem 1 dezena
Digite um número menor que 1000 (ou zero para encerrar): O número 20 tem 2 dezenas
Digite um número menor que 1000 (ou zero para encerrar): O número 42 tem 4 dezenas e 2 unidades
Digite um número menor que 1000 (ou zero para encerrar): O número 100 tem 1 centena
Digite um número menor que 1000 (ou zero para encerrar): O número 102 tem 1 centena e 2 unidades
Digite um número menor que 1000 (ou zero para encerrar): O número 120 tem 1 centena e 2 dezenas
Digite um número menor que 1000 (ou zero para encerrar): O número 316 tem 3 centenas, 1 dezena e 6 unidades
Digite um número menor que 1000 (ou zero para encerrar): O número 495 tem 4 centenas, 9 dezenas e 5 unidades
Digite um número menor que 1000 (ou zero para encerrar): O número deve ser menor que 1000 e não pode ser negativo, tente novamente
Digite um número menor que 1000 (ou zero para encerrar): fim