fejvagyiras201510.py
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()