szamok201305idny.py
1    from random import randint as r
2    
3    # Próbálgassuk a class használatát! Olyasmi ez, mint a C-ben a struktúra,
4    # de persze mégsem, de itt és most gyakorlatilag olyan... :)
5    class teszt:
6        def __init__(self,k,v,p,t):
7            self.k=k                # kérdés (szöveg)
8            self.v=int(v)           # válasz (egész)
9            self.p=int(p)           # pont (egész)
10           self.t=t                # témakör (szöveg)
11   
12       # Ez is jól jön, hogy ilyet lehet a classban: kiírás beállítása.
13       # 7. feladatban felhasználjuk a fájlba íráskor
14       def __str__(self):
15           return f'{self.p} {self.v} {self.k}'    
16   #-------------------------------------------------------------------------------
17   # 1. Olvassa be a felszam.txt állományban talált adatokat, és azok felhasználá-
18   #    sával oldja meg a következő feladatokat!
19   #-------------------------------------------------------------------------------
20   def F1():
21       print('1. feladat - Kérdések beolvasása')
22       fbe=open('felszam.txt','r')
23       
24       temp=['']*4
25       kérdés_jön=True
26       for sor in fbe:
27           if kérdés_jön:
28               temp[0]=sor.strip()
29               kérdés_jön=False
30           else:
31               sor=sor.strip().split()
32               for i,elem in enumerate(sor,1):
33                   temp[i]=elem
34               teszt_obj=teszt(temp[0],temp[1],temp[2],temp[3])
35               kerdesek.append(teszt_obj)
36               kérdés_jön=True
37               
38       #for kerdes in kerdesek:
39       #    print(kerdes)
40   
41       fbe.close()
42   #-------------------------------------------------------------------------------
43   # 2. Hány feladat van az adatfájlban? A választ írassa ki a képernyőre!
44   #-------------------------------------------------------------------------------
45   def F2():
46       print('\n2. feladat--------------------------------------------------')
47       print(f'A feladatok száma: {len(kerdesek)}')
48   #-------------------------------------------------------------------------------
49   # 3. Határozza meg, hogy hány matematika feladat van az adatfájlban, és ezek
50   #    közül hány feladat ér 1, 2, illetve 3 pontot! A választ egész mondatban
51   #    írassa ki a képernyőre!
52   #    Például:
53   #           Az adatfajlban 20 matematika feladat van, 1 pontot er
54   #           10 feladat, 2 pontot er 6 feladat, 3 pontot er 4 feladat.
55   #-------------------------------------------------------------------------------
56   def F3():
57       print('\n3. feladat--------------------------------------------------')
58       p={1:0, 2:0, 3:0}
59       for kerdes in kerdesek:
60           if kerdes.t=='matematika':
61               p[kerdes.p]+=1
62       print(f'Az adatfájlban {sum(p.values())} matematika feladat van.')
63       print(f'1 pontot ér {p[1]} feladat, 2 pontot ér {p[2]} feladat, 3 pontot ér {p[3]} feladat.')
64   #-------------------------------------------------------------------------------
65   # 4. Mettől meddig terjed a fájlban található válaszok számértéke? A választ
66   #    egész mondatban írja ki a képernyőre!
67   #-------------------------------------------------------------------------------
68   def F4():
69       print('\n4. feladat--------------------------------------------------')
70       v=set()
71       for kerdes in kerdesek:
72           v.add(kerdes.v)
73       print(f'A válaszok számértéke {min(v)} és {max(v)} között van.')    
74   #-------------------------------------------------------------------------------
75   # 5. Milyen témakörök szerepelnek ténylegesen az adatfájlban? Írassa ki a téma-
76   #    körök nevét a képernyőre úgy, hogy minden előforduló témakör pontosan egy-
77   #    szer jelenjen meg!
78   #-------------------------------------------------------------------------------
79   def F5():
80       print('\n5. feladat--------------------------------------------------')
81       t=set()
82       for kerdes in kerdesek:
83           t.add(kerdes.t)
84       print('Az adatfájlban szereplő témakörök:')
85       for tema in t:
86           print(tema)
87   #-------------------------------------------------------------------------------
88   # 6. Kérje be egy témakör nevét, és véletlenszerűen sorsoljon ki egy kérdést
89   #    ebből a témakörből! Sorsoláskor ügyeljen arra, hogy az adott témakörbe eső
90   #    valamennyi feladatnak legyen esélye! (Feltételezheti, hogy a felhasználó
91   #    helyesen adta meg egy létező témakör nevét.) Írassa ki a kérdést, kérje be
92   #    a felhasználó válaszát, majd adja meg a válaszért járó pontszámot! (Helyte-
93   #    len válaszért 0 pont jár.) Ha a válasz helytelen volt, a helyes választ is
94   #    közölje! A párbeszéd az alábbi formában jelenjen meg:
95   #    Például:
96   #           Milyen temakorbol szeretne kerdest kapni? tortenelem
97   #           Mikor volt a mohacsi vesz? 1514
98   #           A valasz 0 pontot er.
99   #           A helyes valasz: 1526
100  #-------------------------------------------------------------------------------
101  def F6():
102      print('\n6. feladat--------------------------------------------------')    
103      t=input('Milyen témakörből szeretne feladatot kapni? ')
104      rnd=r(1,len(kerdesek))-1
105      while kerdesek[rnd].t!=t:
106          rnd=r(1,len(kerdesek))-1
107      v=int(input(kerdesek[rnd].k+' '))
108      pont=0 if v!=kerdesek[rnd].v else kerdesek[rnd].p
109      print(f'A válasz {pont} pontot ér.')
110      if v!=kerdesek[rnd].v:
111          print(f'A helyes válasz: {kerdesek[rnd].v}')
112  #-------------------------------------------------------------------------------
113  # 7. Generáljon egy 10 kérdésből álló feladatsort véletlenszerűen úgy, hogy
114  #    egyetlen feladat se szerepeljen benne kétszer! (Ügyeljen azonban arra, hogy
115  #    minden beolvasott feladatnak legyen esélye a kiválasztásra!) A feladatsort
116  #    írassa ki a tesztfel.txt állományba az alábbi formátumban! (Az első szám a
117  #    helyes megoldásért járó pontszám, ezt követi a helyes válasz, majd a kérdés
118  #    egy-egy szóközzel elválasztva.) Az állomány végére írassa ki a feladatsorra
119  #    összesen adható pontszámot is!
120  #    Például:
121  #           …
122  #           1 1526 Mikor volt a mohacsi vesz?
123  #           …
124  #           A feladatsorra osszesen 20 pont adhato. 
125  #-------------------------------------------------------------------------------
126  def F7():
127      print('\n7. feladat - Egy teszt összeállítása -------------------------')
128      n=10
129      kivalogat=set()
130      while len(kivalogat)<n:
131          rnd=r(1,len(kerdesek))-1
132          kivalogat.add(kerdesek[rnd])
133      fki=open('tesztfel.txt','w')
134      sump=0
135      for kerdes in kivalogat:
136          print(kerdes,file=fki)  # itt használjuk a class __str__ függvényét
137          sump+=kerdes.p
138      print(f'A feladatsorra összesen {sump} pont adható',file=fki)
139      fki.close()
140  #******************************** F Ő M O D U L ********************************
141  kerdesek=[]
142  F1()
143  F2()
144  F3()
145  F4()
146  F5()
147  F6()
148  F7()
149