import time def exetenso(num):
dicionario = {
'0 a 9': ['zero', 'um', 'dois', 'três', 'quatro', 'cinco', 'seis', 'sete', 'oito', 'nove'],
'10 a 19': ['dez', 'onze', 'doze', 'treze', 'quatorze', 'quinze', 'dezesseis', 'dezessete', 'dezoito', 'dezenove'],
'20 a 90': ['vinte', 'trinta', 'quarenta', 'cinquenta', 'sessenta', 'setenta', 'oitenta', 'noventa'],
'100 a 900': ['cem', 'cento', 'duzentos', 'trezentos', 'quatrocentos', 'quinhentos', 'seiscentos', 'setecentos', 'oitocentos', 'novecentos'],
'milhares': 'mil',
'milhões': 'milhão',
'bilhões': 'bilhão',
'trilhões': 'trilhão',
'quatrilhões': 'quatrilhão',
} if num == 0:
return dicionario['0 a 9'][0] extenso = ''
# Lidar com quatrilhões
if num >= 10**15:
quatrilhao = num // (10**15)
extenso += exetenso(quatrilhao) + ' ' + dicionario['quatrilhões']
num %= 10**15
if num > 0:
extenso += ' e '
# Lidar com trilhões
if num >= 10**12:
trilhao = num // (10**12)
extenso += exetenso(trilhao) + ' ' + dicionario['trilhões']
num %= 10**12
if num > 0:
extenso += ' e '
# Lidar com bilhões
if num >= 10**9:
bilhao = num // (10**9)
extenso += exetenso(bilhao) + ' ' + dicionario['bilhões']
num %= 10**9
if num > 0:
extenso += ' e '
# Lidar com milhões
if num >= 10**6:
milhao = num // (10**6)
extenso += exetenso(milhao) + ' ' + dicionario['milhões']
num %= 10**6
if num > 0:
extenso += ' e '
# Lidar com milhares
if num >= 1000:
milhares = num // 1000
extenso += exetenso(milhares) + ' ' + dicionario['milhares']
num %= 1000
if num > 0:
extenso += ' e '
# Lidar com centenas
centena = num // 100
dezena = (num % 100) // 10
unidade = num % 10
if centena > 0:
if centena == 1 and num == 100:
extenso += "cem"
else:
extenso += dicionario['100 a 900'][centena - 1]
if dezena > 0 or unidade > 0:
extenso += ' e '
if dezena == 1:
extenso += dicionario['10 a 19'][unidade]
elif dezena > 1:
extenso += dicionario['20 a 90'][dezena - 2]
if unidade > 0:
extenso += ' e '
if unidade > 0 and dezena != 1:
extenso += dicionario['0 a 9'][unidade] return extenso.strip() def contagem_regressiva(n):
while n > 0:
print(exetenso(n)) # Exibe o número por extenso
time.sleep(1) # Pausa por 1 segundo
n -= 1
print("Chegou!") # Iniciar o processo
num = int(input("Digite um número inteiro positivo (até 10 quatrilhões): "))
if 0 <= num <= 10**16: # Aceitar de 0 até 10^16
contagem_regressiva(num)
else:
print("Número fora do intervalo permitido.")
# Versão em Tkinter
from tkinter import * root = Tk()
root.geometry("500x300")
root.resizable(0, 0)
root.config(bg="#103030")
root.title("Contagem decrescente por extenso") # Título
titulo = Label(text="Contagem decrescente por extenso",
font=("Arial", "20", "bold"), bg="#103030", fg="#49e3e3")
titulo.place(relx=0.03, rely=0.05) # Campo de entrada
texto_sub1 = Label(text="Número:",
font=("Arial", "18", "bold"), bg="#103030", fg="#49e3e3")
texto_sub1.place(relx=0.2, rely=0.32) Número = StringVar()
Número_entrada = Entry(textvariable=Número,
font=("Arial", "12", "bold"),
bg="white", fg="blue", justify='center')
Número_entrada.place(relx=0.45, rely=0.33, relwidth=0.45) # Função para limpar o campo de entrada
def limpar():
Número_entrada.delete(0, END)
resultado_texto.config(text="") # Função para converter número em texto
def extenso(num):
dicionario = {
'0 a 9': ['zero', 'um', 'dois', 'três', 'quatro', 'cinco', 'seis', 'sete', 'oito', 'nove'],
'10 a 19': ['dez', 'onze', 'doze', 'treze', 'quatorze', 'quinze', 'dezesseis', 'dezessete', 'dezoito', 'dezenove'],
'20 a 90': ['vinte', 'trinta', 'quarenta', 'cinquenta', 'sessenta', 'setenta', 'oitenta', 'noventa'],
'100 a 900': ['cem', 'cento', 'duzentos', 'trezentos', 'quatrocentos', 'quinhentos', 'seiscentos', 'setecentos', 'oitocentos', 'novecentos'],
'milhares': 'mil',
'milhões': 'milhão',
'bilhões': 'bilhão',
'trilhões': 'trilhão',
'quatrilhões': 'quatrilhão',
} if num == 0:
return dicionario['0 a 9'][0] extenso = ''
if num >= 10**15:
quatrilhao = num // (10**15)
extenso += extenso(quatrilhao) + ' ' + dicionario['quatrilhões']
num %= 10**15
if num > 0:
extenso += ' e '
if num >= 10**12:
trilhao = num // (10**12)
extenso += extenso(trilhao) + ' ' + dicionario['trilhões']
num %= 10**12
if num > 0:
extenso += ' e '
if num >= 10**9:
bilhao = num // (10**9)
extenso += extenso(bilhao) + ' ' + dicionario['bilhões']
num %= 10**9
if num > 0:
extenso += ' e '
if num >= 10**6:
milhao = num // (10**6)
extenso += extenso(milhao) + ' ' + dicionario['milhões']
num %= 10**6
if num > 0:
extenso += ' e '
if num >= 1000:
milhares = num // 1000
extenso += extenso(milhares) + ' ' + dicionario['milhares']
num %= 1000
if num > 0:
extenso += ' e '
centena = num // 100
dezena = (num % 100) // 10
unidade = num % 10
if centena > 0:
if centena == 1 and num == 100:
extenso += "cem"
else:
extenso += dicionario['100 a 900'][centena - 1]
if dezena > 0 or unidade > 0:
extenso += ' e '
if dezena == 1:
extenso += dicionario['10 a 19'][unidade]
elif dezena > 1:
extenso += dicionario['20 a 90'][dezena - 2]
if unidade > 0:
extenso += ' e '
if unidade > 0 and dezena != 1:
extenso += dicionario['0 a 9'][unidade] return extenso.strip() def contagem_regressiva(n):
if n < 0:
resultado_texto.config(text="Chegou!")
return
resultado_texto.config(text=extenso(n)) # Exibe o número por extenso
root.after(1000, contagem_regressiva, n - 1) # Chama a função novamente após 1 segundo
# Função para calcular o extenso do número digitado
def app():
try:
num = int(Número.get())
contagem_regressiva(num)
except ValueError:
resultado_texto.config(text="Valor digitado inválido") # Botões
but1 = Button(text="Calcular", bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'), command=app)
but1.place(relx=0.1, rely=0.45, relwidth=0.25, relheight=0.1) but_limpar = Button(text="Limpar", bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'), command=limpar)
but_limpar.place(relx=0.4, rely=0.45, relwidth=0.25, relheight=0.1) but_sair = Button(text="Sair", bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'), command=root.destroy)
but_sair.place(relx=0.7, rely=0.45, relwidth=0.25, relheight=0.1) resultado_texto = Label(text="",
font=("Arial", 12, "bold"), bg="#cfe2f3")
resultado_texto.place(relx=0.05, rely=0.64, relwidth=0.9, relheight=0.25) root.mainloop()