kerites201810.py
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