-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpythonLoto.py
More file actions
87 lines (76 loc) · 3.34 KB
/
pythonLoto.py
File metadata and controls
87 lines (76 loc) · 3.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import logging
import csv
import random
from collections import Counter
logging.basicConfig(
filename="Loto_output.log",
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s'
)
CSV_FILE = "data/Apr28-June15_2025.csv"
def main_menu():
logging.info("Programa iniciado.")
while True:
print("\nMenú Principal:")
print("1 - Combinación caliente de números")
print("2 - Combinación aleatoria de números")
print("3 - Salir")
option = input("Seleccione una opción: ").strip()
if option == '3':
logging.info("El usuario ha salido del programa.")
print("Saliendo del programa.")
break
elif option in {'1', '2'}:
columns = input("¿Cuántas combinaciones desea generar? (1-8): ").strip()
if columns.isdigit() and 1 <= int(columns) <= 8:
columns = int(columns)
logging.info(f"Opción seleccionada: {option} - Combinaciones: {columns}")
if option == '1':
combinations = generate_hot_combinations(CSV_FILE, columns)
print(f"\n{columns} combinaciones calientes generadas:")
else:
combinations = [generate_random_combination() for _ in range(columns)]
print(f"\n{columns} combinaciones aleatorias generadas:")
for i, combo in enumerate(combinations, 1):
print(f"Columna {i}: {combo}")
logging.info(f"Columna {i}: {combo}")
else:
print("Entrada inválida. Por favor, introduzca un número del 1 al 8.")
logging.warning(f"Entrada inválida para número de columnas: {columns}")
else:
print("Opción no válida. Intente de nuevo.")
logging.warning(f"Opción no válida seleccionada: {option}")
def generate_random_combination():
combination = sorted(random.sample(range(1, 50), 6))
logging.debug(f"Combinación aleatoria generada: {combination}")
return combination
def get_number_frequencies(csv_path):
frequency_counter = Counter()
try:
with open(csv_path, newline='', encoding='utf-8') as file:
reader = csv.DictReader(file)
for row in reader:
for i in range(1, 7):
number = int(row[f'N{i}'])
frequency_counter[number] += 1
logging.info(f"Frecuencias de números cargadas correctamente desde {csv_path}.")
except FileNotFoundError:
logging.error(f"Archivo no encontrado: {csv_path}")
print(f"Error: No se encontró el archivo '{csv_path}'.")
except Exception as e:
logging.error(f"Error al leer el archivo CSV: {e}")
print("Se produjo un error al leer los datos.")
return frequency_counter
def generate_hot_combinations(csv_path, num_combinations, top_n=15):
frequencies = get_number_frequencies(csv_path)
if not frequencies:
return []
hot_numbers = [num for num, _ in frequencies.most_common(top_n)]
logging.info(f"Números calientes seleccionados (top {top_n}): {hot_numbers}")
combinations = []
for _ in range(num_combinations):
combination = sorted(random.sample(hot_numbers, 6))
combinations.append(combination)
return combinations
if __name__ == "__main__":
main_menu()