Mundo em Python

Campeões da Serie A Italiana

from tkinter import *
from collections import defaultdict
import re # Dados Serie A com anos variados (simplificados)
serie_a = {
"Genoa": ["1898", "1899", "1900", "1902", "1903", "1904", "1914-15", "1922-23", "1923-24"],
"Milan": ["1901", "1906", "1907", "1950-51", "1954-55", "1956-57", "1958-59", "1961-62", "1967-68", "1978-79", "1987-88", "1991-92", "1992-93", "1993-94", "1995-96", "1998-99", "2003-04", "2010-11", "2021-22"],
"Pro Vercelli": ["1908", "1909", "1910-11", "1911-12", "1912-13", "1920-21", "1921-22 (CCI)"],
"Internazionale": ["1909-10", "1919-20", "1929-30", "1937-38", "1939-40", "1952-53", "1953-54", "1962-63", "1964-65", "1965-66", "1970-71", "1979-80", "1988-89", "2005-06", "2006-07", "2007-08", "2008-09", "2009-10", "2020-21", "2022-23", "2023-24"],
"Novese": ["1921-22 (FICG)"],
"Bologna": ["1924-25", "1928-29", "1935-36", "1936-37", "1938-39", "1940-41"],
"Juventus": ["1905", "1925-26", "1930-31", "1931-32", "1932-33", "1933-34", "1934-35", "1951-52", "1957-58", "1959-60", "1960-61", "1966-67", "1971-72", "1972-73", "1974-75", "1976-77", "1977-78", "1980-81", "1981-82", "1983-84", "1985-86", "1994-95", "1996-97", "1997-98", "2001-02", "2002-03", "2011-12", "2012-13", "2013-14", "2014-15", "2015-16", "2016-17", "2017-18", "2018-19", "2019-20"],
"Torino": ["1927-28", "1942-43", "1945-46", "1946-47", "1947-48", "1948-49", "1975-76"],
"Casale": ["1913-14"],
"Cagliari": ["1969-70"],
"Fiorentina": ["1955-56", "1968-69"],
"Lazio": ["1973-74", "1999-2000"],
"Roma": ["1941-42", "1982-83", "2000-01"],
"Napoli": ["1986-87", "1989-90", "2022-23", "2024-25"],
"Verona": ["1984-85"],
"Sampdoria": ["1990-91"]
} # Função para limpar e extrair o ano inicial de uma temporada
def extrair_ano_inicial(temporada):
# Remove o que estiver entre parênteses
temporada = re.sub(r"\s*\(.*\)", "", temporada)
# Substitui traços e en dashes por hífen simples
temporada = temporada.replace("–", "-")
# Se for só ano (ex: 1905), retorna como inteiro
if "-" not in temporada:
try:
return int(temporada)
except:
return None
# Se for temporada no formato "aaaa-aa" (ex: 1921-22), extrai o primeiro ano completo
else:
partes = temporada.split("-")
try:
ano_inicio = int(partes[0])
# Se a parte depois do traço tiver 2 dígitos, considera década igual à do ano_inicio
if len(partes[1]) == 2:
ano_fim = (ano_inicio // 100) * 100 + int(partes[1])
# Se ano_fim < ano_inicio, provavelmente é década seguinte
if ano_fim < ano_inicio:
ano_fim += 100
else:
ano_fim = int(partes[1])
return ano_inicio
except:
return None

# Detecta sequências consecutivas baseado no ano inicial
def sequencias_consecutivas(anos):
anos_int = sorted(set(filter(None, (extrair_ano_inicial(a) for a in anos))))
sequencias = []
atual = [anos_int[0]] for i in range(1, len(anos_int)):
if anos_int[i] == anos_int[i-1] + 1:
atual.append(anos_int[i])
else:
if len(atual) >= 2:
sequencias.append(atual)
atual = [anos_int[i]] if len(atual) >= 2:
sequencias.append(atual) tipos = defaultdict(list)
for seq in sequencias:
tipos[len(seq)].append(seq) return tipos # Configuração Tkinter
root = Tk()
root.geometry("750x500")
root.resizable(0, 0)
root.config(bg="#103030")
root.title("Campeões da Serie A Italiana") titulo = Label(text="Campeões da Serie A Italiana",
font=("Arial", 22, "bold"), bg="#103030", fg="#49e3e3")
titulo.place(relx=0.2, rely=0.05) var = StringVar()
dropDownList = list(serie_a.keys())
dropdown = OptionMenu(root, var, *dropDownList)
var.set(dropDownList[0])
dropdown.place(relx=0.25, rely=0.2, relwidth=0.5)
dropdown.config(background='#09A3BA', foreground="#FFFFFF", font=("Arial", 15, "bold"))
dropdown["menu"].config(background='#09A3BA', foreground="#FFFFFF", font=("Arial", 12, "bold")) scrollbar = Scrollbar(root)
scrollbar.place(relx=0.95, rely=0.45, relheight=0.5) resultado_texto = Text(root, font=("Arial", 11), bg="#cfe2f3", yscrollcommand=scrollbar.set, wrap=WORD)
resultado_texto.place(relx=0.05, rely=0.45, relwidth=0.9, relheight=0.5)
scrollbar.config(command=resultado_texto.yview) def limpar():
resultado_texto.delete(1.0, END) def app():
equipe = var.get()
anos = serie_a[equipe]
total = len(set(anos)) texto = f"{equipe}:\nTotal de títulos: {total}\n\nAnos campeões:\n"
texto += ", ".join(anos)
texto += "\n\nConquistas consecutivas:\n"

conquistas = sequencias_consecutivas(anos)
nomes = {2: "Bi", 3: "Tri", 4: "Tetra", 5: "Penta", 6: "Hexa", 7: "Hepta", 8: "Octa"}
if conquistas:
for k in sorted(conquistas):
nome = nomes.get(k, f"{k}-campeonatos")
texto += f"\n{nome} ({len(conquistas[k])}):"
for seq in conquistas[k]:
seq_str = ", ".join(str(x) for x in seq)
texto += f"\n - {seq_str}"
else:
texto += "Nenhuma sequência consecutiva."

resultado_texto.delete(1.0, END)
resultado_texto.insert(END, texto) but1 = Button(text="Mostrar", bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'), command=app)
but1.place(relx=0.1, rely=0.33, relwidth=0.25, relheight=0.07) 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.33, relwidth=0.25, relheight=0.07) 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.33, relwidth=0.25, relheight=0.07) root.mainloop()

