Több adattípus
Estimated reading: 3 minutes
0 views
Fájlfeldolgozásos feladat
Első lépés
Az alloviz osztály definiálása és inicializálása.
class alloviz:
def __init__(self, sor):
id, nev, tipus, terulet, vizgyujto = sor.split(';')
self.id = int(id)
self.nev = nev
self.tipus = tipus if tipus!='NULL' else ''
self.terulet = float(terulet.replace(',', '.')) if terulet!='NULL' else 0
self.vizgyujto = int(vizgyujto) if vizgyujto!='NULL' else 0
- Az osztályban definiáljuk az
__init__nevű metódust, amely az objektum inicializálásáért felelős. - A metódus paraméterként kapja meg a
sorértéket, amely a feldolgozandó adatokat tartalmazza. - A
sorértéket pontosvesszővel elválasztott adatokra bontjuk asplit(';')metódus segítségével. - Az adatokat külön változóknak rendeljük, majd ezeket az objektum attribútumainak állítjuk be.
- Az
idattribútumot egész számként inicializáljuk azint(id)kifejezéssel. - A
teruletattribútumot lebegőpontos számként inicializáljuk afloat(terulet.replace(',', '.'))kifejezéssel, ahol a,karaktereket a.karakterre cseréljük. - A
vizgyujtoattribútumot egész számként inicializáljuk azint(vizgyujto)kifejezéssel. - Ha a
tipusvagyteruletértéke “NULL”, akkor azokat üres stringgel ('') vagy 0-val inicializáljuk.
Második lépés
Az adatok beolvasása és feldolgozása a fájlból.
l = []
with open ('alloviz.txt', 'r', encoding='utf-8') as f:
for sor in f.read().splitlines()[1:]:
l.append(alloviz(sor))
- Létrehozunk egy üres listát
lnéven, amely azallovizobjektumokat fogja tárolni. - Megnyitjuk a
alloviz.txtfájlt olvasásra, és azfnevű változóhoz rendeljük. - A fájl tartalmát beolvassuk, majd soronként feldolgozzuk.
- A sorokat a
splitlines()metódussal szétválasztjuk, majd a lista második elemtől (az első sort kihagyva) végigmegyünk aforciklussal. - Minden sorhoz létrehozunk egy
allovizobjektumot, amelyet a sorral példányosítunk, majd hozzáadjuk allistához.
Harmadik lépés
Az adatok elemzése és eredmények kiírása.
print('3.1 feladat:')
print(f'Az adatbázisban {len(l)} tó adatai szerepelnek.')
print('3.2 feladat:')
osszeg = 0
db = 0
for e in l:
if e.terulet != 0:
osszeg += e.terulet
db += 1
print(f'Az állóvizek területének átlaga {osszeg/db:.2f}')
- Kiírjuk a
llista elemeinek számát alen(l)kifejezéssel. - Ezután inicializálunk két változót:
osszegésdb0 értékkel. - Végigmegyünk a
llista elemein aforciklus segítségével.
Teljes kód
class alloviz:
def __init__(self, sor):
id, nev, tipus, terulet, vizgyujto = sor.split(';')
self.id = int(id)
self.nev = nev
self.tipus = tipus if tipus!='NULL' else ''
self.terulet = float(terulet.replace(',', '.')) if terulet!='NULL' else 0
self.vizgyujto = int(vizgyujto) if vizgyujto!='NULL' else 0
l = []
with open ('alloviz.txt', 'r', encoding='utf-8') as f:
for sor in f.read().splitlines()[1:]:
l.append(alloviz(sor))
print('3.1 feladat:')
print(f'Az adatbázisban {len(l)} tó adatai szerepelnek.')
print('3.2 feladat:')
osszeg = 0
db = 0
for e in l:
if e.terulet != 0:
osszeg += e.terulet
db += 1
print(f'Az állóvizek területének átlaga {osszeg/db:.2f}')
3.1 feladat:
Az adatbázisban 245 tó adatai szerepelnek.
3.2 feladat:
Az állóvizek területének átlaga 5.46