otszaz201605.py
1    def kiir(ssz, szoveg):
2        print('{}. feladat {}'.format(ssz, szoveg))
3    
4    
5    # --------------------------------------------------------------
6    # 1. Olvassa be és tárolja el a penztar.txt fájl tartalmát!
7    # --------------------------------------------------------------
8    kiir(1, '--------------------')
9    print('...')
10   fv = open('penztar.txt', 'r')
11   vasarlasok = []  # mátrix, elemei: 20 elemű listák
12   termekek = ['{'] * 20  # maximum 20 terméket vehet valaki
13   F_db = 0  # F-ek száma
14   i = 0  # termekek lista indexeléséhez
15   aru = set()  # 4. feladathoz lesz, de igazából nem kell
16   for sor in fv:
17       sor = sor.rstrip()
18   
19       if sor != 'F':
20           aru.add(sor)
21           termekek[i] = sor
22           i += 1
23       else:
24           F_db += 1
25           termekek = sorted(termekek)
26           vasarlasok.append(termekek)
27           termekek = ['{'] * 20  # következő vásárló előkészítése
28           i = 0  # termekek lista indexelése előlről
29   fv.close()
30   # print(vasarlasok)
31   
32   # --------------------------------------------------------------
33   # 2. Határozza meg, hogy hányszor fizettek a pénztárnál!
34   # --------------------------------------------------------------
35   kiir(2, '--------------------')
36   
37   print('A fizetések száma:', F_db)
38   
39   # --------------------------------------------------------------
40   # 3. Írja a képernyőre, hogy az első vásárlónak hány darab
41   #    árucikk volt a kosarában!
42   # --------------------------------------------------------------
43   kiir(3, '--------------------')
44   
45   db = 20 - vasarlasok[0].count('{')
46   print('Az első vásárló %d darab árucikket vásárolt.' % db)
47   
48   # --------------------------------------------------------------
49   # 4. Kérje be a felhasználótól egy vásárlás sorszámát, egy
50   #    árucikk nevét és egy darabszámot! A következő három
51   #    feladat megoldásánál ezeket használja fel!
52   # --------------------------------------------------------------
53   kiir(4, '--------------------')
54   
55   # vsz        - vásárlás sorszáma
56   # aru_neve   - a vizsgálandó termék megnevezése
57   # vdb        - a termékből vásárolt mennyiség, darabszám
58   
59   # ez a sok hűhó a következő ciklusokban csak "balhéból"!
60   while True:
61       try:
62           vsz = int(input('Adja meg egy vásárlás sorszámát! '))
63           if vsz < 1 or vsz > len(vasarlasok):
64               print('1-{} közötti számot kérek!'.format(len(vasarlasok)))
65           else:
66               break
67       except ValueError:
68           print('Csalódtam benned!')
69   
70   while True:
71       aru_neve = (input('Adja meg egy árucikk nevét! '))
72       if aru_neve not in aru:
73           print('Ilyen árut nem vásároltak')
74       else:
75           break
76   
77   while True:
78       try:
79           vdb = int(input('Adja meg a vásárolt darabszámot! '))
80           if vdb < 1 or vdb > 20:
81               print('1-20 közötti számot kérek!')
82           else:
83               break
84       except ValueError:
85           print('És ismét csak csalódtam benned!')
86   
87   # --------------------------------------------------------------
88   # 5. Határozza meg, hogy a bekért árucikkből
89   #    a. melyik vásárláskor vettek először, és melyiknél utoljára!
90   #    b. összesen hány alkalommal vásároltak!
91   # --------------------------------------------------------------
92   kiir(5, '--------------------')
93   
94   eloszor = 0
95   utoljara = 0
96   v_alkalom = 0  # adott termékből hányszor vásároltak, nem mennyit
97   for i in range(len(vasarlasok)):
98       if vasarlasok[i].count(aru_neve) > 0:
99           utoljara = i
100          if eloszor == 0:
101              eloszor = i
102          v_alkalom += 1
103  
104  print('Az első vásárlás sorszáma: ', eloszor + 1)
105  print('Az utolsó vásárlás sorszáma: ', utoljara + 1)
106  print('%d vásárlás során vettek belőle.' % v_alkalom)
107  
108  # --------------------------------------------------------------
109  # 6. Határozza meg, hogy a bekért darabszámot vásárolva egy
110  #    termékből mennyi a fizetendő összeg! A feladat megoldásához
111  #    készítsen függvényt ertek néven, amely a darabszámhoz
112  #    a fizetendő összeget rendeli!
113  # --------------------------------------------------------------
114  kiir(6, '--------------------')
115  
116  
117  def ertek(db):
118      arak = [500, 450, 400]
119      if db > 1:
120          return arak[0] + arak[1] + (db - 2) * arak[2]
121      else:
122          return arak[0]
123  
124  
125  print('%d darab vételekor fizetendő: %d' % (vdb, ertek(vdb)))
126  
127  # --------------------------------------------------------------
128  # 7. Határozza meg, hogy a bekért sorszámú vásárláskor mely
129  #    árucikkekből és milyen mennyiségben vásároltak!
130  #    Az árucikkek nevét tetszőleges sorrendben megjelenítheti.
131  # --------------------------------------------------------------
132  kiir(7, '--------------------')
133  
134  
135  def vizsgalat78(index, iras):  # 7. és 8. feladathoz
136      vizsg = vasarlasok[index]  # vasarlasok lista adott eleme
137      osszeg = 0  # összegzéshez
138      db = 1  # miből mennyit vett megállapításához
139      i = 1  # egy adott vásárlason belüli indexeléshez
140      while vizsg[i - 1] != '{':
141          if vizsg[i] == vizsg[i - 1]:  # ha aktuális aru azonos előzővel
142              db += 1  # db-ot növelni kell
143          else:
144              if iras:  # ha eltérő aru név jön, akkor
145                  print(db, vizsg[i - 1])  # kiirjuk az adatokat, ha kell
146              osszeg += ertek(db)  # összesen fizetendőt számoljuk
147              db = 1  # db-ot visszaállítjuk 1-re
148          i += 1  # indexet továbbvisszük
149      return osszeg
150  
151  
152  vizsgalat78(vsz - 1, True)
153  
154  # --------------------------------------------------------------
155  # 8. Készítse el az osszeg.txt fájlt, amelybe soronként az
156  #    egy-egy vásárlás alkalmával fizetendő összeg kerüljön
157  #   a kimeneti mintának megfelelően!
158  # --------------------------------------------------------------
159  kiir(8, '--------------------')
160  print('...')
161  
162  fki = open('osszeg.txt', 'w')
163  for i in range(len(vasarlasok)):
164      print('%d: %d' % (i + 1, vizsgalat78(i, False)), file=fki)
165  fki.close()
166