from random import random as rand


# random "függvénytárból" importálom a random függvényt rand néven

def kiir(ssz, szoveg):
    print('{}. feladat - {}'.format(ssz, szoveg))


# ------------------------------------------------------
# 1. Szimuláljon egy pénzfeldobást, ahol azonos esélye
#    van a fejnek és az írásnak is! Az eredményt írassa
#    ki a képernyőre a mintának megfelelően!
# ------------------------------------------------------
kiir(1, 'Dobás szimulálása')


def szimulacio():
    d = rand()  # 0.0 és 1.0 valósok között egy véletlen valós szám
    if d <= 0.5:
        return 'I'
    else:
        return 'F'


s = 'A pénzfeldobás eredménye: '
print(s, szimulacio())

# ------------------------------------------------------
# 2. Kérjen be a felhasználótól egy tippet, majd
#    szimuláljon egy pénzfeldobást! Írassa ki a
#    képernyőre a felhasználó tippjét és a dobás
#    eredményét is, majd tájékoztassa a felhasználót
#    az eredményről következő formában: „Ön eltalálta.”
#    vagy „Ön nem találta el.”!
# ------------------------------------------------------
kiir(2, 'Tippelés')

tipp = input('Tippeljen! (F/I): ').upper()  # upper - nagybetűs lesz
szim = szimulacio()
print('Az ön tippje {}, a dobás eredménye {}'.format(tipp, szim))
if tipp == szim:
    print('A Ön eltalálta!')
else:
    print('Ön nem találta el!')

# ------------------------------------------------------
# 3. Állapítsa meg, hány dobásból állt a kísérlet, és a
#    választ a mintának megfelelően írassa ki a
#    képernyőre!
# ------------------------------------------------------
kiir(3, 'kiserlet.txt feldolgozása')

fv = open('kiserlet.txt', 'r')

db = 0  # összes dobás számlálása
f_db = 0  # csak az F-ek számolása
for dobas in fv:
    if dobas.rstrip() == 'F':
        f_db += 1
    db += 1

fv.close()

print('A kísérlet {} dobásból állt'.format(db))

# ------------------------------------------------------
# 4. Milyen relatív gyakorisággal dobtunk a kísérlet
#    során fejet? (A fej relatív gyakorisága a fejet
#    eredményező dobások és az összes dobás hányadosa.)
#    A relatív gyakoriságot a mintának megfelelően két
#    tizedesjegy pontossággal, százalék formátumban
#    írassa ki a képernyőre!
# ------------------------------------------------------
kiir(4, 'F relatív gyakorisága')

f_gy = f_db / db * 100
# a kiírásban az f a zárójel után kell!!
print(f'A kísérlet során a fej relatív gyakorisága {f_gy:.2f}% volt.')

# ------------------------------------------------------
# 5. Hányszor fordult elő ebben a kísérletben, hogy
#    egymás után pontosan két fejet dobtunk?
#    A választ a mintának megfelelően írassa ki a
#    képernyőre! (Feltételezheti, hogy a kísérlet
#    legalább 3 dobásból állt.)
# ------------------------------------------------------
kiir(5, 'Két F egymás után')

fv = open('kiserlet.txt', 'r')

ff_db = 0  # FF sorozat db számolása
f_db = 0  # F dobások számolása
for dobas in fv:
    if dobas.rstrip() == 'F':
        f_db += 1  # ha F jön, akkor F-ek száma növekszik
    else:
        if f_db == 2:  # ha I jön, akkor nézzük meg az F-ek számát
            ff_db += 1  # és ha ez pont kettő, akkor FF db száma nőhet
        f_db = 0  # F-ek számolását elölről kezdjük majd

fv.close()

s = 'A kísérlet során {} alkalommal dobtak pontosan két fejet egymás után.'
print(s.format(ff_db))

# ------------------------------------------------------
# 6. Milyen hosszú volt a leghosszabb, csak fejekből
#    álló részsorozat? Írassa ki a választ a képernyőre
#    a mintának megfelelően, és adja meg egy ilyen
#    részsorozat első tagjának helyét is! (A minta
#    tagjainak számozását eggyel kezdjük.)
# ------------------------------------------------------
kiir(6, 'Leghosszabb F sorozat')

fv = open('kiserlet.txt', 'r')

f_sor = 0  # F-ek számolása
f_max = 0  # F-es sorozat maximális hossza
i, start = 0, 0  # i a dobások számolásáshoz, start
# a leghosszabb F-es sorozat kezdő helyéhez kell majd
for dobas in fv:
    i += 1
    if dobas.rstrip() == 'F':  # ha F jön, akkor
        f_sor += 1  # f_sor 1-gyel nő
    else:
        if f_sor > f_max:  # ha I jön, akkor nézzük meg a maximumot
            f_max = f_sor  # rögzítjük az új maximumot és a
            start = i - f_sor  # kezdőhelyét
        f_sor = 0  # ha I dobás volt, akkor F-ek számolását
        # nulláról kell kezdenünk

s1 = 'A leghosszabb tisztafej sorozat {} tagból áll, '
s2 = 'Kezdete a(z) {}. dobás.'
print(s1.format(f_max), end='')
print(s2.format(start))
fv.close()

# ------------------------------------------------------
# 7. Állítson elő és tároljon a memóriában 1000 db négy
#    dobásból álló sorozatot! Számolja meg, hogy hány
#    esetben követett egy háromtagú „tisztafej” soroza-
#    tot fej, illetve hány esetben írás! Az eredményt
#    írassa ki a dobasok.txt állományba úgy, hogy az
#    első sorba kerüljön az eredmény, a második sorban
#    pedig egy-egy szóközzel elválasztva, egyetlen
#    sorban szerepeljenek a dobássorozatok!
# ------------------------------------------------------
kiir(7, 'Feltevés igazolása, cáfolása')
sorozat = []  # ebben tároljuk majd az 1000 db 4-es sorozatot
f_db, i_db = 0, 0  # FFFF és FFFI sorozat darabszámai
for i in range(1000):
    s = ''
    for j in range(4):  # ebben a ciklusban
        s += szimulacio()  # egy stringbe fűzöm az F vagy I karaktert
    if s == 'FFFF':  # ha a 4-esem FFFF, akkor darabszámolás
        f_db += 1
    if s == 'FFFI':  # ha a 4-esem FFFI, akkor másik darabszámolás
        i_db += 1
    sorozat.append(s)  # s, a 4-es megy a sorozat listába

fv = open('dobasok.txt', 'w')
fv.write('FFFF: ' + str(f_db) + ', FFFI: ' + str(i_db) + '\n')
for elem in sorozat:
    print(elem, end=' ', file=fv)  # print - fájlbaírás, csak, hgy ilyen is legyen

fv.close()