cngsm commited on
Commit
ae8fad4
·
verified ·
1 Parent(s): d1e4517

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +114 -114
app.py CHANGED
@@ -1,114 +1,114 @@
1
- import random
2
- import gradio as gr
3
-
4
- # Base de dados inicial com os últimos 15 sorteios
5
- def obter_resultados():
6
- """
7
- Retorna os números dos últimos 15 concursos armazenados.
8
- """
9
- return [
10
- [10, 24, 33, 35, 41, 46], # Concurso 2808
11
- [8, 25, 49, 52, 55, 56], # Concurso 2807
12
- [5, 11, 13, 33, 45, 46], # Concurso 2806
13
- [1, 6, 24, 47, 55, 58], # Concurso 2805
14
- [14, 24, 25, 31, 33, 60], # Concurso 2804
15
- [1, 20, 32, 43, 57, 59], # Concurso 2803
16
- [17, 21, 26, 28, 32, 60], # Concurso 2802
17
- [25, 27, 33, 46, 48, 56], # Concurso 2801
18
- [1, 13, 19, 46, 50, 57], # Concurso 2800
19
- [1, 31, 38, 40, 45, 60], # Concurso 2799
20
- [3, 9, 18, 54, 59, 60], # Concurso 2798
21
- [1, 3, 15, 25, 45, 52], # Concurso 2797
22
- ]
23
-
24
- def atualizar_resultados(novos_numeros, resultados):
25
- """
26
- Atualiza a base de dados com os novos números do sorteio,
27
- mantendo sempre os últimos 15 concursos.
28
-
29
- Args:
30
- novos_numeros (list): Números do novo sorteio.
31
- resultados (list): Lista atual dos resultados armazenados.
32
-
33
- Returns:
34
- list: Base de dados atualizada.
35
- """
36
- if len(novos_numeros) != 6 or any(n < 1 or n > 60 for n in novos_numeros):
37
- raise ValueError("Os números do sorteio devem ser uma lista de 6 números entre 1 e 60.")
38
- resultados.insert(0, novos_numeros) # Adiciona o novo sorteio no início da lista
39
- return resultados[:15] # Mantém apenas os últimos 15 concursos
40
-
41
- def gerar_palpites(resultados, quantidade_numeros, quantidade_palpites, logica):
42
- """
43
- Gera palpites para a Mega-Sena com base na lógica escolhida.
44
-
45
- Args:
46
- resultados (list): Lista de resultados dos últimos 15 concursos.
47
- quantidade_numeros (int): Quantidade de números por palpite (6, 7, 8 ou 9).
48
- quantidade_palpites (int): Quantidade de palpites a serem gerados.
49
- logica (int): Lógica a ser usada (3 ou 4).
50
-
51
- Returns:
52
- list: Lista de palpites gerados.
53
- """
54
- palpites = []
55
- todos_os_numeros = list(range(1, 61))
56
-
57
- # Contagem de frequências
58
- frequencias = {n: 0 for n in todos_os_numeros}
59
- for resultado in resultados:
60
- for numero in resultado:
61
- frequencias[numero] += 1
62
-
63
- # Números frequentes e atrasados
64
- mais_frequentes = sorted(frequencias, key=frequencias.get, reverse=True)[:10]
65
- atrasados = [n for n in todos_os_numeros if frequencias[n] == 0]
66
-
67
- for _ in range(quantidade_palpites):
68
- if logica == 3: # Lógica Frequentes + Atrasados
69
- frequentes_escolhidos = random.sample(mais_frequentes, min(3, quantidade_numeros))
70
- restantes = random.sample(atrasados, quantidade_numeros - len(frequentes_escolhidos))
71
- palpite = frequentes_escolhidos + restantes
72
-
73
- elif logica == 4: # Lógica Alternância Estratégica
74
- faixas = [(1, 10), (11, 20), (21, 30), (31, 40), (41, 50), (51, 60)]
75
- palpite = [random.randint(*faixa) for faixa in faixas]
76
- random.shuffle(palpite)
77
- palpite = palpite[:quantidade_numeros]
78
-
79
- else:
80
- raise ValueError("Lógica inválida. Escolha entre 3 (Frequentes + Atrasados) ou 4 (Alternância Estratégica).")
81
-
82
- palpites.append(sorted(palpite))
83
-
84
- return palpites
85
-
86
- def interface(novos_numeros, quantidade_numeros, quantidade_palpites, logica):
87
- try:
88
- resultados = obter_resultados()
89
-
90
- # Atualiza os resultados se novos números forem fornecidos
91
- if novos_numeros:
92
- numeros = list(map(int, novos_numeros.split(",")))
93
- resultados = atualizar_resultados(numeros, resultados)
94
-
95
- # Gera os palpites
96
- palpites = gerar_palpites(resultados, quantidade_numeros, quantidade_palpites, logica)
97
- return "\n".join([f"Palpite {i+1}: {p}" for i, p in enumerate(palpites)])
98
- except Exception as e:
99
- return str(e)
100
-
101
- # Configuração da interface Gradio
102
- demo = gr.Interface(
103
- fn=interface,
104
- inputs=[
105
- gr.Textbox(label="Novos números do sorteio (separados por vírgula, opcional):"),
106
- gr.Slider(6, 9, step=1, label="Quantos números por palpite?"),
107
- gr.Slider(1, 10, step=1, label="Quantos palpites deseja gerar?"),
108
- gr.Radio([3, 4], label="Escolha a lógica (3 - Frequentes + Atrasados, 4 - Alternância Estratégica):")
109
- ],
110
- outputs=gr.Textbox(label="Palpites Gerados")
111
- )
112
-
113
- if __name__ == "__main__":
114
- demo.launch()
 
