1 def kiir(ssz, szoveg): 2 print('{}. feladat - {}'.format(ssz, szoveg)) 3 4 # ----------------------------------------------------------------------------- 5 # 1. Kérjen be a felhasználótól egy szót, és döntse el, hogy tartalmaz-e 6 # magánhangzót! Amennyiben tartalmaz, írja ki, hogy „Van benne 7 # magánhangzó.”! Ha nincs, akkor írja ki, hogy „Nincs benne magánhangzó.”! 8 # A begépelendő szóról feltételezheti, hogy csak az angol ábécé kisbetűit 9 # tartalmazza. (Az angol ábécé magánhangzói: a, e, i, o, u.) 10 # ----------------------------------------------------------------------------- 11 kiir(1, 'Magánhangzó') 12 13 def mh(szo): 14 mh = set({'a', 'e', 'i', 'o', 'u'}) # halmaz 15 db = 0 16 for i in range(len(szo)): 17 if szo[i] in mh: # in - benne van-e a halmazban 18 db += 1 19 return db 20 21 szo = input('Kérek egy szót: ') 22 if mh(szo) > 0: 23 print('Van benne magánhangzó') 24 else: 25 print('Nincs benne magánhangzó') 26 27 # ----------------------------------------------------------------------------- 28 # 2. Írja ki a képernyőre, hogy melyik a leghosszabb szó a szoveg.txt 29 # állományban, és az hány karakterből áll! Ha több azonos leghosszabb 30 # hosszúságú szó is van a szógyűjteményben, akkor azok közül elegendő 31 # egyetlen szót kiírnia. A feladatot úgy oldja meg, hogy tetszőleges 32 # hosszúságú szövegállomány esetén működjön, azaz a teljes szöveget 33 # ne tárolja a memóriában! 34 # ----------------------------------------------------------------------------- 35 kiir(2, 'Leghosszabb szó') 36 fbe = open('szoveg.txt', 'r') 37 maxh = '' 38 for szo in fbe: 39 szo = szo.rstrip() # szóvégén az entert "levágjuk" 40 if len(szo) > len(maxh): 41 maxh = szo 42 print('Leghosszabb szó: ', maxh) 43 fbe.close() 44 # ----------------------------------------------------------------------------- 45 # 3. A magyar nyelv szavaiban általában kevesebb a magánhangzó, mint a 46 # mássalhangzó. Határozza meg, hogy az állomány mely szavaiban van több 47 # magánhangzó, mint egyéb karakter! Ezeket a szavakat írja ki a képernyőre 48 # egy-egy szóközzel elválasztva! A szavak felsorolása után a mintának 49 # megfelelően az alábbi adatokat adja meg: 50 # • hány szót talált; 51 # • hány szó van összesen az állományban; 52 # • a talált szavak hány százalékát teszik ki az összes szónak! 53 # A százalékot két tizedessel szerepeltesse! Például: 130/3000 : 4,33% 54 # ----------------------------------------------------------------------------- 55 kiir(3, 'Több magánhangzós szavak') 56 57 fbe = open('szoveg.txt', 'r') 58 szdb = 0 59 db = 0 60 for szo in fbe: 61 szo = szo.rstrip() 62 hossz = len(szo) # szó teljes hossza 63 mhsz = mh(szo) # magánhangzók száma 64 if mhsz > hossz - mhsz: 65 db += 1 66 print(szo, end=' ') 67 szdb += 1 68 print('\nTöbb magánhangzós szavak száma: ', db) 69 print('Szavak száma a forrásban: ', szdb) 70 print(f'A talált szavak aránya {db / szdb * 100:.2f}%') 71 fbe.close() 72 73 # ----------------------------------------------------------------------------- 74 # 4. Hozzon létre egy tömb vagy lista adatszerkezetet, és ebbe gyűjtse ki 75 # a fájlban található ötkarakteres szavakat! A szoveg.txt állomány 76 # legfeljebb 1000 darab ötkarakteres szót tartalmaz. Kérjen be a 77 # felhasználótól egy 3 karakteres szórészletet! Írja ki a képernyőre a 78 # szólétra építés szabályai szerint hozzá tartozó ötkarakteres szavakat a 79 # tárolt adathalmazból! A kiírásnál a szavakat egy-egy szóköz válassza el! 80 # (Teszteléshez használhatja például az „isz” vagy „obo” szórészleteket, 81 # mert ezekhez a megadott szövegállományban több létraszó is tartozik.) 82 # ----------------------------------------------------------------------------- 83 kiir(4, 'Ötbetűs szavak') 84 85 fbe = open('szoveg.txt', 'r') 86 otosok = [] 87 for szo in fbe: 88 szo = szo.rstrip() 89 if len(szo) == 5: 90 otosok.append(szo) 91 fbe.close() 92 93 letra = input('Kérek egy háromkarakteres szöveget: ') 94 letra = letra[:3] # mindenképpen 3 karakter legyen 95 96 for egy in otosok: 97 if egy[1:4] == letra: # a szó középső 3 karaktere index szerint 98 print(egy, end=' ') 99 print() 100 101 # ----------------------------------------------------------------------------- 102 # 5. Az eltárolt ötkarakteres szavakból csoportosítsa azokat a szavakat, 103 # melyek ugyanannak a hárombetűs szórészletnek a létraszavai! Hozzon létre 104 # egy letra.txt állományt, amelybe ezeket a szavakat írja az alábbiak 105 # szerint: 106 # • minden szó külön sorba kerüljön; 107 # • csak olyan szó szerepeljen az állományban, aminek van legalább 108 # egy párja, amivel egy létrát alkotnak (azaz első és utolsó 109 # karakter nélkül megegyeznek); 110 # • az egy létrához tartozó szavak közvetlenül egymás után 111 # helyezkedjenek el; 112 # • két létra szavai között egy üres elválasztó sor legyen! 113 # ----------------------------------------------------------------------------- 114 kiir(5, 'Létraszavak') 115 N = len(otosok) 116 117 # rendezzük be a szavakat a középső három karakter szerint 118 # egyszerű cserés rendezés 119 for i in range(N - 1): 120 for j in range(i + 1, N): 121 if otosok[i][1:4] > otosok[j][1:4]: 122 otosok[i], otosok[j] = otosok[j], otosok[i] 123 124 fki = open('letra.txt', 'w') 125 126 enter = False; 127 for i in range(1, N): 128 if otosok[i][1:4] == otosok[i - 1][1:4]: 129 print(otosok[i - 1], file=fki) 130 enter = True; 131 else: 132 if enter: 133 print(otosok[i - 1], file=fki) 134 print('', file=fki) 135 enter = False; # ha megvolt az elválasztó sor, akkor kikapcsoljuk 136 fki.close()