Ahhoz, hogy mások kérdéseit és válaszait megtekinthesd, nem kell beregisztrálnod, azonban saját kérdés kiírásához ez szükséges!
Python emelt érettségi feladat házinak?!
Törölt
kérdése
140
# Építményadó - 2022. tavasz
Egy Balaton-parti önkormányzat építményadót vezet be. Az adó mértéke a telken lévő
építmény alapterületétől és a teleknek a Balatontól mért távolságától függ.
A telkeket a Balatonparttól mért távolságtól függően három sávba sorolták be. Az *A* sávba
azok a telkek kerültek, amelyek 300 méternél közelebb vannak a tóhoz a *B* sáv az előzőn túl
600 méter távolságig terjed, a többi telek a *C* sávba tartozik. Az építmény után
négyzetméterenként fizetendő összeg sávonként eltérő, azonban, ha az így kiszámított összeg
nem éri el a 10.000 Ft-ot, akkor az adott építmény után nem kell adót fizetni.
A testületi döntést az Adó Ügyosztály egy mintával készítette elő, amely csupán néhány utca
adatait tartalmazza. Ezek az adatok az [utca.txt](/source/utca.txt) fájlban vannak. A fájl első sorában a három
adósávhoz tartozó négyzetméterenként fizetendő összeg található *A, B, C* sorrendben, egy-egy
szóközzel elválasztva:
```
800 600 100
…
33366 Aradi 8A C 180
22510 Aradi 8B C 137
90561 Aradi 10 C 168
…
```
A többi sorban egy-egy építmény adatai szerepelnek egy-egy szóközzel elválasztva. Az első
a telek tulajdonosának ötjegyű adószáma; egy tulajdonosnak több telke is lehet. A második adat
az utca neve, amely nem tartalmazhat szóközt. A harmadik adat a házszám, majd az adósáv
megnevezése, végül az építmény alapterülete következik. A minta harmadik sorában például
azt látjuk, hogy a *33366* adószámú tulajdonos telke az *Aradi* utca 8A-ban található, és a C sávba
eső telken álló építmény alapterülete *180* m2.
A fájl legfeljebb 1000 telek adatait tartalmazza. A feladat megoldása során kihasználhatja,
hogy a fájlban az adatok utca, azon belül pedig házszám szerinti sorrendben következnek.
Készítsen programot, amely az [utca.txt](/source/utca.txt) állomány adatait felhasználva az alábbi
kérdésekre válaszol! A program forráskódját mentse *epitmenyado* néven! (A program
megírásakor a felhasználó által megadott adatok helyességét, érvényességét nem kell
ellenőriznie, és feltételezheti, hogy a rendelkezésre álló adatok a leírtaknak megfelelnek.)
A képernyőre írást igénylő részfeladatok esetén – a mintához tartalmában hasonlóan – írja
ki a képernyőre a feladat sorszámát (például: `3. feladat`), és utaljon a kiírt tartalomra is!
Ha a felhasználótól kér be adatot, jelenítse meg a képernyőn, hogy milyen értéket vár! Mindkét
esetben az ékezetmentes kiírás is elfogadott.
1. Olvassa be és tárolja el az [utca.txt](/source/utca.txt) állományban talált adatokat, és annak
felhasználásával oldja meg a következő feladatokat!
2. Hány telek adatai találhatók az állományban? Az eredményt írassa ki a mintának
megfelelően a képernyőre!
3. Kérje be egy tulajdonos adószámát, és írassa ki a mintához hasonlóan, hogy melyik utcában,
milyen házszám alatt van építménye! Ha a megadott azonosító nem szerepel az
adatállományban, akkor írassa ki a `„Nem szerepel az adatállományban.”` hibaüzenetet!
4. Készítsen függvényt `ado` néven, amely meghatározza egy adott építmény után fizetendő
adót! A függvény paraméterlistájában szerepeljen az adósáv és az alapterület, visszaadott
értéke pedig legyen a fizetendő adó! A következő feladatokban ezt a függvényt is
felhasználhatja.
5. Határozza meg, hogy hány építmény esik az egyes adósávokba, és mennyi az adó összege
adósávonként! Az eredményt a mintának megfelelően írassa ki a képernyőre!
6. Bár az utcák többé-kevésbé párhuzamosak a tó partjával, az egyes porták távolsága a parttól
az utcában nem feltétlenül ugyanannyi. Emiatt néhány utcában – az ottani tulajdonosok
felháborodására – egyes telkek eltérő sávba esnek. Listázza ki a képernyőre, hogy melyek
azok az utcák, ahol a telkek sávokba sorolását emiatt felül kell vizsgálni! Feltételezheti,
hogy minden utcában van legalább két telek.
7. Határozza meg a fizetendő adót tulajdonosonként! A tulajdonos adószámát és a fizetendő
összeget írassa ki a mintának megfelelően a *fizetendo.txt* állományba! A fájlban
minden tulajdonos adatai új sorban szerepeljenek, a tulajdonos adószámát egy szóközzel
elválasztva kövesse az általa fizetendő adó teljes összege.
## Példa a szöveges kimenetek kialakításához:
```
2. feladat. A mintában 543 telek szerepel.
3. feladat. Egy tulajdonos adószáma: 68396
Harmat utca 22
Szepesi utca 17
5. feladat
A sávba 165 telek esik, az adó 20805600 Ft.
B sávba 144 telek esik, az adó 13107000 Ft.
C sávba 234 telek esik, az adó 3479600 Ft.
6. feladat. A több sávba sorolt utcák:
Besztercei
Gyurgyalag
Icce
Kurta
Rezeda
Szepesi
```
## Példa a *fizetendo.txt* fájl kialakításához:
(A fájl a megadott forrásállomány esetén 519 adatsort fog tartalmazni.)
```
38522 18000
86379 0
79906 12300
…
73850 204000
74143 100000
59801 563200
73011 70400
…
```
Jelenleg 1 felhasználó nézi ezt a kérdést.
0
Középiskola / Informatika
Válaszok
4
Törölt
válasza
800 600 100
…
33366 Aradi 8A C 180
22510 Aradi 8B C 137
90561 Aradi 10 C 168
…
0
Még nem érkezett komment!
Törölt
válasza
2. feladat. A mintában 543 telek szerepel.
3. feladat. Egy tulajdonos adószáma: 68396
Harmat utca 22
Szepesi utca 17
5. feladat
A sávba 165 telek esik, az adó 20805600 Ft.
B sávba 144 telek esik, az adó 13107000 Ft.
C sávba 234 telek esik, az adó 3479600 Ft.
6. feladat. A több sávba sorolt utcák:
Besztercei
Gyurgyalag
Icce
Kurta
Rezeda
Szepesi
Miii? Manapság lehet Pythonból érettségizni? Eh, el vannak kényeztetve ezek a mai gyerekek.
# 1.
with open('utca.txt', 'r') as allomany:
adosav_terkep = {chr(sor + 65): int(szam) for sor, szam in enumerate(allomany.readline().split())}
telek_lista = [sor.strip().split() for sor in allomany.readlines()]
# 2.
print('2. feladat. A mintában', len(telek_lista), 'telek szerepel.')
# 3.
adoszam = input('3. feladat. Egy tulajdonos adószáma: ')
talalat = False
for telek in telek_lista:
if telek[0] == adoszam:
print(telek[1], 'utca', telek[2])
talalat = True
if not talalat:
print('Nem szerepel az adatállományban.')
statisztika = {adosav: [0, 0] for adosav in adosav_terkep}
for telek in telek_lista:
statisztika[telek[3]][0] += 1
statisztika[telek[3]][1] += ado(telek[3], int(telek[4]))
for adosav, adat in statisztika.items():
print(adosav, 'sávba', adat[0], 'telek esik, az adó', adat[1], 'Ft.')
# 6.
print('6. feladat. A több sávba sorolt utcák:')
tobbsavos = {}
for telek in telek_lista:
if telek[1] not in tobbsavos:
tobbsavos[telek[1]] = []
if telek[3] not in tobbsavos[telek[1]]:
tobbsavos[telek[1]].append(telek[3])
for utca, sav_lista in tobbsavos.items():
if len(sav_lista) > 1:
print(utca)
# 7.
fizetendo = {}
for telek in telek_lista:
if telek[0] not in fizetendo:
fizetendo[telek[0]] = 0
fizetendo[telek[0]] += ado(telek[3], int(telek[4]))
with open('fizetendo.txt', 'w') as allomany:
for adoszam, osszeg in fizetendo.items():
allomany.write(adoszam + ' ' + str(osszeg) + '\n')