1 def feladat(i): 2 print('{}. feladat'.format(i)) 3 4 # ---------------------------------------------------------------------------- 5 # 1. Olvassa be és tárolja el a kerites.txt fájl tartalmát! 6 # ---------------------------------------------------------------------------- 7 feladat(1) 8 print('Fájlolvasás') 9 adatok = [] 10 fv = open('kerites.txt') 11 hp = 0 # páros házszámok (későbbi feladatok miatt jól jöhetnek) 12 hpt = -1 # páratlan házszámok 13 for sor in fv: 14 sor = sor.strip().split() # sor - háromelemű lista 15 if sor[0] == '0': 16 hp += 2 # páros házszámok növelése 17 sor.append(hp) 18 else: 19 hpt += 2 # páratlan házszámok növelése 20 sor.append(hpt) 21 22 adatok.append(sor) 23 print(adatok) 24 fv.close() 25 26 # ---------------------------------------------------------------------------- 27 # 2. Írja a képernyőre, hogy hány telket adtak el az utcában! 28 # ---------------------------------------------------------------------------- 29 feladat(2) 30 print('Eladott telkek száma: %d' % len(adatok)) # "mátrixunk" elemszáma 31 32 # ---------------------------------------------------------------------------- 33 # 3. Jelenítse meg a képernyőn, hogy az utolsó eladott telek 34 # a. melyik (páros / páratlan) oldalon talált gazdára! 35 # b. milyen házszámot kapott! 36 # ---------------------------------------------------------------------------- 37 feladat(3) 38 39 if adatok[-1][0] == '0': # adatok[-1] az utolsó elem a mátrixban 40 sz = 'páros' 41 else: 42 sz = 'páratlan' 43 44 print('A {} oldalon adták el az utolsó telket'.format(sz)) 45 print('Az utolsó telek házszáma: %d' % adatok[-1][3]) 46 47 # ---------------------------------------------------------------------------- 48 # 4. Írjon a képernyőre egy házszámot a páratlan oldalról, amely 49 # melletti telken ugyanolyan színű a kerítés! 50 # (A hiányzó és a festetlen kerítésnek nincs színe.) 51 # Feltételezheti, hogy van ilyen telek, a több ilyen közül elég 52 # az egyik ház számát megjeleníteni. 53 # ---------------------------------------------------------------------------- 54 feladat(4) 55 56 paratlan_oldal = [] # páratlan oldalon lévő telkek listája 57 for elem in adatok: 58 if elem[0] == '1': # páratlan oldalon vagyunk 59 paratlan_oldal.append(elem) 60 61 temp = ['#', ':'] # azért, hogy csak festett kerítéseket vizsgáljak 62 for index in range(len(paratlan_oldal) - 1): 63 # ha a szín információ nem '#' vagy ':'... 64 if paratlan_oldal[index][2] not in temp: 65 # ha aktuális kerítés színe és a következő ugyanaz, akkor... 66 if paratlan_oldal[index][2] == paratlan_oldal[index + 1][2]: 67 break # ...kiugorhatunk, mert megtaláltuk, ami kell 68 print('A szomszédossal egyezik a kerítés színe (házszám): %d' % paratlan_oldal[index][3]) 69 70 # ---------------------------------------------------------------------------- 71 # 5. Kérje be a felhasználótól egy eladott telek házszámát, majd azt 72 # felhasználva oldja meg a következő feladatokat! 73 # a. Írja ki a házszámhoz tartozó kerítés színét, ha már elkészült 74 # és befestették, egyébként az állapotát a „#” vagy „:” karakter 75 # jelöli! 76 # b. A házszámhoz tartozó kerítést szeretné tulajdonosa be- vagy 77 # átfesteni. Olyan színt akar választani, amely különbözik a 78 # mellette lévő szomszéd(ok)tól és a jelenlegi színtől is. 79 # Adjon meg egy lehetséges színt! A színt a teljes palettából (A-Z) 80 # szabadon választhatja meg. 81 # ---------------------------------------------------------------------------- 82 feladat(5) 83 84 def színválasztó(i): 85 # mivel el kell térni a szomszédoktól... 86 szomszédok = [] 87 szomszédok.append(adatok[i][2]) # ... és saját magától is 88 # szomszédkeresés 89 hsz = adatok[i][3] # házszám alapján kell a szomszédokat keresni 90 # páros házszám, akkor párosak a szomszédok is, pl. 91 # klasszikus keresési algoritmus: kisebb házszámú szomszéd 92 x = 0 93 while x < len(adatok) and adatok[x][3] != hsz - 2: # -2 kell a fentiek miatt 94 x += 1 95 if x < len(adatok): 96 szomszédok.append(adatok[x][2]) 97 98 # klasszikus keresési algoritmus: nagyobb házszámú szomszéd 99 x = len(adatok) - 1 100 while x > -1 and adatok[x][3] != hsz + 2: 101 x -= 1 102 if x > -1: 103 szomszédok.append(adatok[x][2]) 104 105 # kínálat: egy lista, elemei:'A','B',...,'Z' 106 # chr(): ascii-kódból karaktert állít elő 107 kínálat = [chr(color) for color in range(65, 65 + 26)] 108 109 # végigmegyünk az 'A'-'Z' kínálaton, olyan színt keresve, ami nincs 110 # a szomszédok listában! 111 for szín in kínálat: 112 if szín not in szomszédok: 113 break 114 return szín 115 116 hsz = int(input('Kérek egy házszámot: ')) 117 118 # megkeresem a "mátrixban" a megadott házszámú elemet 119 # a klasszikus keresési algoritmussal: 120 index = 0 121 while index < len(adatok) and adatok[index][3] != hsz: 122 index += 1 123 124 if index < len(adatok): # ha megtaláltam, akkor... 125 # kiírom a színét a kerítésnek 126 print('Kerítés színe/állapota: ', adatok[index][2]) 127 # a színválasztó függvénnyel megállapítok egy lehetséges színt 128 print('Egy lehetséges festési szín: ', színválasztó(index)) 129 else: 130 print('Nincs ilyen házszám!') 131 132 # ---------------------------------------------------------------------------- 133 # 6. Jelenítse meg az utcakep.txt fájlban a páratlan oldal utcaképét az 134 # alábbi mintának megfelelően! 135 # KKKKKKKK::::::::::SSSSSSSSSBBBBBBBBFFFFFFFFFKKKKKKKKKKIIIIIIII 136 # 1 3 5 7 9 11 13 137 # 138 # Az első sorban a páratlan oldal jelenjen meg, a megfelelő méternyi 139 # szakasz kerítésszínét (vagy állapotát) jelző karakterrel! A második 140 # sorban a telek első karaktere alatt kezdődően a házszám álljon! 141 # ---------------------------------------------------------------------------- 142 feladat(6) 143 144 print('Fájlírás...') 145 sor1 = '' 146 hsz = 1 # páratlan oldal kell, ez a kezdő házszám 147 sor2 = '' 148 for elem in adatok: 149 if elem[0] == '1': # páratlan oldal 150 telek_szélesség = int(elem[1]) 151 for i in range(telek_szélesség): 152 sor1 += elem[2] # telek_szélesség-szer szövegösszefűzés 153 # ljust() balra igazítja a szöveget telek_szélesség "térben" 154 sor2 += str(hsz).ljust(telek_szélesség) 155 hsz += 2 # következő házszám 156 157 fv = open('utcakep.txt', 'w') 158 fv.write(sor1 + '\n') 159 fv.write(sor2) 160 fv.close() 161 162