class Szo:
    def __init__(self, szo=''):
        self.szo = szo
        self.hossz = len(szo)

    def __str__(self):
        return self.szo

    def mngdb(self) -> int:
        """maganhangzok szama"""
        db = 0
        for betu in ['a', 'e', 'i', 'o', 'u']:
            db += self.szo.count(betu)
        return db

    def vanmng(self) -> bool:
        """van-e a szoban maganhangzo"""
        return [False, True][self.mngdb() > 0]

    def vanmng_kiir(self) -> str:
        """van-e a szoban maganhangzo kiir"""
        return ['Nincs benne magánhangzó', 'Van benne magánhangzó'][self.vanmng()]

    def letra(self, fok='') -> bool:
        """a szo a fok-hoz tartozo letraszo-e"""
        return [False, True][self.szo[1:4] == fok]


class Fajl:
    """Fajlmuveletek osztalya"""

    def __init__(self, fnev):
        self.fnev = fnev

    def beolvas(self):
        """fajl adatainak beolvasasa"""
        f = open(self.fnev)
        adatok = [Szo(szo.strip()) for szo in f.readlines() if Szo(szo.strip()).hossz == 5]
        f.close()
        return adatok

    def kiir(self, adatok):
        """fajlba iras"""
        f = open(self.fnev, 'w', encoding='utf-8')
        print(adatok, end='', file=f)
        f.close()

    def leghosszabb(self) -> int:
        """leghosszabb szo hossza"""
        f = open(self.fnev)
        maxh = 0
        for szo in f.readlines():
            szo = szo.strip()
            if Szo(szo).hossz > maxh:
                maxh = Szo(szo).hossz
        f.close()
        return maxh

    def leghosszabb_szavak(self) -> list:
        """leghosszabb szavak"""
        maxh = self.leghosszabb()
        f = open(self.fnev)
        lista = []

        for sz in f.readlines():
            if Szo(sz.strip()).hossz == maxh:
                lista.append(Szo(sz.strip()))
        f.close()
        return lista

    def leghosszabb_szavak_kiir(self):
        sz = 'Az állományban lévő leghosszabb szó hossza: ' + str(self.leghosszabb()) + ' karakter\n' + 'A szavak:\n'
        szavak = self.leghosszabb_szavak()
        for szo in szavak:
            sz += str(szo.szo) + '\n'
        return sz

    def tobbmng(self) -> dict:
        """tobb maganhangzos szavak"""
        adat = {'db': 0, 'jodb': 0, 'sz': []}
        f = open(self.fnev)
        for szo in f.readlines():
            sz = Szo(szo.strip())
            if sz.mngdb() > sz.hossz / 2:
                adat['jodb'] += 1
                adat['sz'].append(sz)
            adat['db'] += 1
        f.close()
        return adat

    def tobbmng_kiir(self) -> str:
        adat = self.tobbmng()
        sz = ''
        for szo in adat['sz']:
            sz += str(szo) + ' '
        sz += '\nTöbb magánhangzós szavak száma: ' + str(adat['jodb']) + '\n' \
              + 'Az állományban szereplő szavak száma: ' + str(adat['db']) + '\n' \
              + 'Arány: ' + '{:.2f}'.format(adat['jodb'] * 100 / adat['db']) + ' %'
        return sz


class Otbetusok:
    def __init__(self, otbetus=None):
        if otbetus is None:
            otbetus = []
        self.otbetus = otbetus

    def letraszavak(self, fok) -> list:
        """a fok-hoz tartozo letraszavak"""
        return [sz for sz in self.otbetus if sz.letra(fok)]

    def letraszavak_kiir(self, fok) -> str:
        """a fok-hoz tartozo letraszavak kiir"""
        sz = ''
        for szo in self.letraszavak(fok):
            sz += str(szo) + ' '
        return sz

    def letra_kiir(self) -> str:
        """letraszavak kiir"""
        sz = ''
        fokok = [szo.szo[1:4] for szo in self.otbetus]
        for fok in sorted(list(set(fokok))):
            if fokok.count(fok) > 1:
                for szo in self.otbetus:
                    if szo.letra(fok):
                        sz += str(szo) + '\n'
                sz += '\n'
        return sz


# 1. feladat
szo = Szo(input("1. feladat: Adjál meg egy szót: "))
print(szo.vanmng_kiir())

# 2. feladat
fajl = Fajl('szoveg.txt')
print('2. feladat:\n', fajl.leghosszabb_szavak_kiir(), sep='')

# 3. feladat
print('3. feladat:\n', fajl.tobbmng_kiir(), sep='')

# 4. feladat
fajl = Fajl('szoveg.txt')
otbetus = fajl.beolvas()
otbetusok = Otbetusok(otbetus)
harombetus = input("4. feladat\nAdjál meg egy hárombetűs szót: ")
print(otbetusok.letraszavak_kiir(harombetus))

# 5. feladat
fajl = Fajl('letraOOP.txt')
fajl.kiir(otbetusok.letra_kiir())
print("5. feladat\nFájlbaírás kész.")
