Papírgyűjtés

Kategória: Python - emelt szint

Feladat leírása

Papírgyűjtés illusztráció

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. 1.

  2. 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!

  3. 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!

  4. 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!”

  5. 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%)."

  6. 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!

  7. 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!

  8. 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 kg formátumban.

    • b) Ha egy napon többen is ugyanannyi maximumot hoztak, elég az egyiküket kiírni.

  9. 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!

  10. 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;450
      2;10.B;380
      ...

  11. 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ó."


Forrásfájlok