def kiir(ssz, szoveg):
    print('{}. feladat - {}'.format(ssz, szoveg))

# -----------------------------------------------------------------------------
# 1. Kérjen be a felhasználótól egy szót, és döntse el, hogy tartalmaz-e
#    magánhangzót! Amennyiben tartalmaz, írja ki, hogy „Van benne
#    magánhangzó.”! Ha nincs, akkor írja ki, hogy „Nincs benne magánhangzó.”!
#    A begépelendő szóról feltételezheti, hogy csak az angol ábécé kisbetűit
#    tartalmazza. (Az angol ábécé magánhangzói: a, e, i, o, u.)
# -----------------------------------------------------------------------------
kiir(1, 'Magánhangzó')

def mh(szo):
    mh = set({'a', 'e', 'i', 'o', 'u'})  # halmaz
    db = 0
    for i in range(len(szo)):
        if szo[i] in mh:  # in - benne van-e a halmazban
            db += 1
    return db

szo = input('Kérek egy szót: ')
if mh(szo) > 0:
    print('Van benne magánhangzó')
else:
    print('Nincs benne magánhangzó')

# -----------------------------------------------------------------------------
# 2. Írja ki a képernyőre, hogy melyik a leghosszabb szó a szoveg.txt
#    állományban, és az hány karakterből áll! Ha több azonos leghosszabb
#    hosszúságú szó is van a szógyűjteményben, akkor azok közül elegendő
#    egyetlen szót kiírnia. A feladatot úgy oldja meg, hogy tetszőleges
#    hosszúságú szövegállomány esetén működjön, azaz a teljes szöveget
#    ne tárolja a memóriában!
# -----------------------------------------------------------------------------
kiir(2, 'Leghosszabb szó')
fbe = open('szoveg.txt', 'r')
maxh = ''
for szo in fbe:
    szo = szo.rstrip()  # szóvégén az entert "levágjuk"
    if len(szo) > len(maxh):
        maxh = szo
print('Leghosszabb szó: ', maxh)
fbe.close()
# -----------------------------------------------------------------------------
# 3. A magyar nyelv szavaiban általában kevesebb a magánhangzó, mint a
#    mássalhangzó. Határozza meg, hogy az állomány mely szavaiban van több
#    magánhangzó, mint egyéb karakter! Ezeket a szavakat írja ki a képernyőre
#    egy-egy szóközzel elválasztva! A szavak felsorolása után a mintának
#    megfelelően az alábbi adatokat adja meg:
#            • hány szót talált;
#            • hány szó van összesen az állományban;
#            • a talált szavak hány százalékát teszik ki az összes szónak!
#    A százalékot két tizedessel szerepeltesse! Például: 130/3000 : 4,33%
# -----------------------------------------------------------------------------
kiir(3, 'Több magánhangzós szavak')

fbe = open('szoveg.txt', 'r')
szdb = 0
db = 0
for szo in fbe:
    szo = szo.rstrip()
    hossz = len(szo)  # szó teljes hossza
    mhsz = mh(szo)  # magánhangzók száma
    if mhsz > hossz - mhsz:
        db += 1
        print(szo, end=' ')
    szdb += 1
print('\nTöbb magánhangzós szavak száma: ', db)
print('Szavak száma a forrásban: ', szdb)
print(f'A talált szavak aránya {db / szdb * 100:.2f}%')
fbe.close()

# -----------------------------------------------------------------------------
# 4. Hozzon létre egy tömb vagy lista adatszerkezetet, és ebbe gyűjtse ki
#    a fájlban található ötkarakteres szavakat! A szoveg.txt állomány
#    legfeljebb 1000 darab ötkarakteres szót tartalmaz. Kérjen be a
#    felhasználótól egy 3 karakteres szórészletet! Írja ki a képernyőre a
#    szólétra építés szabályai szerint hozzá tartozó ötkarakteres szavakat a
#    tárolt adathalmazból! A kiírásnál a szavakat egy-egy szóköz válassza el!
#    (Teszteléshez használhatja például az „isz” vagy „obo” szórészleteket,
#    mert ezekhez a megadott szövegállományban több létraszó is tartozik.)
# -----------------------------------------------------------------------------
kiir(4, 'Ötbetűs szavak')

fbe = open('szoveg.txt', 'r')
otosok = []
for szo in fbe:
    szo = szo.rstrip()
    if len(szo) == 5:
        otosok.append(szo)
fbe.close()

letra = input('Kérek egy háromkarakteres szöveget: ')
letra = letra[:3]  # mindenképpen 3 karakter legyen

for egy in otosok:
    if egy[1:4] == letra:  # a szó középső 3 karaktere index szerint
        print(egy, end=' ')
print()

# -----------------------------------------------------------------------------
# 5. Az eltárolt ötkarakteres szavakból csoportosítsa azokat a szavakat,
#    melyek ugyanannak a hárombetűs szórészletnek a létraszavai! Hozzon létre
#    egy letra.txt állományt, amelybe ezeket a szavakat írja az alábbiak
#    szerint:
#        • minden szó külön sorba kerüljön;
#        • csak olyan szó szerepeljen az állományban, aminek van legalább
#          egy párja, amivel egy létrát alkotnak (azaz első és utolsó
#          karakter nélkül megegyeznek);
#        • az egy létrához tartozó szavak közvetlenül egymás után
#          helyezkedjenek el;
#        • két létra szavai között egy üres elválasztó sor legyen!
# -----------------------------------------------------------------------------
kiir(5, 'Létraszavak')
N = len(otosok)

# rendezzük be a szavakat a középső három karakter szerint
# egyszerű cserés rendezés
for i in range(N - 1):
    for j in range(i + 1, N):
        if otosok[i][1:4] > otosok[j][1:4]:
            otosok[i], otosok[j] = otosok[j], otosok[i]

fki = open('letra.txt', 'w')

enter = False;
for i in range(1, N):
    if otosok[i][1:4] == otosok[i - 1][1:4]:
        print(otosok[i - 1], file=fki)
        enter = True;
    else:
        if enter:
            print(otosok[i - 1], file=fki)
            print('', file=fki)
        enter = False;  # ha megvolt az elválasztó sor, akkor kikapcsoljuk
fki.close()