Egy szabadstrand vízibicikli-kölcsönzőjében kölcsönzéskor rögzítik a kölcsönző nevét (lehet becenév is), az elvitt jármű azonosítóját (A, B, C, D, E, F, G), az elvitel óráját és percét, valamint a visszahozatal óráját és percét. Például:

Cica;C;9;55;10;56
Anti;A;10;1;10;58
Manci;B;10;5;11;4
Csacsa;D;10;12;10;30

Egy időpontban csak egy jármű indulhat vagy érkezhet. A járművekért minden megkezdett fél óra után 1500 Ft-ot kell fizetni. A kölcsönzés idejébe az első és az utolsó perc is beleszámít.

Az adatokat a vizdat.csv nevű, pontosvesszővel tagolt szöveges állomány tartalmazza. Feltételezhetjük, hogy a napi kölcsönzések száma nem haladja meg a 100-at.

Készítsünk programot  a következő feladatok megoldására. A program futása során a képernyőre való kiíráskor utaljunk a feladat sorszámára.

1.   Olvassuk be a vizdat.csv fájlból és tároljuk el a napi kölcsönzések adatait.

2.   Kérjünk be egy nevet és írassuk ki, hogy az illető aznap mettől meddig vette igénybe a kölcsönző szolgáltatásait. Elképzelhető, hogy az illető többször is kölcsönzött aznap, ebben az esetben minden kölcsönzés adatát írassuk ki. Ha aznap egyszer sem kölcsönzött, akkor a Nem volt ilyen nevű kölcsönző! szöveg jelenjen meg.

3.   Kérjünk be egy időpontot az óra és a perc megadásával, majd írassuk ki a képernyőre, hogy ekkor mely járművek voltak vízen, és azokat kik kölcsönözték ki.

4.   Határozzuk meg a napi bevétel összegét, és írassuk ki a képernyőre.

5.   Melyik járművet hányszor kölcsönözték ki aznap? A választ a minta szerinti elrendezésben írassuk ki a képernyőre:

6.   Melyik jármű után fizették a legnagyobb kölcsönzési díjat? Írassuk ki a képernyőre órában megadva a fizetett időt és a jármű azonosítóját. (Vegyük figyelembe, hogy minden megkezdett fél óra után a teljes fél órát ki kell fizetni.) Ha több ilyen jármű volt, mindegyik azonosítója jelenjen meg.

7.   Néhány strandoló nem tudott járművet kölcsönözni, mert éppen az összeset elvitték. Mikor volt ilyen időszak? Jelenítsük meg valamennyi időtartamot a képernyőn kezdés óra, kezdés perc, vége óra, vége perc formátumban.

8.   Sajnos az FF jelű járművet napközben valaki használat közben megrongálta. Készítsünk egy szöveges állományt, amely tartalmazza a lehetséges elkövetőket és azt, hogy mettől meddig volt náluk a jármű. Az adatokat a következő formában írassuk a fjarmu.txt fájlba:

10:15-10:55 : Zigler
10:42-11:10 : Csacsa
11:16-11:40 : Bandi
11:52-12:02 : Joci
12:48-13:47 : Babi
15:00-16:00 : Zoli

Letöltés: vizdat.csv

 

Minta

2. feladat
Kérek egy nevet: Anti
Kölcsönzött: 10:1-10:58, 11:50-12:35

 

3. feladat
Kikölcsönzött járművek: G, Linda; E, Anti; C, Bandi; A, Joci

 

4. feladat
Bevétel: 111000 Ft.

 

5. feladat
A – 6
B – 4
C – 4
D – 6
E – 3
F – 6
G – 4

 

6. feladat
Fizetett idő: 6.5 óra, járművek: A, C

 

7. feladat
Az összes kint van: 12, 50, 13, 10, 13, 45, 13, 47

 

8. feladat
A fájl írása megtörtént.

 

 

Megoldás

# 1. feladat
with open('vizdat.csv') as fajl:
     forras = fajl.read().splitlines()
adatok = [sor.split(';') for sor in forras]

# 2. feladat
print('2. feladat')
nev = input('Kérek egy nevet: ')
lista = [adat[2]+':'+adat[3]+'-'+adat[4]+':'+adat[5] for adat in adatok if adat[0]==nev]
print('Kölcsönzött: '+', '.join(lista) if lista else 'Nem volt ilyen nevű kölcsönző!')

