1 from random import randint as r2 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áskor14 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=['']*425 kérdés_jön=True26 for sor in fbe:27 if kérdés_jön:28 temp[0]=sor.strip()29 kérdés_jön=False30 else:31 sor=sor.strip().split()32 for i,elem in enumerate(sor,1):33 temp[i]=elem34 teszt_obj=teszt(temp[0],temp[1],temp[2],temp[3])35 kerdesek.append(teszt_obj)36 kérdés_jön=True37 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 ezek50 # közül hány feladat ér 1, 2, illetve 3 pontot! A választ egész mondatban51 # írassa ki a képernyőre!52 # Például:53 # Az adatfajlban 20 matematika feladat van, 1 pontot er54 # 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]+=162 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álaszt66 # 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ést89 # 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 be92 # 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 is94 # közölje! A párbeszéd az alábbi formában jelenjen meg:95 # Például:96 # Milyen temakorbol szeretne kerdest kapni? tortenelem97 # Mikor volt a mohacsi vesz? 151498 # A valasz 0 pontot er.99 # A helyes valasz: 1526100 #-------------------------------------------------------------------------------101 def F6():102 print('\n6. feladat--------------------------------------------------') 103 t=input('Milyen témakörből szeretne feladatot kapni? ')104 rnd=r(1,len(kerdesek))-1105 while kerdesek[rnd].t!=t:106 rnd=r(1,len(kerdesek))-1107 v=int(input(kerdesek[rnd].k+' '))108 pont=0 if v!=kerdesek[rnd].v else kerdesek[rnd].p109 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, hogy114 # egyetlen feladat se szerepeljen benne kétszer! (Ügyeljen azonban arra, hogy115 # minden beolvasott feladatnak legyen esélye a kiválasztásra!) A feladatsort116 # írassa ki a tesztfel.txt állományba az alábbi formátumban! (Az első szám a117 # helyes megoldásért járó pontszám, ezt követi a helyes válasz, majd a kérdés118 # egy-egy szóközzel elválasztva.) Az állomány végére írassa ki a feladatsorra119 # ö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=10129 kivalogat=set()130 while len(kivalogat)<n:131 rnd=r(1,len(kerdesek))-1132 kivalogat.add(kerdesek[rnd])133 fki=open('tesztfel.txt','w')134 sump=0135 for kerdes in kivalogat:136 print(kerdes,file=fki) # itt használjuk a class __str__ függvényét137 sump+=kerdes.p138 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