|
import random |
|
import gradio as gr |
|
|
|
|
|
def obter_resultados(): |
|
""" |
|
Retorna os números dos últimos 15 concursos armazenados. |
|
""" |
|
return [ |
|
[10, 24, 33, 35, 41, 46], |
|
[8, 25, 49, 52, 55, 56], |
|
[5, 11, 13, 33, 45, 46], |
|
[1, 6, 24, 47, 55, 58], |
|
[14, 24, 25, 31, 33, 60], |
|
[1, 20, 32, 43, 57, 59], |
|
[17, 21, 26, 28, 32, 60], |
|
[25, 27, 33, 46, 48, 56], |
|
[1, 13, 19, 46, 50, 57], |
|
[1, 31, 38, 40, 45, 60], |
|
[3, 9, 18, 54, 59, 60], |
|
[1, 3, 15, 25, 45, 52], |
|
] |
|
|
|
def atualizar_resultados(novos_numeros, resultados): |
|
""" |
|
Atualiza a base de dados com os novos números do sorteio, |
|
mantendo sempre os últimos 15 concursos. |
|
|
|
Args: |
|
novos_numeros (list): Números do novo sorteio. |
|
resultados (list): Lista atual dos resultados armazenados. |
|
|
|
Returns: |
|
list: Base de dados atualizada. |
|
""" |
|
if len(novos_numeros) != 6 or any(n < 1 or n > 60 for n in novos_numeros): |
|
raise ValueError("Os números do sorteio devem ser uma lista de 6 números entre 1 e 60.") |
|
resultados.insert(0, novos_numeros) |
|
return resultados[:15] |
|
|
|
def gerar_palpites(resultados, quantidade_numeros, quantidade_palpites, logica): |
|
""" |
|
Gera palpites para a Mega-Sena com base na lógica escolhida. |
|
|
|
Args: |
|
resultados (list): Lista de resultados dos últimos 15 concursos. |
|
quantidade_numeros (int): Quantidade de números por palpite (6, 7, 8 ou 9). |
|
quantidade_palpites (int): Quantidade de palpites a serem gerados. |
|
logica (int): Lógica a ser usada (3 ou 4). |
|
|
|
Returns: |
|
list: Lista de palpites gerados. |
|
""" |
|
palpites = [] |
|
todos_os_numeros = list(range(1, 61)) |
|
|
|
|
|
frequencias = {n: 0 for n in todos_os_numeros} |
|
for resultado in resultados: |
|
for numero in resultado: |
|
frequencias[numero] += 1 |
|
|
|
|
|
mais_frequentes = sorted(frequencias, key=frequencias.get, reverse=True)[:10] |
|
atrasados = [n for n in todos_os_numeros if frequencias[n] == 0] |
|
|
|
for _ in range(quantidade_palpites): |
|
if logica == 3: |
|
frequentes_escolhidos = random.sample(mais_frequentes, min(3, quantidade_numeros)) |
|
restantes = random.sample(atrasados, quantidade_numeros - len(frequentes_escolhidos)) |
|
palpite = frequentes_escolhidos + restantes |
|
|
|
elif logica == 4: |
|
faixas = [(1, 10), (11, 20), (21, 30), (31, 40), (41, 50), (51, 60)] |
|
palpite = [random.randint(*faixa) for faixa in faixas] |
|
random.shuffle(palpite) |
|
palpite = palpite[:quantidade_numeros] |
|
|
|
else: |
|
raise ValueError("Lógica inválida. Escolha entre 3 (Frequentes + Atrasados) ou 4 (Alternância Estratégica).") |
|
|
|
palpites.append(sorted(palpite)) |
|
|
|
return palpites |
|
|
|
def interface(novos_numeros, quantidade_numeros, quantidade_palpites, logica): |
|
try: |
|
resultados = obter_resultados() |
|
|
|
|
|
if novos_numeros: |
|
numeros = list(map(int, novos_numeros.split(","))) |
|
resultados = atualizar_resultados(numeros, resultados) |
|
|
|
|
|
palpites = gerar_palpites(resultados, quantidade_numeros, quantidade_palpites, logica) |
|
return "\n".join([f"Palpite {i+1}: {p}" for i, p in enumerate(palpites)]) |
|
except Exception as e: |
|
return str(e) |
|
|
|
|
|
demo = gr.Interface( |
|
fn=interface, |
|
inputs=[ |
|
gr.Textbox(label="Inserir o último resultado da Mega-Sena (separados por vírgula, opcional):"), |
|
gr.Slider(6, 9, step=1, label="Quantos números por palpite?"), |
|
gr.Slider(1, 10, step=1, label="Quantos palpites deseja gerar?"), |
|
gr.Radio([3, 4], label="Escolha a lógica (3 - Frequentes + Atrasados, 4 - Alternância Estratégica):") |
|
], |
|
outputs=gr.Textbox(label="Palpites Gerados") |
|
) |
|
|
|
if __name__ == "__main__": |
|
demo.launch() |
|
|