2026. május 24., vasárnap

Egy összetett skandináv lottó elemző és generáló program python nyelven

Telepítés:

pip install requests matplotlib

A program fájlokat készít:

  • skandinav_lotto.csv
  • statisztika.png

Funkciók:

  • automatikus óránkénti frissítés,
  • AI-alapú súlyozás,
  • több stratégia,
  • grafikonkészítés,
  • több szelvény generálása,
  • utolsó húzás kizárása.

import requests
import csv
import random
import time
from io import StringIO
from collections import Counter
from datetime import datetime

import matplotlib.pyplot as plt

# ============================================
# SKANDINaV LOTTo AI ELEMZo RENDSZER
# ============================================
#
# Funkciok:
#
# 1. Automatikus CSV letöltes
# 2. CSV mentes
# 3. Gyakorisagi elemzes
# 4. Legregebben húzott szamok
# 5. AI-alapú pontozas
# 6. Több strategia
# 7. Több szelveny generalas
# 8. Grafikon keszites
#
# ============================================

URL = "https://www.szerencsejatek.hu/export/skandinav_lotto.csv"

# ============================================
# CSV LETÖLTeS
# ============================================

def download_data():

    print("Adatok letöltese...")

    response = requests.get(URL, timeout=10)
    response.raise_for_status()

    with open("skandinav_lotto.csv", "w", encoding="utf-8") as f:
        f.write(response.text)

    return response.text


# ============================================
# CSV FELDOLGOZaS
# ============================================

def parse_csv(text):

    csv_data = StringIO(text)

    reader = csv.reader(csv_data, delimiter=';')

    header = next(reader, None)

    draws = []

    for row in reader:

        try:

            if len(row) < 25:
                continue

            year = int(row[0])
            week = int(row[1])

            numbers = list(map(int, row[11:25]))

            draws.append({
                "year": year,
                "week": week,
                "numbers": numbers
            })

        except:
            continue

    return draws


# ============================================
# GYAKORISaG SZaMiTaS
# ============================================

def calculate_frequency(draws):

    freq = Counter()

    for draw in draws:

        for number in draw["numbers"]:
            freq[number] += 1

    return freq


# ============================================
# LEGReGEBBEN HÚZOTT SZaMOK
# ============================================

def calculate_age(draws):

    last_seen = {}

    for index in range(len(draws)-1, -1, -1):

        draw = draws[index]

        for number in draw["numbers"]:

            if number not in last_seen:
                last_seen[number] = len(draws) - index

    return last_seen


# ============================================
# AI PONTOZaS
# ============================================

def ai_score(draws):

    freq = calculate_frequency(draws)

    age = calculate_age(draws)

    latest = set(draws[-1]["numbers"])

    scores = {}

    for n in range(1, 36):

        if n in latest:
            continue

        frequency_score = freq[n]

        age_score = age.get(n, 999)

        # AI súlyozas
        score = (
            age_score * 2
            - frequency_score * 0.3
            + random.uniform(0, 5)
        )

        scores[n] = score

    return scores


# ============================================
# STRATeGIaK
# ============================================

def strategy_oldest(draws):

    age = calculate_age(draws)

    latest = set(draws[-1]["numbers"])

    ranking = []

    for n in range(1, 36):

        if n in latest:
            continue

        ranking.append((n, age.get(n, 999)))

    ranking.sort(key=lambda x: x[1], reverse=True)

    return sorted([x[0] for x in ranking[:7]])


def strategy_most_common(draws):

    freq = calculate_frequency(draws)

    latest = set(draws[-1]["numbers"])

    ranking = []

    for n in range(1, 36):

        if n in latest:
            continue

        ranking.append((n, freq[n]))

    ranking.sort(key=lambda x: x[1], reverse=True)

    return sorted([x[0] for x in ranking[:7]])


def strategy_ai(draws):

    scores = ai_score(draws)

    ranking = sorted(scores.items(), key=lambda x: x[1], reverse=True)

    return sorted([x[0] for x in ranking[:7]])


def strategy_random():

    return sorted(random.sample(range(1, 36), 7))


# ============================================
# GRAFIKON
# ============================================

def draw_chart(draws):

    freq = calculate_frequency(draws)

    x = list(range(1, 36))
    y = [freq[n] for n in x]

    plt.figure(figsize=(12, 6))

    plt.bar(x, y)

    plt.xlabel("Szam")
    plt.ylabel("Elofordulas")
    plt.title("Skandinav lotto szamgyakorisag")

    plt.xticks(x)

    plt.tight_layout()

    plt.savefig("statisztika.png")

    print("\nGrafikon mentve: statisztika.png")


# ============================================
# SZELVeNYEK
# ============================================

def generate_tickets(draws):

    print("\n==============================")
    print("GENERaLT SZELVeNYEK")
    print("==============================")

    print("\n1. Legregebbi strategia:")
    print(strategy_oldest(draws))

    print("\n2. Leggyakoribb strategia:")
    print(strategy_most_common(draws))

    print("\n3. AI strategia:")
    print(strategy_ai(draws))

    print("\n4. Veletlen strategia:")
    print(strategy_random())


# ============================================
# AUTOMATIKUS FRISSiTeS
# ============================================

def auto_update():

    while True:

        try:

            print("\n===================================")
            print("Frissites ideje:", datetime.now())
            print("===================================")

            text = download_data()

            draws = parse_csv(text)

            if not draws:
                print("Nincs feldolgozhato adat.")
                continue

            latest = draws[-1]

            print("\nUtolso húzas:")
            print(sorted(latest["numbers"]))

            generate_tickets(draws)

            draw_chart(draws)

        except Exception as e:

            print("Hiba:", e)

        # 1 ora varakozas
        print("\nKövetkezo frissites 1 ora múlva...")
        time.sleep(3600)


# ============================================
# INDiTaS
# ============================================

if __name__ == "__main__":

    auto_update()

Nincsenek megjegyzések:

Megjegyzés küldése