| Gyakorló feladatsor: Ciklusok, Listák és Algoritmusok |
Ez a 15 feladatból álló gyakorlósor azt teszteli, mennyire mélyen értetted meg a ciklusok működését, a listák kezelését és az alapvető programozási tételeket.
Szigorú szabály: A feladatok megoldásához TILOS használni a Python beépített kényelmi függvényeit (mint a max(), min(), sum(), .sort(), .reverse(), vagy a set() halmazokat)! Mindent a tanult ciklusokkal és alap algoritmusokkal kell "kézzel" lekódolnod.
1. A második legnagyobb
Adott egy számokat tartalmazó lista (pl. [12, 45, 7, 33, 99, 21]). Írj egy algoritmust, amely megkeresi és kiírja a lista második legnagyobb elemét! (Ne rendezd sorba a listát, használd a maximumkiválasztás logikáját kiterjesztve!)
2. Prímszámok listája
Kérj be egy $N$ egész számot a felhasználótól! Két egymásba ágyazott ciklus (és az eldöntés algoritmusa) segítségével keresd meg az összes prímszámot 1 és $N$ között, majd gyűjtsd őket egy közös listába! A program végén írasd ki a megkapott listát!
3. Kézi duplikáció-szűrő
Adott egy lista, amelyben sok ismétlődés van (pl. [1, 2, 2, 3, 1, 4, 2, 5]). Hozz létre egy új listát, amelyben minden elem pontosan egyszer szerepel! Halmazokat (set) nem használhatsz, a megoldáshoz használd az in operátort és egy ciklust!
4. A leghosszabb fagy (Kombinált algoritmus)
Adott egy lista, amely egy téli hónap napi átlaghőmérsékleteit tartalmazza (pl. [2, -1, -3, -2, 0, 1, -5, -6, -1, -2, 3]). Keresd meg, hogy hány napig tartott a leghosszabb folyamatos fagy (amikor a hőmérséklet 0 alatt volt egymás után)! A fenti példában ez a szám 4 (a -5, -6, -1, -2 sorozat miatt).
5. Mozgóátlag
A tőzsdén és a statisztikában gyakran használnak "mozgóátlagot". Adott egy lista árakkal: [10, 12, 15, 14, 18, 20]. Hozz létre egy új listát, amely az eredeti lista minden egymást követő 3 elemének átlagát tartalmazza! (Az első elem az 10, 12, 15 átlaga lesz, a második a 12, 15, 14 átlaga, és így tovább).
6. A leggyakoribb elem
Adott egy számokból álló lista. Keresd meg azt az elemet, amelyik a legtöbbször fordul elő benne! Mivel szótárakat (dict) még nem használhatsz, oldd meg két egymásba ágyazott ciklussal: a külső ciklus kiválaszt egy elemet, a belső pedig megszámolja, hányszor szerepel a listában. Írasd ki a nyertes számot és az előfordulásának számát!
7. Jelszó-ellenőrző lista
Adott egy lista, amely jelszó-próbálkozásokat tartalmaz (szövegeket). A megszámlálás algoritmusa segítségével számold meg, hány érvényes jelszó van a listában! Egy jelszó akkor érvényes, ha legalább 8 karakter hosszú, és szerepel benne a "!" vagy a "?" karakter (használd az in kulcsszót a szövegen!).
8. Fibonacci lista
A Fibonacci-sorozat úgy épül fel, hogy az első két elem 0 és 1, majd minden további elem az előző kettő összege (0, 1, 1, 2, 3, 5, 8...). Kérj be egy $N$ számot, majd egy ciklus segítségével generáld le a Fibonacci sorozat első $N$ elemét egy listába, és írasd ki!
9. Szigorú monotonitás
Adott egy számsorozat (lista). Az eldöntés algoritmusa segítségével vizsgáld meg, hogy a lista szigorúan monoton növekvő-e! Ez azt jelenti, hogy minden elem szigorúan nagyobb, mint az őt megelőző elem. A program írja ki, hogy "A lista növekvő!" vagy "A lista nem növekvő!".
10. Banki tranzakciók szimulációja
Adott egy lista, amely egy bankszámla történetét tartalmazza: pozitív számok a befizetések, negatívak a levonások (pl. [50000, -12000, -45000, 30000, -80000]).
Indulj el 0 Ft egyenlegről, és egy ciklussal kezdd el feldolgozni a listát! Ha az egyenleg bármelyik lépésnél 0 alá esne, azonnal szakítsd meg a ciklust (break), és írd ki: "Tranzakció elutasítva: Nincs elég fedezet!". A végén írasd ki a megmaradt egyenleget és azt, hogy hány tranzakció volt sikeres!
11. Előtag-összegek
Adott egy lista (pl. [1, 2, 3, 4]). Generálj belőle egy új listát, amelyben az $i$-edik elem az eredeti lista első $i$ elemének összege!
Példa bemenet: [1, 2, 3, 4]
Elvárt kimenet: [1, 3, 6, 10]
12. Szimmetrikus lista (Palindrom)
Döntsd el egy listáról, hogy szimmetrikus-e (visszafelé olvasva is pontosan ugyanazt a sorrendet adja-e)!
(Ne használd a .reverse() metódust vagy a szeletelést! Használj egy for vagy while ciklust, és hasonlítsd össze a lista elejét a végével, majd haladj befelé a közepe felé!)
13. Kézi lista-megfordítás
Adott egy lista. Hozz létre egy teljesen új listát, amely az eredeti lista elemeit tartalmazza, de fordított sorrendben! Oldd meg egyetlen for vagy while ciklussal, ami hátulról indulva olvassa ki az eredeti elemeket és fűzi hozzá (append) az új listához!
14. Páros-páratlan tánc
Döntsd el egy számokból álló listáról, hogy tökéletesen váltakoznak-e benne a páros és páratlan számok (pl. [2, 5, 8, 3, 10] -> Igen, [2, 4, 5, 7] -> Nem)! Egy ciklussal menj végig az elemeken, és vizsgáld meg, hogy bármely két szomszédos elem paritása (páros/páratlan mivolta) megegyezik-e! Ha igen, a "tánc" megtört.
15. A hegy formáció
Adott egy magasságokat tartalmazó lista. Egy lista akkor "Hegy", ha az elemek egy darabig szigorúan növekednek (elérnek egy csúcsot), utána pedig szigorúan csökkennek a lista végéig. Keresd meg a lista maximális elemének indexét (kiválasztás tétel), majd két külön ciklussal (vagy okos elágazásokkal) vizsgáld meg a csúcs előtti és a csúcs utáni szakaszt! Döntsd el, hogy a lista "Hegy" formációt alkot-e!