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öveget, majd határozza meg, hogy 6 # hány különböző karakter található a szövegben! A darabszámot és a 7 # karaktereket írja ki a képernyőre! 8 # ------------------------------------------------------------------------------ 9 kiir(1, 'Karakterszámlálás') 10 11 def kul_kar(sz): 12 volt_mar = set() # sz szó betűinek halmaza lesz 13 i = 0 14 while i < len(sz): # végignézzük a szó betűit 15 if sz[i] not in volt_mar: # ha adott betű még nem eleme a halmaznak, 16 volt_mar.add(sz[i]) # akkor hozzáadjuk 17 i += 1 18 return len(volt_mar) # a halmaz elemszáma a különböző betűk száma 19 20 sz = input('Kérek egy szót: ') 21 print('Különböző karakterek száma: ', kul_kar(sz)) 22 23 # ------------------------------------------------------------------------------ 24 # 2. Olvassa be a szotar.txt állományból a szavakat, és a következő feladatok 25 # megoldása során ezekkel dolgozzon! Amennyiben nem tudja beolvasni az 26 # állományból a szavakat, akkor az első 10 szóval dolgozzon! 27 # ------------------------------------------------------------------------------ 28 kiir(2, 'Fájl beolvasása...') 29 30 fbe = open('szotar.txt', 'r') 31 32 szavak = [] 33 for szo in fbe: 34 szo = szo.rstrip() 35 szavak.append(szo) 36 37 fbe.close() 38 39 # ------------------------------------------------------------------------------ 40 # 3. Az állományból beolvasott szavakat alakítsa át úgy, hogy minden szó 41 # karaktereit egyenként tegye ábécérendbe! Az így létrehozott szavakat 42 # írja ki az abc.txt állományba az eredeti állománnyal egyező sorrendben! 43 # ------------------------------------------------------------------------------ 44 kiir(3, 'Szavak rendezése, fájlírás (abc.txt)') 45 46 47 def szorendezo(sz): 48 return ''.join(sorted(sz)) 49 50 # sorted hatására rendezett listává esik szét a szó 51 # join hatására újra szöveggé áll össze 52 # pl.: sz="bla" --> sorted: ['a','b','l'] 53 # join: 'abl' 54 55 fki = open('abc.txt', 'w') 56 57 for szo in szavak: 58 print(szorendezo(szo), file=fki) 59 60 fki.close() 61 62 # ------------------------------------------------------------------------------ 63 # 4. Kérjen be a felhasználótól két szót, és döntse el, hogy a két szó 64 # anagramma-e! Ha azok voltak, írja ki a képernyőre az „Anagramma” szót, 65 # ha nem, akkor pedig a „Nem anagramma” szöveget! 66 # ------------------------------------------------------------------------------ 67 kiir(4, 'Két szó anagramma-e?') 68 69 70 def anagramma(sz1, sz2): 71 sz1 = szorendezo(sz1) 72 sz2 = szorendezo(sz2) 73 return sz1 == sz2 74 75 sz1 = input('Kérem az első szót: ') 76 sz2 = input('Kérem a második szót: ') 77 78 if anagramma(sz1, sz2): 79 print('Anagramma') 80 else: 81 print('Nem anagramma') 82 83 # ------------------------------------------------------------------------------ 84 # 5. Kérjen be a felhasználótól egy szót! A szotar.txt állomány szavaiból 85 # keresse meg a szó anagrammáit (a szót önmagát is annak tekintve)! Ha van 86 # találat, azokat egymás alá írja ki a képernyőre, ha nem volt találat, 87 # akkor írja ki a „Nincs a szótárban anagramma” szöveget! 88 # ------------------------------------------------------------------------------ 89 kiir(5, 'Anagrammák keresése adott szóhoz') 90 91 sz = input('Kérek egy szót: ') 92 db = 0 93 for szo in szavak: 94 if anagramma(sz, szo): 95 print(szo) 96 db += 1 97 if db == 0: 98 print('Nincs a szótárban anagramma!') 99 100 # ------------------------------------------------------------------------------ 101 # 6. Határozza meg, hogy a szotar.txt állományban melyik a leghosszabb 102 # szó! Ha több, ugyanannyi karakterből álló leghosszabb szó volt, akkor az 103 # ugyanazokat a karaktereket tartalmazó szavakat (amelyek egymás 104 # anagrammái) közvetlenül egymás alá írja ki! A feltételnek megfelelő 105 # összes szó pontosan egyszer szerepeljen a kiírásban! 106 # ------------------------------------------------------------------------------ 107 kiir(6, 'Leghosszabb szavak, anagrammák') 108 109 # rendezés hossz szerint, azon belül abc sorrendbe 110 111 for i in range(0, len(szavak) - 1): 112 for j in range(i + 1, len(szavak)): 113 if len(szavak[i]) < len(szavak[j]) or len(szavak[i]) == len(szavak[j]) and szavak[i] > szavak[j]: 114 szavak[i], szavak[j] = szavak[j], szavak[i] 115 116 maxh = len(szavak[0]) 117 print('Leghosszabb szó: ', szavak[0], end=' ') 118 i = 1 119 while len(szavak[i]) == maxh: 120 while anagramma(szavak[i - 1], szavak[i]): 121 print(szavak[i]) 122 i += 1 123 i += 1 124 125 # ------------------------------------------------------------------------------ 126 # 7. Rendezze a szotar.txt állományban lévő szavakat a karakterek száma szerint 127 # növekvő sorrendbe! Az egyforma hosszúságú és ugyanazokat a karaktereket 128 # tartalmazó szavak (amelyek egymás anagrammái) szóközzel elválasztva 129 # ugyanabba a sorba kerüljenek! Az egyforma hosszúságú, de nem ugyanazokat 130 # a karaktereket tartalmazó szavak külön sorba kerüljenek! A különböző 131 # hosszúságú szavakat egy üres sorral különítse el egymástól! Az így 132 # rendezett szavakat írja ki a rendezve.txt állományba! 133 # ------------------------------------------------------------------------------ 134 kiir(7, 'Rendezés, anagammák, fájlírás') 135 136 fki = open('rendezve.txt', 'w') 137 138 szavak2 = [] # másolat: anagrammavizsgálathoz 139 140 for i in range(len(szavak)): 141 szavak2.append(szorendezo(szavak[i])) 142 143 # rendezzük a másolatot szavak hossza szerint növekvő sorrendbe, 144 # és azon belül abc-rendbe egyszerű cserés rendezéssel 145 for i in range(0, len(szavak2) - 1): 146 for j in range(i + 1, len(szavak2)): 147 if len(szavak2[i]) > len(szavak2[j]) or len(szavak2[i]) == len(szavak2[j]) and szavak2[i] > szavak2[j]: 148 szavak2[i], szavak2[j] = szavak2[j], szavak2[i] 149 # a szavak eredeti állapotát együtt rendezzük az "anagrammás" másolattal 150 szavak[i], szavak[j] = szavak[j], szavak[i] 151 152 # fájlbaírás 153 N = len(szavak) 154 for i in range(N): 155 if i < N - 1 and len(szavak[i]) == len(szavak[i + 1]): # ha azonos a szavak hossza 156 if szavak2[i] == szavak2[i + 1]: # és anagrammák is, akkor egy sorba mehetnek 157 print(szavak[i], end=' ', file=fki) 158 else: 159 print(szavak[i], file=fki) 160 else: 161 if i == N - 1: # utolsó szó kiírása 162 print(szavak[i], file=fki) 163 else: 164 print(szavak[i], file=fki) # az i+1. már különböző hosszú, 165 print('', file=fki) # így az i. írása után üres sort is írunk 166 167 fki.close()