szinkep201205.py
1    def kiir(ssz, szoveg):
2        print('{}. feladat - {}'.format(ssz, szoveg))
3    
4    
5    # -----------------------------------------------------------------------------
6    # 1. Olvassa be a fájlból egy megfelelő adatszerkezetbe az egyes képpontok
7    #    RGB kódját!
8    # -----------------------------------------------------------------------------
9    kiir(1, 'Adatok beolvasása')
10   
11   # 50×50 képpontos kép képpontjainak RGB kódjai vannak sorfolytonosan
12   sor = []  # 50 3 elemű listát tartalmazó sor, a mátrix egy sora
13   matrix = []  # 50 sort tartalmazó mátrix (lsd egy sorral feljebb)
14   fbe = open('kep.txt', 'r')
15   db = 1
16   for pontok in fbe:
17       pontok = pontok.strip().split()
18       sor.append(pontok)
19       if db % 50 == 0:  # 50-esével képezzük a sorokat
20           matrix.append(sor)
21           sor = []  # ha egy sor bekerült a mátrixba, kezdjük elölről
22       db += 1
23   
24   N = db - 1
25   print('Beolvasott sorok száma: ', N)
26   fbe.close()
27   
28   # -----------------------------------------------------------------------------
29   # 2. Kérjen be a felhasználótól egy RGB kódot! Állapítsa meg a program
30   #    segítségével, hogy a bekért szín megtalálható-e a képen! A megállapítás
31   #    eredményét írja ki a képernyőre!
32   # -----------------------------------------------------------------------------
33   kiir(2, 'Adott RGB kód szerepel-e a képben')
34   print('Kérek egy R G B értéket szóközökkel elválasztva!')
35   # RGB lista közvetlenül inputból
36   RGB = [kod for kod in input().split()]
37   RGB = RGB[0:3]  # ha 3 elemnél többet írna be, csak 3-at veszünk
38   print(RGB)
39   # keresési algoritmus
40   i = 0
41   while i < 50:
42       j = 0
43       while j < 50 and matrix[i][j] != RGB:
44           j += 1
45       if j < 50:
46           print('A megadott kód szerepel a képben!')
47           break  # ha megvan elhagyjuk a ciklust
48       i += 1
49   if i == 50:
50       print('A megadott kód nem szerepel a képben!')
51   
52   # -----------------------------------------------------------------------------
53   # 3. Határozza meg, hogy a kép 35. sor 8. képpontjának színe hányszor
54   #    szerepel a 35. sorban, illetve a 8. oszlopban. Az értékeket írja ki a
55   #    képernyőre az alábbi formában: Például: Sorban: 5 Oszlopban: 10
56   # -----------------------------------------------------------------------------
57   kiir(3, '35.sor, 8.oszlop')
58   RGB = matrix[34][7]
59   print(RGB)
60   s_db = matrix[34].count(RGB)  # 35. sorban a count-tal számolunk
61   o_db = 0
62   for s in range(50):  # oszlopban számolás, azaz a sorokat futtajuk 1-50-ig
63       if matrix[s][7] == RGB:
64           o_db += 1
65   
66   print('Sorban: {} Oszlopban: {}'.format(s_db, o_db))
67   
68   # -----------------------------------------------------------------------------
69   # 4. Állapítsa meg, hogy a vörös, kék és zöld színek közül melyik szín
70   #    fordul elő legtöbbször a képen! Az (egyik) legtöbbször előforduló szín
71   #    nevét írja ki a képernyőre!
72   #    A színek kódjai: Vörös 255,0,0 Zöld 0,255,0 Kék 0,0,255
73   # -----------------------------------------------------------------------------
74   kiir(4, 'Legtöbbször előforduló szín')
75   RGB = [0] * 3
76   
77   for i in range(50):
78       RGB[0] += matrix[i].count(['255', '0', '0'])  # vörös
79       RGB[1] += matrix[i].count(['0', '255', '0'])  # zöld
80       RGB[2] += matrix[i].count(['0', '0', '255'])  # kék
81   RGB2 = ['vörös', 'zöld', 'kék']
82   print('A leggyakoribb szín:', RGB2[RGB.index(max(RGB))])
83   
84   # -----------------------------------------------------------------------------
85   # 5. Készítsen 3 képpont széles, fekete színű keretet a képnek! A keretet
86   #    úgy hozza létre, hogy a kép mérete ne változzon!
87   #    A fekete szín kódja RGB(0, 0, 0).
88   # -----------------------------------------------------------------------------
89   kiir(5, 'Keretezés feketével')
90   
91   for i in range(50):
92       for j in range(50):
93           if i < 3 or i > 46 or j < 3 or j > 46:
94               matrix[i][j] = ['0', '0', '0']
95   
96   # -----------------------------------------------------------------------------
97   # 6. A kép képpontjainak színét írja ki a keretes.txt nevű szövegfájlba a
98   #    bemeneti fájl formátumával egyezően! A képet sorfolytonosan tárolja,
99   #    minden képpontot új sorba, a képpontok RGB kódját szóközzel elválasztva
100  #    írja ki!
101  # -----------------------------------------------------------------------------
102  kiir(6, 'Képpontok kiírása keretes.txt-be')
103  
104  fki = open('keretes.txt', 'w')
105  for i in range(50):
106      for j in range(50):
107          print(' '.join(matrix[i][j]), file=fki)
108  fki.close()
109  
110  # -----------------------------------------------------------------------------
111  # 7. Az 50×50-es képen a kerettől függetlenül egy sárga RGB (255, 255, 0)
112  #    színű téglalap van. Határozza meg a program segítségével a bal felső és
113  #    a jobb alsó sárga képpontnak a helyét (sor, oszlop), majd határozza meg,
114  #    hogy a sárga téglalap hány képpontból áll! A képpontok helyét és a sárga
115  #    alakzat méretét a következő formában írassa ki a képernyőre:
116  #       Kezd: sor, oszlop
117  #       Vége: sor, oszlop
118  #       Képpontok száma: darab
119  # -----------------------------------------------------------------------------
120  kiir(7, 'Sárga téglalap')
121  
122  S = ['255', '255', '0']
123  db = 0
124  for i in range(50):
125      for j in range(50):
126          if matrix[i][j] == ['255', '255', '0'] and db == 0:
127              kezd = (i, j)  # első találat a balfelső sarkot adja
128          if matrix[i][j] == ['255', '255', '0']:
129              vege = (i, j)  # jobbalsó folyamatosan "frissül", amíg "vége" nem lesz
130              db += 1  # és számoljuk, hogy hány képpont sárga
131  
132  print('Kezd: {}, {}'.format(kezd[0], kezd[1]))
133  print('Vége: {}, {}'.format(vege[0], vege[1]))
134  print('Képpontok száma: ', db)