4. hét: vezérlési szerkezetek, kivételek

Czirkos Zoltán, Frey Balázs · 2023.09.28.

Gyakorlófeladatok az előadás anyagához kapcsolódóan.

1. Adatok kezelése, beolvasás, statisztika

Autópálya I.

Az M7-es autópályán traffipaxot szerelnek fel, amely a Balaton felé igyekvők gyorshajtásait rögzíti. A mérés több nap adatait is tartalmazza; egy autó adatait „óra:perc sebesség” formában. Pl. 12:45 198 azt jelenti, 12:45-kor valaki 198 km/h-val Az adatsor végét üres sor zárja. A program a hibás adatokat ne vegye figyelembe, a futás végén írj ki, hány hibás adat érkezett!

Készítsen a programod egy táblázatot arról, hogy melyik órában mennyivel ment a leggyorsabb autó! Ha egy adott órában nem volt gyorshajtás, az maradjon ki! A kimenet ilyen legyen:

14:00-14:59 -> 145 km/h
16:00-16:59 -> 167 km/h
1 hibás adat érkezett

(Tipp: a sebességek mind pozitív számok.)

Autópálya II.

Az M7 autópályán traffipax méri az autók sebességét. Minden mérésről három adatot ad: „óra:perc sebesség” A 140 km/h feletti sebességért 30 000 Ft a bírság, a 180 km/h felettiért 100 000 Ft. Az adatsor több nap adatait tartalmazza, és a végét üres sor zárja. A program a hibás adatokat ne vegye figyelembe!

Olvassa be a programod ezeket az adatokat, és írja ki, hogy a nap mely órájában mennyi az összes kirótt bírság! Példa kimenet:

12:00-12:59, 60000 Ft
13:00-13:59, 230000 Ft

Bliccelés I.

Egy busztársaság kíváncsi az utasok bliccelési szokásaira. Felviszik számítógépre az összes bírságolás időpontját. Arra kíváncsiak, a napok fél órás intervallumaiban hány jegy nélkül utazót kaptak el.

Az időpontok „óra:perc” formában érkeznek. Az adatsort üres sor zárja. Írja ki a programod, mely fél órás időszakban hány bliccelő volt! Pl.:

12:00-12:29 között 3 utas
12:30-12:59 között 5 utas

Bliccelés II.

Egy busztársaság szeretné tudni, a napok mely óráiban hány ellenőrt érdemes terepmunkára küldenie. Ehhez összesítik a bírságok adatait. Egy adat a következőkből áll: „óra:perc típus összeg”, ahol a típusnál h a helyszíni bírság, c pedig a csekk. „9:45 c 6000” jelentése: egy utas 9:45-kor csekket kapott 6000 forintról. A helyszíni bírságokat az ellenőrök begyűjtik; a csekkes bírságoknak átlagosan 80%-át tudják behajtani. (Vagyis egy 6000-es csekk a társaság számára átlagosan csak 4800-at ér.) Az adatsor végén egy üres sor szerepel.

Olvassa be a programod ezeket az adatokat! Készíts kimutatást arról, hogy mely napszakban mennyi a pótdíjakból a bevétel! Példa kimenet:

16:00-16:59, 14800 Ft
17:00-17:59, 12000 Ft

2. Véletlenszámok, játékok

Nincsenek egyformák

Készíts programot, amely N (maximum 100) darab véletlen számot állít elő, amelyek között nincsenek egyformák!

Hatoslottó

Készíts programot, amely egy hatoslottó sorsolást szimulál! (45 szám közül húz hatot)

Megoldás

A .randint() minden hívása egy új véletlenszámot ad. A fenti, hibás kódrészletben a randint()-et kétszer hívjuk meg, tehát tulajdonképpen mintha nem egy, hanem két pénzérmét vizsgálnánk: ha az első fej, kiírjuk hogy fej, ha a második írás, kiírjuk, hogy írás. Így aztán az is lehet, hogy mindkét szó kiíródik, de az is, hogy egyik sem. Javítva:

if random.randint(0, 1) == 0:
    print("fej")
else:
    print("írás")

Memóriajáték

Memóriajátékot írunk. 6x6 kártya van lefordítva a játékosok előtt, 18 pár, amelyek egyformák. A kártyákon betűk vannak, A, B, C, ... Írj egy programot, amelyik generál egy véletlenszerű leosztást! Természetesen egy betűnek pontosan kétszer kell szerepelnie (egy pár)!

Tipp

Ehhez érdemes előbb a listát úgy feltölteni, hogy sorrendben szerepelnek benne a kártyák, és utána összekeverni. Úgy nem kell mindig vizsgálni, hogy minden kártya pontosan kétszer szerepel-e benne. A lista megkeveréséhez minden elemet cserélj meg egy véletlenedikkel!

Master Mind

A Master Mind játékban egyik játékos kitalál egy feladványt, amely 4 tüskéből áll. A tüskék 6-féle színűek lehetnek. Lehetséges az is, hogy két vagy több tüske ugyanolyan színű, pl. piros, piros, zöld, kék. A másik játékos ezután megtippeli, mire gondolhatott az első. Az előbbi minden körben aképpen segít kitalálni a feladványt, hogy elárulja, a tippben hány olyan tüske van, amely a megfelelő színű és a megfelelő helyen is van (ezt feketékkel jelöli); és hány olyan, amely az előbbieken kívül még jó színű, de rossz helyen van (ezt pedig fehérekkel).

Pl. feladvány: oooo, tipp: oooo, segítség: ooo (a második piros, illetve a zöld és a sárga miatt).

Írj programot, amely feladványt ad a felhasználónak, és a leírt szabályok alapján segít neki kitalálni azt! A hat színt jelöld a programban az a…f betűkkel.

Tipp

Miután a felhasználó megadta a tippjét, a program használhat olyan algoritmust, amely hatására ez a beírt tipp elfelejtődik. Először a pozíció szerint is stimmelő tüskéket érdemes keresni, és az így megtalált egyezések a listából törölhetőek, hogy a második, pozíciót figyelembe már nem vevő keresés ne találja meg azokat újra.

Karakterek beolvasásával kapcsolatban lásd a fentebbi megjegyzéseket (pl. a kő, papír, olló játéknál.)

Sorbarakó játék

    1    2    3    4    5    6
  145   12    5   77  100   44

1. felcserelendo = 3
2. felcserelendo = 1
    1    2    3    4    5    6
    5   12  145   77  100   44

Írj programot, amely a felhasználótól bekért egész számokkal feltölt egy hatelemű listát! A program ezután keverje össze véletlenszerűen a számokat, majd írja ki ezeket az oldalt látható módon.

    1    2    3    4    5    6
    5   12   44   77  100  145

Gratulalok, nyertel!

A program ezután kérjen a felhasználótól két 1 és 6 közötti sorszámot, majd a program cserélje fel az ezekhez a sorszámokhoz tartozó értékeket, és írja ki ismét a számokat. Mindaddig ismételje a sorszámok bekérését és a cserét, míg a felhasználó nem rakta növekvő sorrendbe a számokat. Ha a felhasználó nem 1 és 6 közötti értékeket ad meg, adjon hibaüzenetet!