Papírgyűjtés
Kategória: Python - emelt szint
Feladat leírása
Feladat leírása
A papir.txt szöveges állományban a Gimnázium éves tavaszi papírgyűjtési hetének részletes naplója található. A verseny 5 napig tartott (hétfőtől péntekig). A fájl minden sora egy-egy leadást rögzít: a leadás napját, a tanuló osztályát, a tanuló nevét, a papír típusát (u = újság, k = karton), valamint a leadott mennyiséget kilogrammban.
Soron belül az adatokat pontosvessző választja el egymástól. Az állomány legfeljebb 1000 sort tartalmaz.
Példaként néhány sor az állományból:
1;12.A;Kovács Péter;u;15
1;9.Ny;Nagy Anna;k;8
2;10.B;Szabó Zoltán;u;20
2;12.A;Kovács Péter;k;5
3;11.C;Varga Éva;u;12
5;9.Ny;Nagy Anna;u;10
Tudnivalók az adatokról:
-
A napokat számok jelölik: 1 = hétfő, ..., 5 = péntek.
-
Az osztályok jelölése mindig egy szám (vagy a 9.Ny esetén betűs előtag) és egy betű kombinációja, ponttal elválasztva (pl.
9.A,10.B,11.C,9.Ny). -
A nevek "Vezetéknév Keresztnév" formátumúak, ékezetesek. Egy tanuló a héten többször is hozhatott papírt, akár ugyanazon a napon is.
Készíts programot, amely az egyik mellékelt állományt felhasználva megoldja az alábbi feladatokat! A program forráskódját mentsd papirgyujtes néven! A felhasználó által megadott adatok helyességét nem kell ellenőrizned.
A képernyőre írást igénylő részfeladatok előtt írd ki a feladat sorszámát (pl.: 4. feladat:). Ha adatot kérsz be, jelezd, mit vársz! Ha eredményt írsz ki, szövegesen is közöld, mi az!
Részfeladatok
1.
Olvasd be a
papir.txtállományt, és tárold el a tartalmát egy összetett adatszerkezetben (pl. osztálylista, szótárak listája vagy saját osztály), hogy a későbbi feladatokhoz könnyen hozzáférj! Írd ki a képernyőre, hogy hány sornyi adatot olvastál be!2. Határozd meg és írd ki, hogy mennyi volt az iskolában összegyűjtött papír össztömege a hét során!
3. Kérd be a felhasználótól egy osztály jelét (pl.
12.A)!a)
Írd ki, hogy az adott osztály összesen hány alkalommal (hány sorban) szerepel a listában!
b) Ha az osztály nem szerepel az adatok között, írd ki: „Nincs ilyen osztály az adatokban!”
4. Számold ki, hogy össztömegben melyik típusból gyűlt több: újságpapírból (
u) vagy kartonból (k)! Az eredményt százalékos formában is jelenítsd meg egy tizedesjegy pontossággal!a) Minta kimenet: "A kartonpapír több volt (52.4%)." vagy "Az újságpapír több volt (60.1%)."
5. Keress egy olyan tanulót, aki a legtöbb különböző napon adott le papírt! (Nem a mennyiség számít, hanem hogy hányszor jött be a héten). Ha több ilyen tanuló van, elegendő egyet megjelenítened. Írd ki a nevét, az osztályát és hogy hány különböző napon regisztráltak tőle leadást!
6. A 9.Ny osztály a 9. évfolyamhoz tartozik. Határozd meg, hogy melyik évfolyam (9, 10, 11 vagy 12) gyűjtötte a legtöbb papírt (súly alapján)! Ehhez az osztályjelzéseket fel kell bontanod (a pont előtti részt kell figyelni). Írd ki a nyertes évfolyamot és az általuk gyűjtött mennyiséget!
7. Határozd meg minden egyes napra (1-től 5-ig), hogy ki adta le aznap a legnagyobb egyszeri mennyiséget!
a) A képernyőre soronként írd ki:
Nap: Tanuló neve (Osztály) - Mennyiség kgformátumban.b) Ha egy napon többen is ugyanannyi maximumot hoztak, elég az egyiküket kiírni.
8. Kérj be a felhasználótól egy tanulónevet!
a) Írd ki, hogy a tanuló összesen hány kg papírt hozott!
b) Vizsgáld meg, hogy a tanuló hozott-e papírt az 5. napon (pénteken)! Ha igen, írd ki: „Hozott pénteken is.”, ha nem, írd ki: „Pénteken nem adott le semmit.”
c) Ha a név nem szerepel, jelezd a felhasználónak!
9. Készíts egy statisztikát az osztályok teljesítményéről! Gyűjtsd ki, hogy melyik osztály mennyi papírt gyűjtött összesen.
a) Az adatokat rendezd a gyűjtött súly szerint csökkenő sorrendbe!
b) Az eredményt írd ki az osztalyok.txt állományba!
c) A fájl szerkezete legyen: Helyezés;Osztály;Összsúly
pl.:1;12.A;4502;10.B;380...
10. Keressük azokat a "gyanúsan pontos" leadásokat, ahol a leadott mennyiség pontosan 10 kg vagy annak többszöröse (pl. 10, 20, 30...).
a) Számold meg, hány ilyen rekord van az állományban!
b) Készíts egy lekérdezést: volt-e olyan tanuló, aki kizárólag csak ilyen kerek összegeket adott le, de legalább kétszer szerepel a listában? Ha van ilyen, írd ki a nevét (ha több van, vesszővel elválasztva sorold fel őket)! Ha nincs, írd ki: "Nincs ilyen szabályos tanuló."