1 from random import random as rand 2 3 4 # random "függvénytárból" importálom a random függvényt rand néven 5 6 def kiir(ssz, szoveg): 7 print('{}. feladat - {}'.format(ssz, szoveg)) 8 9 10 # ------------------------------------------------------ 11 # 1. Szimuláljon egy pénzfeldobást, ahol azonos esélye 12 # van a fejnek és az írásnak is! Az eredményt írassa 13 # ki a képernyőre a mintának megfelelően! 14 # ------------------------------------------------------ 15 kiir(1, 'Dobás szimulálása') 16 17 18 def szimulacio(): 19 d = rand() # 0.0 és 1.0 valósok között egy véletlen valós szám 20 if d <= 0.5: 21 return 'I' 22 else: 23 return 'F' 24 25 26 s = 'A pénzfeldobás eredménye: ' 27 print(s, szimulacio()) 28 29 # ------------------------------------------------------ 30 # 2. Kérjen be a felhasználótól egy tippet, majd 31 # szimuláljon egy pénzfeldobást! Írassa ki a 32 # képernyőre a felhasználó tippjét és a dobás 33 # eredményét is, majd tájékoztassa a felhasználót 34 # az eredményről következő formában: „Ön eltalálta.” 35 # vagy „Ön nem találta el.”! 36 # ------------------------------------------------------ 37 kiir(2, 'Tippelés') 38 39 tipp = input('Tippeljen! (F/I): ').upper() # upper - nagybetűs lesz 40 szim = szimulacio() 41 print('Az ön tippje {}, a dobás eredménye {}'.format(tipp, szim)) 42 if tipp == szim: 43 print('A Ön eltalálta!') 44 else: 45 print('Ön nem találta el!') 46 47 # ------------------------------------------------------ 48 # 3. Állapítsa meg, hány dobásból állt a kísérlet, és a 49 # választ a mintának megfelelően írassa ki a 50 # képernyőre! 51 # ------------------------------------------------------ 52 kiir(3, 'kiserlet.txt feldolgozása') 53 54 fv = open('kiserlet.txt', 'r') 55 56 db = 0 # összes dobás számlálása 57 f_db = 0 # csak az F-ek számolása 58 for dobas in fv: 59 if dobas.rstrip() == 'F': 60 f_db += 1 61 db += 1 62 63 fv.close() 64 65 print('A kísérlet {} dobásból állt'.format(db)) 66 67 # ------------------------------------------------------ 68 # 4. Milyen relatív gyakorisággal dobtunk a kísérlet 69 # során fejet? (A fej relatív gyakorisága a fejet 70 # eredményező dobások és az összes dobás hányadosa.) 71 # A relatív gyakoriságot a mintának megfelelően két 72 # tizedesjegy pontossággal, százalék formátumban 73 # írassa ki a képernyőre! 74 # ------------------------------------------------------ 75 kiir(4, 'F relatív gyakorisága') 76 77 f_gy = f_db / db * 100 78 # a kiírásban az f a zárójel után kell!! 79 print(f'A kísérlet során a fej relatív gyakorisága {f_gy:.2f}% volt.') 80 81 # ------------------------------------------------------ 82 # 5. Hányszor fordult elő ebben a kísérletben, hogy 83 # egymás után pontosan két fejet dobtunk? 84 # A választ a mintának megfelelően írassa ki a 85 # képernyőre! (Feltételezheti, hogy a kísérlet 86 # legalább 3 dobásból állt.) 87 # ------------------------------------------------------ 88 kiir(5, 'Két F egymás után') 89 90 fv = open('kiserlet.txt', 'r') 91 92 ff_db = 0 # FF sorozat db számolása 93 f_db = 0 # F dobások számolása 94 for dobas in fv: 95 if dobas.rstrip() == 'F': 96 f_db += 1 # ha F jön, akkor F-ek száma növekszik 97 else: 98 if f_db == 2: # ha I jön, akkor nézzük meg az F-ek számát 99 ff_db += 1 # és ha ez pont kettő, akkor FF db száma nőhet 100 f_db = 0 # F-ek számolását elölről kezdjük majd 101 102 fv.close() 103 104 s = 'A kísérlet során {} alkalommal dobtak pontosan két fejet egymás után.' 105 print(s.format(ff_db)) 106 107 # ------------------------------------------------------ 108 # 6. Milyen hosszú volt a leghosszabb, csak fejekből 109 # álló részsorozat? Írassa ki a választ a képernyőre 110 # a mintának megfelelően, és adja meg egy ilyen 111 # részsorozat első tagjának helyét is! (A minta 112 # tagjainak számozását eggyel kezdjük.) 113 # ------------------------------------------------------ 114 kiir(6, 'Leghosszabb F sorozat') 115 116 fv = open('kiserlet.txt', 'r') 117 118 f_sor = 0 # F-ek számolása 119 f_max = 0 # F-es sorozat maximális hossza 120 i, start = 0, 0 # i a dobások számolásáshoz, start 121 # a leghosszabb F-es sorozat kezdő helyéhez kell majd 122 for dobas in fv: 123 i += 1 124 if dobas.rstrip() == 'F': # ha F jön, akkor 125 f_sor += 1 # f_sor 1-gyel nő 126 else: 127 if f_sor > f_max: # ha I jön, akkor nézzük meg a maximumot 128 f_max = f_sor # rögzítjük az új maximumot és a 129 start = i - f_sor # kezdőhelyét 130 f_sor = 0 # ha I dobás volt, akkor F-ek számolását 131 # nulláról kell kezdenünk 132 133 s1 = 'A leghosszabb tisztafej sorozat {} tagból áll, ' 134 s2 = 'Kezdete a(z) {}. dobás.' 135 print(s1.format(f_max), end='') 136 print(s2.format(start)) 137 fv.close() 138 139 # ------------------------------------------------------ 140 # 7. Állítson elő és tároljon a memóriában 1000 db négy 141 # dobásból álló sorozatot! Számolja meg, hogy hány 142 # esetben követett egy háromtagú „tisztafej” soroza- 143 # tot fej, illetve hány esetben írás! Az eredményt 144 # írassa ki a dobasok.txt állományba úgy, hogy az 145 # első sorba kerüljön az eredmény, a második sorban 146 # pedig egy-egy szóközzel elválasztva, egyetlen 147 # sorban szerepeljenek a dobássorozatok! 148 # ------------------------------------------------------ 149 kiir(7, 'Feltevés igazolása, cáfolása') 150 sorozat = [] # ebben tároljuk majd az 1000 db 4-es sorozatot 151 f_db, i_db = 0, 0 # FFFF és FFFI sorozat darabszámai 152 for i in range(1000): 153 s = '' 154 for j in range(4): # ebben a ciklusban 155 s += szimulacio() # egy stringbe fűzöm az F vagy I karaktert 156 if s == 'FFFF': # ha a 4-esem FFFF, akkor darabszámolás 157 f_db += 1 158 if s == 'FFFI': # ha a 4-esem FFFI, akkor másik darabszámolás 159 i_db += 1 160 sorozat.append(s) # s, a 4-es megy a sorozat listába 161 162 fv = open('dobasok.txt', 'w') 163 fv.write('FFFF: ' + str(f_db) + ', FFFI: ' + str(i_db) + '\n') 164 for elem in sorozat: 165 print(elem, end=' ', file=fv) # print - fájlbaírás, csak, hgy ilyen is legyen 166 167 fv.close()