1 def kiir(ssz, szoveg): 2 print('{}. feladat - {}'.format(ssz, szoveg)) 3 4 5 # -------------------------------------------------------------------- 6 # 1. Olvassa be és tárolja a veetel.txt fájl tartalmát! 7 # -------------------------------------------------------------------- 8 kiir(1, 'Fájl beolvasása') 9 10 # napok: 1-11 11 # rádiósok: 1-20 12 # uzenetek: 90 karakter hosszú, # nem egyértelmű jel, $ üzenet már nincs 13 # 1/2 kezdet pl. 1 felnőtt és 2 kölyök példányt figyeltek meg 14 15 fv = open('veetel.txt', 'r') 16 adatok = [] # mátrix: [nap, rádiós, uezenet] "kis" lista az eleme 17 N = 1 # páros vagy páratlan sor jön-e 18 db = 0 # mátrix elemeinek száma 19 akt_sor = [] # "kis" lista készítéséhez: [nap,rádiós,üzenet] 20 for adat in fv: 21 if N % 2 == 1: # páratlan sor 22 # nap és rádiós jön 23 akt_sor = adat.strip().split() # "szétkapjuk" listába 24 akt_sor = [int(akt_sor[0]), int(akt_sor[1])] 25 else: 26 db += 1 # páros sor: azaz üzenet jön, itt növelem a nagy mátrix elemszámát 27 akt_sor.append(adat.rstrip()) # rstrip() - jobbról "lecsapjuk" a '\n'-t! 28 adatok.append(akt_sor) # "kis" lista megy a mátrixba 29 akt_sor = [] # ürítjük a változót a következő lépéshez 30 N += 1 # N-t is növeljük, de ezt lehetne más megoldással is... 31 32 fv.close() 33 34 # -------------------------------------------------------------------- 35 # 2. Írja a képernyőre, hogy melyik rádióamatőr rögzítette az 36 # állományban szereplő első és melyik az utolsó üzenetet! 37 # -------------------------------------------------------------------- 38 kiir(2, 'Első és utolsó üzenet a forrásállományban') 39 40 print('Az első üzenet rögzítője: ', adatok[0][1]) 41 print('Az utolsó üzenet rögzítője: ', adatok[db - 1][1]) 42 43 # -------------------------------------------------------------------- 44 # 3. Adja meg az összes olyan feljegyzés napját és a rádióamatőr 45 # sorszámát, amelynek szövegében a „farkas” karaktersorozat 46 # szerepel! 47 # -------------------------------------------------------------------- 48 kiir(3, '"farkas" a szövegben') 49 50 s = 'farkas' 51 for adat in adatok: 52 if adat[2].find(s) > -1: 53 print('{}. nap {}. rádióamatőr'.format(adat[0], adat[1])) 54 55 # -------------------------------------------------------------------- 56 # 4. Készítsen statisztikát, amely megadja, hogy melyik napon hány 57 # rádióamatőr készített feljegyzést. Azok a napok 0 értékkel 58 # szerepeljenek, amikor nem született feljegyzés! Az eredmény a 59 # képernyőn jelenjen meg a napok sorszáma szerint növekvően! 60 # A megjelenítést a feladat végén látható minta szerint alakítsa ki! 61 # -------------------------------------------------------------------- 62 kiir(4, 'Statisztika') 63 napok = [0] * 11 # 11 nap lehet, ebben összesítjük a napi üzenetek számát 64 65 for adat in adatok: 66 napok[adat[0] - 1] += 1 # indexelés az adat[0]-val, az az a nappal 67 # a -1 a szokásos okok miatt kell (indexek 0-tól...) 68 69 for nap in range(11): 70 print('{}. nap: {} rádióamatőr'.format(nap + 1, napok[nap])) 71 72 # -------------------------------------------------------------------- 73 # 5. A rögzített üzenetek alapján kísérelje meg helyreállítani az 74 # expedíció által küldött üzenetet! Készítse el az adaas.txt fájlt, 75 # amely napok szerinti sorrendben tartalmazza a küldött üzeneteket! 76 # Ha egy időpontban senkinél nem volt vétel, akkor azon a ponton 77 # a # jel szerepeljen! (Feltételezheti, hogy az azonos üzenethez 78 # tartozó feljegyzések között nincs ellentmondás.) 79 # -------------------------------------------------------------------- 80 kiir(5, 'Üzenetek helyreállítása') 81 82 fv = open('adaas.txt', 'w') 83 alap = ['#'] * 90 # 90 # jelből álló lista 84 alap = ''.join(alap) # átlakítva szöveggé: '######....' (90 karakter hosszú) 85 86 uj = [alap] * 11 # a fentiekből 11 helyreállított üzenet lesz 87 88 for adat in adatok: 89 nap = adat[0] - 1 # a napot használom az uj lista indexeléséhez 90 szoveg = list(adat[2]) # az uzenet listává alakítása, hogy betűnként kezelhessük 91 uj2 = list(uj[nap]) # mint az előző sor 92 for i in range(len(szoveg)): 93 if szoveg[i] != '#': # ha az uzenetben nem # jel van, akkor 94 uj2[i] = szoveg[i] # az mehet az ujba 95 uj[nap] = ''.join(uj2) # szöveggé alakítom a listát 96 97 for i in range(11): 98 print(str(i + 1) + '. nap: ', uj[i]) 99 print(uj[i], file=fv) 100 101 fv.close() 102 103 # -------------------------------------------------------------------- 104 # 6. Készítsen függvényt szame néven az alábbi algoritmus alapján! 105 # A függvény egy karaktersorozathoz hozzárendeli az igaz vagy a 106 # hamis értéket. A függvény elkészítésekor az algoritmusban 107 # megadott változóneveket használja! Az elkészített függvényt 108 # a következő feladat megoldásánál felhasználhatja. 109 # 110 # Függvény szame(szo:karaktersorozat): logikai 111 # valasz:=igaz 112 # Ciklus i:=1-től hossz(szo)-ig 113 # ha szo[i]<'0' vagy szo[i]>'9' akkor valasz:=hamis 114 # Ciklus vége 115 # szame:=valasz 116 # Függvény vége 117 # -------------------------------------------------------------------- 118 kiir(6, 'Függvény készítése...') 119 120 121 def szame(szo): # a függvény "egy az egyben" a mondatszerű leírás alapján készült 122 valasz = True 123 for i in range(len(szo)): 124 if szo[i] < '0' or szo[i] > '9': 125 valasz = False 126 return valasz 127 128 129 # -------------------------------------------------------------------- 130 # 7. Olvassa be egy nap és egy rádióamatőr sorszámát, majd írja a 131 # képernyőre a megfigyelt egyedek számát (a kifejlett és kölyök 132 # egyedek számának összegét)! Ha nem volt ilyen feljegyzés, 133 # a „Nincs ilyen feljegyzés” szöveget jelenítse meg! Ha nem volt 134 # megfigyelt egyed vagy számuk nem állapítható meg, a 135 # „Nincs információ” szöveget jelenítse meg! Amennyiben egy 136 # számot közvetlenül # jel követ, akkor a számot tekintse nem 137 # megállapíthatónak! 138 # -------------------------------------------------------------------- 139 nap = int(input('Adja meg a nap sorszámát! ')) 140 radios = int(input('Adja meg a rádióamatőr sorszámát! ')) 141 142 # keressük meg az adott napot és rádióst 143 i = 0 144 while i < db and not (adatok[i][0] == nap and adatok[i][1] == radios): 145 i += 1 146 147 if i < db: # ha megtaláltuk az adott napot és rádióst, akkor 148 p = adatok[i][2].find('/') # az üzenet elején / jelet keresünk 149 felnott = adatok[i][2][0:p] # / jel előtt a felnőtt egyed száma LEHET! 150 p2 = adatok[i][2].find(' ') # / jel után, szóközig a kölykök száma LEHET! 151 kolyok = adatok[i][2][p + 1:p2] 152 if szame(felnott) and szame(kolyok): # de tényleg számokról van szó? 153 print('A megfigyelt egyedek száma: ', int(felnott) + int(kolyok)) 154 else: 155 print('Nincs információ!') 156 else: 157 print('Nincs ilyen feljegyzés!')