nezoter201410.py
1    def kiir(ssz, szoveg):
2        print('{}. feladat - {}'.format(ssz, szoveg))
3    
4    
5    # Az egyszerűbb indexelés miatt egy plusz 0! Ne kelljen -1 mindig! :)
6    arak = [0, 5000, 4000, 3000, 2000, 1500]
7    
8    # ---------------------------------------------------------------------------------
9    # 1. Olvassa be és tárolja el a foglaltsag.txt és a kategoria.txt fájl adatait!
10   # ---------------------------------------------------------------------------------
11   kiir(1, 'Adatok beolvasása')
12   
13   # 15 sor és minden sorban 20 szék
14   foglaltsag = []
15   kategoria = []
16   
17   fv = open('foglaltsag.txt', 'r')
18   for sor in fv:
19       foglaltsag.append(sor.rstrip())
20   fv.close()
21   
22   fv = open('kategoria.txt', 'r')
23   for sor in fv:
24       kategoria.append(sor.rstrip())
25   fv.close()
26   
27   print(foglaltsag)
28   print(kategoria)
29   
30   # ---------------------------------------------------------------------------------
31   # 2. Kérje be a felhasználótól egy sor, és azon belül egy szék számát, majd írassa
32   #    ki a képernyőre, hogy az adott hely még szabad-e vagy már foglalt!
33   # ---------------------------------------------------------------------------------
34   kiir(2, 'Szabad vagy foglalt')
35   
36   sor = int(input('Kérek egy sor számát: ')) - 1
37   szek = int(input('Soron belül egy szék számát: ')) - 1
38   # -1 kell az indexelés miatt a fenti sorokban
39   if foglaltsag[sor][szek] == 'x':
40       print('A hely már foglalt!')
41   
42   else:
43       print('A hely még szabad!')
44   
45   # ---------------------------------------------------------------------------------
46   # 3. Határozza meg, hogy hány jegyet adtak el eddig, és ez a nézőtér befogadó-
47   #    képességének hány százaléka! A százalékértéket kerekítse egészre, és az
48   #    eredményt a következő formában írassa ki a képernyőre:
49   #    Például:
50   #         Az előadásra eddig 156 jegyet adtak el, ez a nézőtér 42%-a.
51   # ---------------------------------------------------------------------------------
52   kiir(3, 'Eladott jegyekről információ')
53   
54   bk = 15 * 20  # nézőtér befogadóképessége
55   
56   eladott = 0
57   for sor in foglaltsag:
58       eladott += sor.count('x')
59   
60   s = 'Az előadásra eddig {} jegyet adtak el, ez a nézőtér {}%-a.'
61   print(s.format(eladott, int(eladott / bk * 100 + 0.5)))
62   
63   # ---------------------------------------------------------------------------------
64   # 4. Határozza meg, hogy melyik árkategóriában adták el a legtöbb jegyet!
65   #    Az eredményt írassa ki a képernyőre az alábbi formában:
66   #    Például:
67   #         A legtöbb jegyet a(z) 3. árkategóriában értékesítették.
68   # ---------------------------------------------------------------------------------
69   kiir(4, 'Legnépszerűbb árkategória')
70   kat = [0] * 6  # 5 kategória van, ebben a listában összegezzük a kategóriákat
71   # +1 azért kell, hogy az indexelés egyszerűbb legyen
72   # maguk a kategóriák fogják indexelni
73   
74   # itt ki lehet használni, hogy a foglaltsag és a kategoria teljesen azonos
75   # szerkezetű: ha foglaltsag adott helyen x van, ugyanott megnézzük a kategóriát!
76   for i in range(15):  # 15 sor
77       for j in range(20):  # soronként 20 szék
78           if foglaltsag[i][j] == 'x':
79               kat[int(kategoria[i][j])] += 1
80   
81   # for x in range(1,6):
82   #    print(kat[x])
83   
84   s = 'A legtöbb jegyet a(z) {}. kategóriában adták el.'
85   print(s.format(kat.index(max(kat))))
86   
87   # ---------------------------------------------------------------------------------
88   # 5. A jegyek árát kategóriánként a következő táblázat tartalmazza:
89   #           árkategória 1    2    3    4    5
90   #               ár (Ft) 5000 4000 3000 2000 1500
91   #    Mennyi lenne a színház bevétele a pillanatnyilag eladott jegyek alapján?
92   #    Írassa ki az eredményt a képernyőre!
93   # ---------------------------------------------------------------------------------
94   kiir(5, 'Színház bevétele')
95   
96   # kicsit hasonló, mint a 4. feladat: foglaltsagon végig megyünk, és ha adott helyen
97   # x karakter van, akkor ugyanott a kategória alapján megnézzük a szék árát, és
98   # az egészet összegezzük a bevetel változóban!
99   bevetel = 0
100  for i in range(15):  # 15 sor
101      for j in range(20):  # soronként 20 szék
102          if foglaltsag[i][j] == 'x':
103              bevetel += arak[int(kategoria[i][j])]
104  
105  print('A színház bevétele {} Ft.'.format(bevetel))
106  
107  # vagy (a 4. feladatot felhasználva):
108  
109  bevetel2 = 0
110  for i in range(6):
111      bevetel2 += arak[i] * kat[i]
112  
113  print('A színház bevétele {} Ft.'.format(bevetel2))
114  # ---------------------------------------------------------------------------------
115  # 6. Mivel az emberek általában nem egyedül mennek színházba, ha egy üres hely
116  #    mellett nincs egy másik üres hely is, akkor azt nehezebben lehet értékesíteni.
117  #    Határozza meg, és írassa ki a képernyőre, hogy hány ilyen „egyedülálló” üres
118  #    hely van a nézőtéren!
119  # ---------------------------------------------------------------------------------
120  kiir(6, '"Egyedülálló" szabad helyek')
121  
122  ures = 0
123  for sor in foglaltsag:
124      sor2 = 'x' + sor + 'x'  # a plusz 'x'-ek azért, hogy az elejét és végét ne kelljen
125      # külön vizsgálgatni
126      for i in range(1, 21):  # a plusz 'x'-kel 22 elemű a sor2, és számoljuk az
127          # 'xox' eseteket!
128          if sor2[i - 1] == 'x' and sor2[i] == 'o' and sor2[i + 1] == 'x':
129              ures += 1
130  
131  print('"Egyedülálló" szabad helyek száma: ', ures)
132  
133  # ---------------------------------------------------------------------------------
134  # 7. A színház elektronikus eladási rendszere az érdeklődőknek az üres helyek
135  #    esetén a hely árkategóriáját jeleníti meg, míg a foglalt helyeket csak egy
136  #    „x” karakterrel jelzi. Készítse el ennek megfelelően a fenti adatokat
137  #    tartalmazó szabad.txt fájlt!
138  #    Például:
139  #           33xxx1x1x1x1xxx22xxx
140  #           xxxxxxxxxxxxxxxxxxxx
141  #           4xxxxx222xxxxxxxxxx4
142  #           …
143  # ---------------------------------------------------------------------------------
144  kiir(7, 'Szabad helyek árkategóriája')
145  
146  fv = open('szabad.txt', 'w')
147  
148  szabad = ['x'] * 20  # 20 elemű 'x'-ekből álló lista
149  szabad = ''.join(szabad)  # ebből 20 karakter hosszú string: 'xxxx....'
150  szabadok = [szabad] * 15  # ezekből a sztringekből 15 sornak megfelelő lista
151  for i in range(15):  # 15 sor
152      for j in range(20):  # 20 szék soronként
153          if foglaltsag[i][j] == 'o':  # ha szabad a szék, akkor
154              # az i-edik sorban a j-edik helyen 'x' helyett a kategória lesz!!
155              # j-edik karakterig marad minden, j helyen csere, j+1-től marad minden!!
156              szabadok[i] = szabadok[i][:j] + kategoria[i][j] + szabadok[i][j + 1:]
157  fv = open('szabad.txt', 'w')
158  for szabad in szabadok:
159      print(szabad, file=fv)
160  fv.close()