pptms / app.py
cngsm's picture
Update app.py
ae8fad4 verified
raw
history blame
4.49 kB
import random
import gradio as gr
# Base de dados inicial com os últimos 15 sorteios
def obter_resultados():
"""
Retorna os números dos últimos 15 concursos armazenados.
"""
return [
[10, 24, 33, 35, 41, 46], # Concurso 2808
[8, 25, 49, 52, 55, 56], # Concurso 2807
[5, 11, 13, 33, 45, 46], # Concurso 2806
[1, 6, 24, 47, 55, 58], # Concurso 2805
[14, 24, 25, 31, 33, 60], # Concurso 2804
[1, 20, 32, 43, 57, 59], # Concurso 2803
[17, 21, 26, 28, 32, 60], # Concurso 2802
[25, 27, 33, 46, 48, 56], # Concurso 2801
[1, 13, 19, 46, 50, 57], # Concurso 2800
[1, 31, 38, 40, 45, 60], # Concurso 2799
[3, 9, 18, 54, 59, 60], # Concurso 2798
[1, 3, 15, 25, 45, 52], # Concurso 2797
]
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) # Adiciona o novo sorteio no início da lista
return resultados[:15] # Mantém apenas os últimos 15 concursos
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))
# Contagem de frequências
frequencias = {n: 0 for n in todos_os_numeros}
for resultado in resultados:
for numero in resultado:
frequencias[numero] += 1
# Números frequentes e atrasados
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: # Lógica Frequentes + Atrasados
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: # Lógica Alternância Estratégica
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()
# Atualiza os resultados se novos números forem fornecidos
if novos_numeros:
numeros = list(map(int, novos_numeros.split(",")))
resultados = atualizar_resultados(numeros, resultados)
# Gera os palpites
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)
# Configuração da interface Gradio
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()