1
+ import random
2
+ import gradio as gr
3
+
4
+ # Base de dados inicial com os últimos 15 sorteios
5
+ def obter_resultados():
6
+ """
7
+ Retorna os números dos últimos 15 concursos armazenados.
8
+ """
9
+ return [
10
+ [10, 24, 33, 35, 41, 46], # Concurso 2808
11
+ [8, 25, 49, 52, 55, 56], # Concurso 2807
12
+ [5, 11, 13, 33, 45, 46], # Concurso 2806
13
+ [1, 6, 24, 47, 55, 58], # Concurso 2805
14
+ [14, 24, 25, 31, 33, 60], # Concurso 2804
15
+ [1, 20, 32, 43, 57, 59], # Concurso 2803
16
+ [17, 21, 26, 28, 32, 60], # Concurso 2802
17
+ [25, 27, 33, 46, 48, 56], # Concurso 2801
18
+ [1, 13, 19, 46, 50, 57], # Concurso 2800
19
+ [1, 31, 38, 40, 45, 60], # Concurso 2799
20
+ [3, 9, 18, 54, 59, 60], # Concurso 2798
21
+ [1, 3, 15, 25, 45, 52], # Concurso 2797
22
+ ]
23
+
24
+ def atualizar_resultados(novos_numeros, resultados):
25
+ """
26
+ Atualiza a base de dados com os novos números do sorteio,
27
+ mantendo sempre os últimos 15 concursos.
28
+
29
+ Args:
30
+ novos_numeros (list): Números do novo sorteio.
31
+ resultados (list): Lista atual dos resultados armazenados.
32
+
33
+ Returns:
34
+ list: Base de dados atualizada.
35
+ """
36
+ if len(novos_numeros) != 6 or any(n < 1 or n > 60 for n in novos_numeros):
37
+ raise ValueError("Os números do sorteio devem ser uma lista de 6 números entre 1 e 60.")
38
+ resultados.insert(0, novos_numeros) # Adiciona o novo sorteio no início da lista
39
+ return resultados[:15] # Mantém apenas os últimos 15 concursos
40
+
41
+ def gerar_palpites(resultados, quantidade_numeros, quantidade_palpites, logica):
42
+ """
43
+ Gera palpites para a Mega-Sena com base na lógica escolhida.
44
+
45
+ Args:
46
+ resultados (list): Lista de resultados dos últimos 15 concursos.
47
+ quantidade_numeros (int): Quantidade de números por palpite (6, 7, 8 ou 9).
48
+ quantidade_palpites (int): Quantidade de palpites a serem gerados.
49
+ logica (int): Lógica a ser usada (3 ou 4).
50
+
51
+ Returns:
52
+ list: Lista de palpites gerados.
53
+ """
54
+ palpites = []
55
+ todos_os_numeros = list(range(1, 61))
56
+
57
+ # Contagem de frequências
58
+ frequencias = {n: 0 for n in todos_os_numeros}
59
+ for resultado in resultados:
60
+ for numero in resultado:
61
+ frequencias[numero] += 1
62
+
63
+ # Números frequentes e atrasados
64
+ mais_frequentes = sorted(frequencias, key=frequencias.get, reverse=True)[:10]
65
+ atrasados = [n for n in todos_os_numeros if frequencias[n] == 0]
66
+
67
+ for _ in range(quantidade_palpites):
68
+ if logica == 3: # Lógica Frequentes + Atrasados
69
+ frequentes_escolhidos = random.sample(mais_frequentes, min(3, quantidade_numeros))
70
+ restantes = random.sample(atrasados, quantidade_numeros - len(frequentes_escolhidos))
71
+ palpite = frequentes_escolhidos + restantes
72
+
73
+ elif logica == 4: # Lógica Alternância Estratégica
74
+ faixas = [(1, 10), (11, 20), (21, 30), (31, 40), (41, 50), (51, 60)]
75
+ palpite = [random.randint(*faixa) for faixa in faixas]
76
+ random.shuffle(palpite)
77
+ palpite = palpite[:quantidade_numeros]
78
+
79
+ else:
80
+ raise ValueError("Lógica inválida. Escolha entre 3 (Frequentes + Atrasados) ou 4 (Alternância Estratégica).")
81
+
82
+ palpites.append(sorted(palpite))
83
+
84
+ return palpites
85
+
86
+ def interface(novos_numeros, quantidade_numeros, quantidade_palpites, logica):
87
+ try:
88
+ resultados = obter_resultados()
89
+
90
+ # Atualiza os resultados se novos números forem fornecidos
91
+ if novos_numeros:
92
+ numeros = list(map(int, novos_numeros.split(",")))
93
+ resultados = atualizar_resultados(numeros, resultados)
94
+
95
+ # Gera os palpites
96
+ palpites = gerar_palpites(resultados, quantidade_numeros, quantidade_palpites, logica)
97
+ return "\n".join([f"Palpite {i+1}: {p}" for i, p in enumerate(palpites)])
98
+ except Exception as e:
99
+ return str(e)
100
+
101
+ # Configuração da interface Gradio
102
+ demo = gr.Interface(
103
+ fn=interface,
104
+ inputs=[
105
+ gr.Textbox(label="Inserir o último resultado da Mega-Sena (separados por vírgula, opcional):"),
106
+ gr.Slider(6, 9, step=1, label="Quantos números por palpite?"),
107
+ gr.Slider(1, 10, step=1, label="Quantos palpites deseja gerar?"),
108
+ gr.Radio([3, 4], label="Escolha a lógica (3 - Frequentes + Atrasados, 4 - Alternância Estratégica):")
109
+ ],
110
+ outputs=gr.Textbox(label="Palpites Gerados")
111
+ )
112
+
113
+ if __name__ == "__main__":
114
+ demo.launch()