Mundo em Python

Conversor de Números Ordinais

from tkinter import *

def ordinal_numero(n):
if 10 <= n % 100 <= 20:
sufixo = "º"
else:
sufixo = {1: "º", 2: "º", 3: "º"}.get(n % 10, "º")
return f"{n}{sufixo}"

def ordinal_extenso_grande(n):
if n == 0:
return "zero"

unidades = ["", "primeiro", "segundo", "terceiro", "quarto", "quinto",
"sexto", "sétimo", "oitavo", "nono"]
dezenas = ["", "décimo", "vigésimo", "trigésimo", "quadragésimo", "quinquagésimo",
"sexagésimo", "septuagésimo", "octogésimo", "nonagésimo"]
centenas = ["", "centésimo", "ducentésimo", "tricentésimo", "quadringentésimo",
"quingentésimo", "sexcentésimo", "septingentésimo", "octingentésimo",
"noningentésimo"]
especiais = ["décimo", "décimo primeiro", "décimo segundo", "décimo terceiro",
"décimo quarto", "décimo quinto", "décimo sexto", "décimo sétimo",
"décimo oitavo", "décimo nono"] partes = [] if n >= 1_000_000:
milhoes = n // 1_000_000
partes.append(f"{ordinal_extenso_grande(milhoes)} milionésimo")
n %= 1_000_000

if n >= 1_000:
milhares = n // 1_000
if milhares > 1:
partes.append(f"{ordinal_extenso_grande(milhares)} milésimo")
else:
partes.append("milésimo")
n %= 1_000

if n >= 100:
c = n // 100
partes.append(centenas[c])
n %= 100

if n >= 20:
d = n // 10
partes.append(dezenas[d])
n %= 10
if 10 <= n <= 19:
partes.append(especiais[n-10])
n = 0
if 1 <= n <= 9:
partes.append(unidades[n]) return " ".join(partes)
root = Tk()
root.geometry("700x450")
root.resizable(0, 0)
root.config(bg="#103030")
root.title("Conversor de Números Ordinais") titulo = Label(text="Conversor de Números Ordinais",
font=("Arial", 28, "bold"), bg="#103030", fg="#49e3e3")
titulo.place(relx=0.10, rely=0.05) texto_sub1 = Label(text="Número:",
font=("Arial", 18, "bold"), bg="#103030", fg="#49e3e3")
texto_sub1.place(relx=0.2, rely=0.32) numero = StringVar()
numero_entrada = Entry(textvariable=numero,
font=("Arial", 12, "bold"),
bg="white", fg="blue", justify='center')
numero_entrada.place(relx=0.55, rely=0.33, relwidth=0.35)
numero_entrada.focus() def limpar():
resultado_texto.config(text="") def app():
try:
n = int(numero.get())
if n < 1 or n > 100_000_000:
resultado_texto.config(text="Digite um número entre 1 e 100.000.000!")
return
a = ordinal_numero(n)
b = ordinal_extenso_grande(n)
resultado_texto.config(text=f"Ordinal numérico: {a}\nOrdinal por extenso: {b}")
except ValueError:
resultado_texto.config(text="Valor digitado inválido.") but1 = Button(text="Mostrar", bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'), command=app)
but1.place(relx=0.1, rely=0.55, 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.55, 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.55, relwidth=0.25, relheight=0.1) resultado_texto = Label(text="", font=("Arial", 12, "bold"), bg="#cfe2f3", justify="left")
resultado_texto.place(relx=0.05, rely=0.75, relwidth=0.9, relheight=0.2) root.mainloop()
0