from random import randint as r

# Próbálgassuk a class használatát! Olyasmi ez, mint a C-ben a struktúra,
# de persze mégsem, de itt és most gyakorlatilag olyan... :)
class teszt:
    def __init__(self,k,v,p,t):
        self.k=k                # kérdés (szöveg)
        self.v=int(v)           # válasz (egész)
        self.p=int(p)           # pont (egész)
        self.t=t                # témakör (szöveg)

    # Ez is jól jön, hogy ilyet lehet a classban: kiírás beállítása.
    # 7. feladatban felhasználjuk a fájlba íráskor
    def __str__(self):
        return f'{self.p} {self.v} {self.k}'    
#-------------------------------------------------------------------------------
# 1. Olvassa be a felszam.txt állományban talált adatokat, és azok felhasználá-
#    sával oldja meg a következő feladatokat!
#-------------------------------------------------------------------------------
def F1():
    print('1. feladat - Kérdések beolvasása')
    fbe=open('felszam.txt','r')
    
    temp=['']*4
    kérdés_jön=True
    for sor in fbe:
        if kérdés_jön:
            temp[0]=sor.strip()
            kérdés_jön=False
        else:
            sor=sor.strip().split()
            for i,elem in enumerate(sor,1):
                temp[i]=elem
            teszt_obj=teszt(temp[0],temp[1],temp[2],temp[3])
            kerdesek.append(teszt_obj)
            kérdés_jön=True
            
    #for kerdes in kerdesek:
    #    print(kerdes)

    fbe.close()
#-------------------------------------------------------------------------------
# 2. Hány feladat van az adatfájlban? A választ írassa ki a képernyőre!
#-------------------------------------------------------------------------------
def F2():
    print('\n2. feladat--------------------------------------------------')
    print(f'A feladatok száma: {len(kerdesek)}')
#-------------------------------------------------------------------------------
# 3. Határozza meg, hogy hány matematika feladat van az adatfájlban, és ezek
#    közül hány feladat ér 1, 2, illetve 3 pontot! A választ egész mondatban
#    írassa ki a képernyőre!
#    Például:
#           Az adatfajlban 20 matematika feladat van, 1 pontot er
#           10 feladat, 2 pontot er 6 feladat, 3 pontot er 4 feladat.
#-------------------------------------------------------------------------------
def F3():
    print('\n3. feladat--------------------------------------------------')
    p={1:0, 2:0, 3:0}
    for kerdes in kerdesek:
        if kerdes.t=='matematika':
            p[kerdes.p]+=1
    print(f'Az adatfájlban {sum(p.values())} matematika feladat van.')
    print(f'1 pontot ér {p[1]} feladat, 2 pontot ér {p[2]} feladat, 3 pontot ér {p[3]} feladat.')
#-------------------------------------------------------------------------------
# 4. Mettől meddig terjed a fájlban található válaszok számértéke? A választ
#    egész mondatban írja ki a képernyőre!
#-------------------------------------------------------------------------------
def F4():
    print('\n4. feladat--------------------------------------------------')
    v=set()
    for kerdes in kerdesek:
        v.add(kerdes.v)
    print(f'A válaszok számértéke {min(v)} és {max(v)} között van.')    
#-------------------------------------------------------------------------------
# 5. Milyen témakörök szerepelnek ténylegesen az adatfájlban? Írassa ki a téma-
#    körök nevét a képernyőre úgy, hogy minden előforduló témakör pontosan egy-
#    szer jelenjen meg!
#-------------------------------------------------------------------------------
def F5():
    print('\n5. feladat--------------------------------------------------')
    t=set()
    for kerdes in kerdesek:
        t.add(kerdes.t)
    print('Az adatfájlban szereplő témakörök:')
    for tema in t:
        print(tema)
#-------------------------------------------------------------------------------
# 6. Kérje be egy témakör nevét, és véletlenszerűen sorsoljon ki egy kérdést
#    ebből a témakörből! Sorsoláskor ügyeljen arra, hogy az adott témakörbe eső
#    valamennyi feladatnak legyen esélye! (Feltételezheti, hogy a felhasználó
#    helyesen adta meg egy létező témakör nevét.) Írassa ki a kérdést, kérje be
#    a felhasználó válaszát, majd adja meg a válaszért járó pontszámot! (Helyte-
#    len válaszért 0 pont jár.) Ha a válasz helytelen volt, a helyes választ is
#    közölje! A párbeszéd az alábbi formában jelenjen meg:
#    Például:
#           Milyen temakorbol szeretne kerdest kapni? tortenelem
#           Mikor volt a mohacsi vesz? 1514
#           A valasz 0 pontot er.
#           A helyes valasz: 1526
#-------------------------------------------------------------------------------
def F6():
    print('\n6. feladat--------------------------------------------------')    
    t=input('Milyen témakörből szeretne feladatot kapni? ')
    rnd=r(1,len(kerdesek))-1
    while kerdesek[rnd].t!=t:
        rnd=r(1,len(kerdesek))-1
    v=int(input(kerdesek[rnd].k+' '))
    pont=0 if v!=kerdesek[rnd].v else kerdesek[rnd].p
    print(f'A válasz {pont} pontot ér.')
    if v!=kerdesek[rnd].v:
        print(f'A helyes válasz: {kerdesek[rnd].v}')
#-------------------------------------------------------------------------------
# 7. Generáljon egy 10 kérdésből álló feladatsort véletlenszerűen úgy, hogy
#    egyetlen feladat se szerepeljen benne kétszer! (Ügyeljen azonban arra, hogy
#    minden beolvasott feladatnak legyen esélye a kiválasztásra!) A feladatsort
#    írassa ki a tesztfel.txt állományba az alábbi formátumban! (Az első szám a
#    helyes megoldásért járó pontszám, ezt követi a helyes válasz, majd a kérdés
#    egy-egy szóközzel elválasztva.) Az állomány végére írassa ki a feladatsorra
#    összesen adható pontszámot is!
#    Például:
#           …
#           1 1526 Mikor volt a mohacsi vesz?
#           …
#           A feladatsorra osszesen 20 pont adhato. 
#-------------------------------------------------------------------------------
def F7():
    print('\n7. feladat - Egy teszt összeállítása -------------------------')
    n=10
    kivalogat=set()
    while len(kivalogat)<n:
        rnd=r(1,len(kerdesek))-1
        kivalogat.add(kerdesek[rnd])
    fki=open('tesztfel.txt','w')
    sump=0
    for kerdes in kivalogat:
        print(kerdes,file=fki)  # itt használjuk a class __str__ függvényét
        sump+=kerdes.p
    print(f'A feladatsorra összesen {sump} pont adható',file=fki)
    fki.close()
#******************************** F Ő M O D U L ********************************
kerdesek=[]
F1()
F2()
F3()
F4()
F5()
F6()
F7()
