2025-09-12

Skandináv Lottó Python statisztika

 Annak vizsgálata, hogy a sorsolt számok első száma, hogyan alakult. Hányszor volt első helyen az 1-es szám? Melyik az az első szám a hétből ami a legnagyobb értékű?

 Egy húzási számsorban hogyan oszlanak el a páros és a páratlan számok. A hét darab számban mi volt többször, a páros vagy a páratlan?


from collections import Counter

class OsszesHuzas:
def __init__(self):

# Ebben a fájlban vannak a mindenkori Skandináv húzott számai.
# 14 szám egy sorban, 7 gépi és 7 kézi húzás.
self.FILENAME = 'utolso14.csv'

# Az összes húzás tárolója 7 elemű 2D lista
self.het_elemu_listak = []

@staticmethod
def ketfele(lista):
"""A 14 elemű számlistát két hét eleműre bontja"""
kozep_index = len(lista) // 2
return lista[:kozep_index], lista[kozep_index:]

@staticmethod
def elemzes(filename):
"""Beolvassa a fájl sorait és integer számlistává alakítja"""
with open(filename) as adatok:
for sor in map(str.strip, adatok):
yield list(map(int, sor.rstrip(',').split(',')))

def vegrehajt(self):
""" for ciklusban beolvassa a fájl sorait.
Az elemzes() és a ketfele() függvény hívása.
:return: osszes_huzas 2D lista
"""
for line in self.elemzes(self.FILENAME):
elso, masik = self.ketfele(line)
self.het_elemu_listak.append(elso)
self.het_elemu_listak.append(masik)

return self.het_elemu_listak


class Statisztika(OsszesHuzas):
def __init__(self):
super().__init__()

# Az OsszesHuzas() osztály metódusa
self.osszes_huzas = self.vegrehajt()

# Ide jonnek a különböző statisztikai adatokat készítő metódusok.

def elso_szamok(self):
"""Milyen számmal kezdődnek a húzasok?
Ezt vizsgálja a metódus."""
elsok_lista = []

huzasok = self.osszes_huzas
for szam in huzasok:
elsok_lista.append(szam[0])

elsok_szotarban = Counter(elsok_lista)

return elsok_szotarban

@staticmethod
def szetvalagatas(het_elemu_lista):
paros_szamok = []
paratlan_szamok = []

for num in het_elemu_lista:
if num % 2 == 0:
paros_szamok.append(num)
else:
paratlan_szamok.append(num)

darab_paros_szam = len(paros_szamok)
darab_paratlan_szam = len(paratlan_szamok)

return darab_paros_szam, darab_paratlan_szam

def paros_paratlan(self):
"""Visszadja a hételemu listában lévő páros és
páratlan számok darabját."""
paros_db = []
paratlan_db = []

for het_szam_listaja in self.osszes_huzas:
paros, paratlan = self.szetvalagatas(het_szam_listaja)
paros_db.append(paros)
paratlan_db.append(paratlan)

paros_szotar = Counter(paros_db)
paros_sorban = sorted(paros_szotar.items())

paratlan_szotar = Counter(paratlan_db)
paratlan_sorban = sorted(paratlan_szotar.items())

return paros_sorban, paratlan_sorban


class App(Statisztika):
def __init__(self):
super().__init__()

# A Statisztika() osztály lista változója
teljes_huzasi_lista = self.osszes_huzas
print(f'\nAz összes gépi és kézi húzas (2025, 09, 05 ig): '
f'{len(teljes_huzasi_lista)} darab\n'
f'Néhány példa következik.......')

for i, hetszam in enumerate(teljes_huzasi_lista):
if i < 10:
print(hetszam)
else:
print('stb.......')
break

# ****************************************************************

# Statisztika() osztály metódusa,
counter_szotar = self.elso_szamok()
# Lista benne tuple-k.
kulcs_sorbarendezve = sorted(counter_szotar.items())

min_elso_kulcs = min(counter_szotar.keys())
min_elso_ertek = counter_szotar[min_elso_kulcs]
max_elso_kulcs = max(counter_szotar.keys())
max_elso_ertek = counter_szotar[max_elso_kulcs]

print(f'\nA sorsolt számok (7 db) első, legkisebb értékű vizsgálata.'
f'\nA legkisebb húzott szám: {min_elso_kulcs} -s, '
f'Összesen: {min_elso_ertek} db húzásban.')

for zarojelben in kulcs_sorbarendezve:
szazalek = round((zarojelben[1]/len(teljes_huzasi_lista))*100, 1)
print(f'{zarojelben[0]} szám, {zarojelben[1]} húzásban volt első,\t'
f'{szazalek}%')


print(f'A legnagyobb első helyezett húzott szám: {max_elso_kulcs} -s,'
f'Összesen {max_elso_ertek} db húzásban.')

# **************************************************************

print(f'\nA sorsolási számok páros és páratlan eloszlása, egy szelvényre vizsgálva.')
talalatok = self.paros_paratlan()
paros = talalatok[0]
paratlan = talalatok[1]

for tuple_ben1 in paros:
print(f'{tuple_ben1[0]} darab párosszám {tuple_ben1[1]} alkalommal,\t')

print()

for tuple_ben2 in paratlan:
print(f'{tuple_ben2[0]} darab páratlanszám {tuple_ben2[1]} alkalommal,\t')

print(f'A csupa párosszámokat tartalmazó húzás {paros[-1][1]}!, '
f'\nEz több mint a háromszorosa, a páratlan húzásokkal '
f'összehasonlítva, {paratlan[-1][1]}.')

if __name__ == '__main__':
app = App()

Letöltés:
utolso14.csv