1 #----------------------------------------------------------------------------------------2 # 1. Olvassa be a telkek.txt állományban található adatokat, s annak felhasználásával3 # oldja meg a következő feladatokat!4 #----------------------------------------------------------------------------------------5 def F1():6 fbe=open('telkek.txt','r')7 8 N=int(fbe.readline().strip()) # első sor a telkek száma, külön olvassuk be9 10 for sor in fbe:11 sor=sor.strip().split()12 sor=list(map(int,sor)) # minden eleme int típusú lesz13 telkek[sor[0]]=sor[1:] # a sor, mint lista 0. eleme a szótár kulcsa,14 # a "maradék" lista a kulcshoz tartozó érték (bejegyzés)15 fbe.close()16 #----------------------------------------------------------------------------------------17 # 2. Hány métert kell annak gyalogolnia, aki körbe akarja járni a két utcát?18 # A kiszámított távolságot írassa ki a képernyőre!19 #----------------------------------------------------------------------------------------20 def F2():21 print('2. feladat')22 global utcahossz # 7. feladathoz felhasználjuk23 utcahossz=0 # méterben a Gazdagsor utca hossza - itt páratlan házszámok vannak24 for kulcs in telkek:25 if kulcs%2==1: # Gazdagsoron vagyunk, páratlan házszám26 utcahossz+=telkek[kulcs][0] # kulcshoz egy lista tartozik, első eleme27 # a szélesség28 seta=2*utcahossz+16029 print(f'A körbejárás {seta} méter sétát jelent!\n')30 #----------------------------------------------------------------------------------------31 # 3. Az önkormányzat előírásai szerint a 20 m széles vagy annál keskenyebb telkek esetén32 # teljes utcafront beépítést kell alkalmazni. Határozza meg és a képernyőre írassa ki,33 # hogy ez hány telekre vonatkozik a Jólétsoron!34 #----------------------------------------------------------------------------------------35 def F3():36 print('3. feladat')37 telek_db=038 for kulcs,bejegyzes in telkek.items():39 # páros házszámok, azaz Jólétsoron vagyunk és telek szélessége <= 20 méter...40 if kulcs%2==0 and bejegyzes[0]<=20:41 telek_db+=142 print(f'Jólétsoron {telek_db} telken kötelesek teljes utcafrontot beépíteni!\n')43 #---------------------------------------------------------------------------------------- 44 # 4. Hány háznyira van egymástól a legnagyobb és a legkisebb területű telek Gazdagsoron?45 # A két telek között elhelyezkedő telkek számát, valamint a legnagyobb és legkisebb46 # telek házszámát, illetve területét írassa ki a képernyőre!47 #----------------------------------------------------------------------------------------48 def F4():49 # itt sokféle megoldás lehet...50 print('4. feladat')51 52 # válogassuk ki egy új szótárba a Gazdagsor telkeit (páratlan házszám, azaz kulcs)53 global gazdagsor # 7. feladathoz54 gazdagsor={}55 for kulcs,bejegyzes in telkek.items():56 if kulcs%2==1:57 gazdagsor[kulcs]=bejegyzes58 59 # rendezzük be ezt a szótárt telekterület szerint (szélesség*hosszúság)60 # a lambda kifejezésben x a teljes szótár-elemet jelenti:61 # így a 0. indexű maga a kulcs, az 1. indexű a kulcshoz tartozó kételemű lista,62 # ezért van ilyen sok index... :)63 64 global rendezett # 5. feladathoz is kell majd ez...65 rendezett=sorted(gazdagsor.items(),key=lambda x:x[1][0]*x[1][1]) # ez itt egy lista66 67 # a rendezett ilyen elemek listája: (házszám, [szélesség, hosszúság])68 # pl.: (15, [20, 30])69 70 min_hsz=rendezett[0][0]71 min_ter=rendezett[0][1][0]*rendezett[0][1][1]72 max_hsz=rendezett[-1][0] # -1 az utolsó elem indexe, ugye73 max_ter=rendezett[-1][1][0]*rendezett[-1][1][1]74 tav=((max_hsz-2)-min_hsz)//275 print(f'A legkisebb telek házszáma: {min_hsz}. Területe: {min_ter} négyzetméter')76 print(f'A legnagyobb telek házszáma: {max_hsz}. Területe: {max_ter} négyzetméter')77 print(f'A kettő között {tav} telek van.\n')78 #----------------------------------------------------------------------------------------79 # 5. Az önkormányzat telekadót fog kivetni. Az adót Fabatkában számolják. A 70080 # négyzetméteres és annál kisebb telkek esetén ez 51 Fabatka négyzetméterenként, az81 # ennél nagyobb telkeknél az első 700 négyzetméterre vonatkozóan szintén 51 Fabatka,82 # 700 négyzetméter felett egészen 1000 négyzetméterig 39 Fabatka a négyzetméterenkénti83 # adó. Az 1000 négyzetméter feletti részért négyzetméter árat nem, csak 200 Fabatka84 # egyösszegű általányt kell fizetni. A 15 m vagy annál keskenyebb, illetve a 25 m vagy85 # annál rövidebb telkek tulajdonosai 20% adókedvezményben részesülnek. Az adó meghatá-86 # rozásánál 100 Fabatkás kerekítést kell használni (pl. 6238 esetén 6200, 6586 esetén87 # 6600). Határozza meg, mekkora adóbevételre számíthat Gazdagsor után az önkormányzat!88 #----------------------------------------------------------------------------------------89 def F5():90 print('5. feladat')91 # használjuk fel a 4. feladat rendezett listáját, ezért az legyen globális!92 93 # 700 és alatt: 51/nm94 # 700 felett 1000-ig +39/nm95 # 1000 felett +20096 # kedvezmény: 20% szélesség<=15, illetve hosszúság<=2597 bevetel=0 # összbevétel a telekadóból Gazdagsoron98 for telek in rendezett: # telek pl.: (15, [20, 30])99 fizet=0 # egy telek után fizetendő adó100 szelesseg=telek[1][0]101 hosszusag=telek[1][1]102 terulet=szelesseg*hosszusag103 if terulet<=700:104 fizet+=terulet*51105 elif 700<terulet<=1000:106 fizet+=(700*51)+(terulet-700)*39107 else:108 fizet+=(700*51)+(1000-700)*39+200109 # kedvezmény110 if szelesseg<=15 or hosszusag<=25:111 fizet-=fizet*0.2112 113 fizet=round(fizet,-2) # lásd Érettségi Kézikönyv 2.0:114 # https://odorpeter.hu/python-vs-c-adattipusok.html115 bevetel+=fizet116 print(f'Gazdagsor után a telekadóból származó bevétel: {bevetel:.0f} Fabatka!\n')117 #----------------------------------------------------------------------------------------118 # 6. Melyik a 3 utolsó telek a Jólétsoron? A házszámokat és a telkeknek a Jólétsor elejé-119 # től mért távolságát írja ki a képernyőre a házszámok szerint csökkenő sorrendben! 120 #----------------------------------------------------------------------------------------121 def F6():122 print('6. feladat:')123 # válogassuk ki egy új szótárba a Jólétsor telkeit (páros házszám, azaz kulcs)124 joletsor={}125 for kulcs,bejegyzes in telkek.items():126 if kulcs%2==0:127 joletsor[kulcs]=bejegyzes128 # rendezés házszám szerint csökkenő sorrendbe129 global rendJS # 7. feladathoz130 rendJS=sorted(joletsor.items(),key=lambda x:x[0])131 # rend egy eleme pl.: (32, [20, 0]) - rend 1. indexű eleme tehát egy lista!!132 tav=sum([rendJS[i][1][0] for i in range(len(rendJS)-3)])133 print('Az utolsó három telek a Jólétsoron:')134 print(f'Házszám: {rendJS[-1][0]}. Távolság az utca elejétől: {tav+rendJS[-2][1][0]+rendJS[-3][1][0]} méter.')135 print(f'Házszám: {rendJS[-2][0]}. Távolság az utca elejétől: {tav+rendJS[-3][1][0]} méter.')136 print(f'Házszám: {rendJS[-3][0]}. Távolság az utca elejétől: {tav} méter.\n')137 #----------------------------------------------------------------------------------------138 # 7. Határozza meg Jólétsor telkeinek hosszúságát! Vegye figyelembe, hogy a szemben fekvő139 # telkek patak felőli határvonalait az utcafrontra merőleges irányban legalább 10140 # méternek kell elválasztania egymástól! Szemben fekvőnek számítanak a telkek akkor is,141 # ha csak a telkek valamelyik széle van egymással szemben. (Például a 10-es számú142 # telekkel csak a 9-es és 11-es számú telek van szemben.) A számításnál a feltételnek143 # megfelelő legnagyobb telkeket kell kialakítani! Jólétsor adatait írja ki a144 # joletsor.csv fájlba! Az egyes sorokban a házszám, a szélesség és a hosszúság szere-145 # peljen! Az adatokat pontosan egy pontosvessző válassza el egymástól!146 #----------------------------------------------------------------------------------------147 def F7():148 fki=open('joletsor.csv','w')149 150 # rendGS - Gazdagsor listája, elemei például ilyenek: (15, [20, 30])151 rendGS=sorted(gazdagsor.items(),key=lambda x:x[0])152 # rendJS - Jólétsor listája, elemei például ilyenek: (32, [20, 0])153 meterenkent=[] # telkek lehetséges hosszúsága a Jólétsoron154 for telek in rendGS:155 for i in range(telek[1][0]): # telek szélessége156 meterenkent.append(80-(telek[1][1]+10)) # telek hosszúsága157 158 start=0159 for telek in rendJS:160 szel=telek[1][0]161 # minimumot kell választani a lehetséges hosszúságokból (lásd adatok értelmezése)162 hossz=min(meterenkent[start:start+szel])163 start+=szel164 print(str(telek[0])+';'+str(telek[1][0])+';'+str(hossz),file=fki)165 fki.close()166 #****************************************************************************************167 telkek={} # szótár adattípussal oldjuk meg a feladatot168 F1()169 F2()170 F3()171 F4()172 F5()173 F6()174 F7()175 176