# Outra versão


from tkinter import *

# Dados Serie A
serie_a = {
"Genoa": ["1898", "1899", "1900", "1902", "1903", "1904", "1914-15", "1922-23", "1923-24"],
"Milan": ["1901", "1906", "1907", "1950-51", "1954-55", "1956-57", "1958-59", "1961-62", "1967-68", "1978-79", "1987-88", "1991-92", "1992-93", "1993-94", "1995-96", "1998-99", "2003-04", "2010-11", "2021-22"],
"Pro Vercelli": ["1908", "1909", "1910-11", "1911-12", "1912-13", "1920-21", "1921-22 (CCI)"],
"Internazionale": ["1909-10", "1919-20", "1929-30", "1937-38", "1939-40", "1952-53", "1953-54", "1962-63", "1964-65", "1965-66", "1970-71", "1979-80", "1988-89", "2005-06", "2006-07", "2007-08", "2008-09", "2009-10", "2020-21", "2022-23", "2023-24"],
"Novese": ["1921-22 (FICG)"],
"Bologna": ["1924-25", "1928-29", "1935-36", "1936-37", "1938-39", "1940-41"],
"Juventus": ["1905", "1925-26", "1930-31", "1931-32", "1932-33", "1933-34", "1934-35", "1951-52", "1957-58", "1959-60", "1960-61", "1966-67", "1971-72", "1972-73", "1974-75", "1976-77", "1977-78", "1980-81", "1981-82", "1983-84", "1985-86", "1994-95", "1996-97", "1997-98", "2001-02", "2002-03", "2011-12", "2012-13", "2013-14", "2014-15", "2015-16", "2016-17", "2017-18", "2018-19", "2019-20"],
"Torino": ["1927-28", "1942-43", "1945-46", "1946-47", "1947-48", "1948-49", "1975-76"],
"Casale": ["1913-14"],
"Cagliari": ["1969-70"],
"Fiorentina": ["1955-56", "1968-69"],
"Lazio": ["1973-74", "1999-2000"],
"Roma": ["1941-42", "1982-83", "2000-01"],
"Napoli": ["1986-87", "1989-90", "2022-23", "2024-25"],
"Verona": ["1984-85"],
"Sampdoria": ["1990-91"]
} # Gerar lista única e ordenada das temporadas
temporadas = set()
for campeoes in serie_a.values():
for epoca in campeoes:
temporadas.add(epoca)
temporadas = sorted(temporadas, key=lambda x: (int(x.split('-')[0]), x)) root = Tk()
root.geometry("700x450")
root.title("Campeões da Serie A - Campeonato Italiano") label = Label(root, text="Selecione a Temporada:", font=("Arial", 16))
label.place(relx=0.2, rely=0.05) var = StringVar()
var.set(temporadas[0])
dropdown = OptionMenu(root, var, *temporadas)
dropdown.config(font=("Arial", 14), width=15)
dropdown.place(relx=0.35, rely=0.12) resultado_texto = Text(root, font=("Arial", 12), height=15, width=70)
resultado_texto.place(relx=0.05, rely=0.25) def mostrar_campeao():
temporada_selecionada = var.get()
campeoes_temporada = []
for time, epocas in serie_a.items():
# Verifica se temporada selecionada está nas temporadas do time
if any(temporada_selecionada == e or temporada_selecionada in e for e in epocas):
campeoes_temporada.append((time, len(epocas), epocas))
texto = f"Temporada: {temporada_selecionada}\nCampeão(ões):\n"
if campeoes_temporada:
for time, titulos, datas in campeoes_temporada:
datas_str = ", ".join(datas)
texto += f"- {time} ({titulos} título{'s' if titulos > 1 else ''}): {datas_str}\n"
else:
texto += "Nenhum campeão registrado para esta temporada."
resultado_texto.delete(1.0, END)
resultado_texto.insert(END, texto) btn_mostrar = Button(root, text="Mostrar", font=("Arial", 14), command=mostrar_campeao)
btn_mostrar.place(relx=0.4, rely=0.85, relwidth=0.2, relheight=0.07) root.mainloop()
0