1 from statistics import mean 2 #----------------------------------------------------------------------- 3 # 1. Olvassa be és tárolja el a tavirathu13.txt állomány adatait! 4 #----------------------------------------------------------------------- 5 print('1. feladat - adatok beolvasása') 6 7 adatok=[] # ez lesz a mátrixunk (listák listája) 8 # [település, idő_óra, idő_perc, szélirány és -erősség, hőmérséklet] 9 10 telepulesek=set() #az 5. feladat miatt kell ez (utólag tértem ide vissza én is) 11 12 fbe=open('tavirathu13.txt','r') 13 for sor in fbe: 14 sor=sor.strip().split() 15 temp=[] 16 for i,elem in enumerate(sor): 17 if i==1: #ezen az indexen van az idő óópp formátumban 18 temp.append(elem[0:2]) #óó rész 19 temp.append(elem[2:4]) #pp rész 20 else: 21 temp.append(elem) 22 23 telepulesek.add(temp[0] ) 24 adatok.append(temp) 25 fbe.close() 26 #csak úgy, a rend kedvéért: 27 telepulesek=sorted(list(telepulesek)) 28 29 #----------------------------------------------------------------------- 30 # 2. Kérje be a felhasználótól egy város kódját! Adja meg, hogy az 31 # adott városból mikor érkezett az utolsó mérési adat! A kiírásban 32 # az időpontot óó:pp formátumban jelenítse meg! 33 #----------------------------------------------------------------------- 34 print('\n2. feladat\n') 35 36 tkod=input('Adja meg egy település kódját! Település: ') 37 #település kódja - tkod 38 #Keressük meg ezt a településkódot az adatok végétől visszafelé! 39 #Lehet a klasszikus lineáris keresés a megoldás vagy egy for ciklus, 40 #és kiugrunk, ha megvan. Azt is figyelhetjük, hogy megvan-e egyáltalán. 41 42 i=-1 #utolsó elem indexe - ezen belül a 0 indexen lesznek a településkódok 43 while i>-len(adatok) and adatok[i][0]!=tkod: 44 i-=1 45 if i>-len(adatok): 46 #megvan a kód 47 ora=adatok[i][1] 48 perc=adatok[i][2] 49 print(f'Az utolsó mérési adat a megadott településről {ora}:{perc}-kor érkezett.') 50 else: 51 print('Ilyen kód nincs az adatok között!') 52 53 #----------------------------------------------------------------------- 54 # 3. Határozza meg, hogy a nap során mikor mérték a legalacsonyabb és 55 # a legmagasabb hőmérsékletet! Jelenítse meg a méréshez kapcsolódó 56 # település nevét, az időpontot és a hőmérsékletet! Amennyiben több 57 # legnagyobb vagy legkisebb érték van, akkor elég az egyiket kiírnia. 58 #----------------------------------------------------------------------- 59 print('\n3. feladat\n') 60 maxho=-1 #ennél biztosan lesz nagyobb (akkor kell, ha klasszikus megoldást adunk 61 minho=100 #ennél biztosan lesz kisebb 62 63 #szerintem itt sokféle út lehet, de most vagy 64 #klasszikus szélsőérték keresés vagy listába szedjük a hőmérsékleteket 65 #és abban alkalmazzuk a max és min függvényeket (most ez lesz) 66 homersekletek=[] 67 for adat in adatok: 68 homersekletek.append(adat[4]) 69 70 maxho=max(homersekletek) 71 maxi=homersekletek.index(maxho) #meghatározzuk, hogy milyen indexen van ez az adat 72 minho=min(homersekletek) 73 mini=homersekletek.index(minho) #meghatározzuk, hogy milyen indexen van ez az adat 74 75 #kiírandó adatsorok összeállítása 76 adatsor=adatok[mini][0]+' '+adatok[mini][1]+':'+adatok[mini][2]+' '+adatok[mini][4] 77 print('A legalacsonyabb hőmérséklet: %s fok' %adatsor) 78 adatsor=adatok[maxi][0]+' '+adatok[maxi][1]+':'+adatok[maxi][2]+' '+adatok[maxi][4] 79 print('A legmagasabb hőmérséklet: %s fok' %adatsor) 80 81 #----------------------------------------------------------------------- 82 # 4. Határozza meg, azokat a településeket és időpontokat, ahol és 83 # amikor a mérések idején szélcsend volt! (A szélcsendet a táviratban 84 # 00000 kóddal jelölik.) Ha nem volt ilyen, akkor 85 # a „Nem volt szélcsend a mérések idején.” szöveget írja ki! 86 # A kiírásnál a település kódját és az időpontot jelenítse meg. 87 #----------------------------------------------------------------------- 88 print('\n4. feladat\n') 89 90 #kiválogatás és megszámolás tétele 91 #számoljuk azt, hogy megfelelő adat volt, hogy a végén tudjunk reagálni, 92 #ha egy sem volt... 93 db=0 94 for adat in adatok: 95 if adat[3]=='00000': 96 db+=1 97 print(adat[0]+' '+adat[1]+':'+adat[2]) 98 99 if db==0: 100 print('Nem volt szélcsend a mérések idején!') 101 102 #----------------------------------------------------------------------- 103 # 5. Határozza meg a települések napi középhőmérsékleti adatát és a 104 # hőmérséklet-ingadozását! A kiírásnál a település kódja szerepeljen 105 # a sor elején a minta szerint! A kiírásnál csak a megoldott feladat- 106 # részre vonatkozó szöveget és értékeket írja ki! 107 # a. A középhőmérséklet azon hőmérsékleti adatok átlaga, amikor 108 # a méréshez tartozó óra értéke 1., 7., 13., 19. Ha egy telepü- 109 # lésen a felsorolt órák valamelyikén nem volt mérés, akkor a 110 # kiírásnál az „NA” szót jelenítse meg! Az adott órákhoz tartozó 111 # összes adat átlagaként határozza meg a középhőmérsékletet, 112 # azaz minden értéket azonos súllyal vegyen figyelembe! 113 # A középhőmérsékletet egészre kerekítve jelenítse meg! 114 # b. A hőmérséklet-ingadozás számításhoz az adott településen a 115 # napi legmagasabb és legalacsonyabb hőmérséklet különbségét 116 # kell kiszámítania! (Feltételezheti, hogy minden település 117 # esetén volt legalább két mérési adat.) 118 #----------------------------------------------------------------------- 119 print('\n5. feladat\n') 120 121 #óra értéke 1., 7., 13., 19. 122 orak={'01', '07', '13', '19'} 123 124 for t in telepulesek: #lásd 10. sor 125 atlag=[] #ebben gyűjtöm a fenti órákban történt méréseket (fokokat) 126 max_min=[] #ebben gyűjtöm az összes mérést (fokokat) 127 oke=set() #ebbe a halmazba dobálom az órákat, és ha nem 4 elemű, akkor nem oké 128 for adat in adatok: 129 if adat[0]==t: #megfelelő település 130 hom=int(adat[4]) #ne felejtsük egészre alakítani a fokot 131 max_min.append(hom) #válogatás nélkül mindent bele ebbe 132 if adat[1] in orak: #ha jó óra van, akkor 133 atlag.append(hom) 134 oke.add(adat[1]) 135 136 if len(oke)<4: #mivel 4 figyelembe veendő időpont van 137 s=' NA; ' 138 else: 139 #mean fv. vagyis átlagszámítás, lásd 1. sor fent 140 s=' Középhőmérséklet: '+str(round(mean(atlag)))+'; ' 141 142 hi='Hőmérséklet-ingadozás: '+str(max(max_min)-min(max_min)) 143 print(t+s+hi) 144 145 146 #---------------------------------------------------------------------------- 147 # 6. Hozzon létre településenként egy szöveges állományt, amely első 148 # sorában a település kódját tartalmazza! A további sorokban a mérési 149 # időpontok és a hozzá tartozó szélerősségek jelenjenek meg! A szél- 150 # erősséget a minta szerint a számértéknek megfelelő számú kettős- 151 # kereszttel (#) adja meg! A fájlban az időpontokat és a szélerősséget 152 # megjelenítő kettőskereszteket szóközzel válassza el egymástól! 153 # A fájl neve X.txt legyen, ahol az X helyére a település kódja kerüljön! 154 #---------------------------------------------------------------------------- 155 print('\n6. feladat - fájlok elkészítése') 156 157 #pl.: 158 #BC 159 #00:45 ### 160 161 for t in telepulesek: #egyik település a másik után 162 fki=open(t+'.txt','w') #megnyitjuk a település kódja szerinti fájlt 163 print(t,file=fki) #kiírjuk a fájl első sorába a településkódot 164 for adat in adatok: #egyik adat a másik után 165 if adat[0]==t: #ha megfelelő településről van szó, akkor 166 sor=adat[1]+':'+adat[2]+' ' #sorba bekerül óó:pp és egy szóköz 167 szelero=int(adat[3][-2:])*'#' #3-as indexen van a szélirány és erősség 168 #az erősség az utolsó két karaktere [-2:] 169 sor+=szelero #szöveg szorzása annyiszor ismétlést jelent 170 print(sor,file=fki) 171 fki.close() #ha végig értünk az adatokon, akkor fájl bezár és 172 #jöhet a következő település 173 174 175