# 3. feladat
print('\n3. feladat')
idopont = input('Kérek egy időpontot (óra:perc): ')
ido = int(idopont.split(':')[0])*60+int(idopont.split(':')[1])
lista = [adat[1]+', '+adat[0] for adat in adatok if int(adat[2])*60+int(adat[3])<=ido<=int(adat[4])*60+int(adat[5])]
print('Kikölcsönzött járművek: '+'; '.join(lista))

# 4. feladat
osszeg = 0
dijak = [] # érdemes összegyűjteni jármű-díj párosokat, az 5. feladatban kelleni fog
for adat in adatok:
     perc = int(adat[4])*60+int(adat[5]) – (int(adat[2])*60+int(adat[3]))
     if perc % 30 == 0:
          dij = 1500*(perc//30)
     else:
          dij = 1500*((perc//30)+1)
     osszeg += dij
     dijak.append([adat[1],dij])
     #print(adat[1],perc, perc//30, perc%30, dij, osszeg)
print('\n4. feladat\nBevétel:',osszeg,'Ft.')

# 5. feladat
print('\n5. feladat')
jarmuvek_lista = [adat[1] for adat in adatok]
jarmuvek = list(set(jarmuvek_lista)) # csak a járművek listája; az ABC kiírás miatt kell lista, hogy rendezhető legyen
jarmuvek.sort()
lista = [jarmu+' – '+str(jarmuvek_lista.count(jarmu)) for jarmu in jarmuvek]
print('\n'.join(lista))

# 6. feladat
print('\n6. feladat')
osszegek = [] # jármű, összeg
for jarmu in jarmuvek:
     osszeg = sum(dij[1] for dij in dijak if dij[0]==jarmu)
     osszegek.append([jarmu,osszeg])
max_osszeg = max([osszeg[1] for osszeg in osszegek])
lista = [osszeg[0] for osszeg in osszegek if osszeg[1]==max_osszeg] # csak a legtöbbet fizetett járművek és összeg
print('Fizetett idő:',(max_osszeg/1500)/2,'óra, járművek:',', '.join(lista))

# 7. feladat
idok = [[int(adat[2])*60+int(adat[3]),int(adat[4])*60+int(adat[5])] for adat in adatok] # jármű,kivisz,behoz
kezd = min(ido[0] for ido in idok) # legelső kivitel
vege = max(ido[1] for ido in idok) # legutolsó visszahozatal
#print(idok,kezd,vege)
kint = []
jo_percek = [] # azok a percek, amíg az összes jármű kint volt
for perc in range(kezd,vege): # megnézzük, hogy minden percben hány jármű van kint
     hanyban = 0
     for ido in idok:
          if ido[0]<=perc<=ido[1]:
               hanyban += 1
               #print(perc,hanyban)
     if hanyban==len(jarmuvek):
          jo_percek.append(perc)
          #print(jo_percek)
jo_idok = [jo_percek[0]] # első időpont; a jo idok csak a jó perceket tartalmazzák
for index1 in range(1,len(jo_percek)-1):
if jo_percek[index1]!=jo_percek[index1-1]+1 or jo_percek[index1]!=jo_percek[index1+1]-1:
jo_idok.append(jo_percek[index1])
jo_idok.append(jo_percek[-1]) # utolsó időpont
#print(jo_idok)
kiir = [str(perc//60)+', '+str(perc%60) for perc in jo_idok]
print('\n7. feladat\nAz összes kint van:',', '.join(kiir))

# 8. feladat
for adat in adatok: # kellenek a bevezető nullák is, ha nincsnek
     for i in range(2,6):
          if len(adat[i])==1:
               adat[i] = '0'+adat[i]
f_jarmu = [adat[2]+':'+adat[3]+'-'+adat[4]+':'+adat[5]+' : '+adat[0] for adat in adatok if adat[1]=='F']
fajl = open('fjarmu.txt','w')
print('\n'.join(f_jarmu),file=fajl)
fajl.close()
print('\n8. feladat\nA fájl írása megtörtént.')

News Reporter