Raport z pliku CSV
Treść zadania
Wczytaj ścieżkę pliku CSV z ocenami uczniów. Pierwszy wiersz pliku to nagłówek imie,przedmiot,ocena, a każdy kolejny wiersz opisuje jedną ocenę: imię ucznia, przedmiot i ocenę. Pola są oddzielone przecinkami, a pole zawierające przecinek jest ujęte w cudzysłów, np. Adam,"WOS, rozszerzony",5.
Dla każdego ucznia oblicz średnią wszystkich jego ocen (ze wszystkich przedmiotów razem) i wypisz wyniki uczniów w kolejności alfabetycznej imion.
Dane wejściowe
- 1. linia: ścieżka pliku CSV
Dane wyjściowe
- Dla każdego ucznia jedna linia
imię: średnia, średnia z dokładnie 2 miejscami po przecinku. Uczniowie posortowani rosnąco po imieniu (tak jak sortujesorted()). Brak danych.— jeśli plik zawiera tylko nagłówek.Plik nie istnieje.— jeśli podana ścieżka nie wskazuje istniejącego pliku.
Ograniczenia
- Oceny to liczby od 1 do 6, całkowite albo z kropką dziesiętną (np.
4.5). - Plik nie zawiera pustych wierszy. Imiona porównujemy dokładnie — wielkość liter ma znaczenie.
Uwagi
- Moduł
csvdzieli wiersze na pola za Ciebie i poprawnie obsługuje cudzysłowy — zwykłesplit(",")rozbiłoby"WOS, rozszerzony"na dwa pola.csv.DictReaderpomija nagłówek i zwraca każdy kolejny wiersz jako słownik{nazwa kolumny: wartość}:
import csv
with open("oceny.csv", encoding="utf-8", newline="") as plik:
for wiersz in csv.DictReader(plik):
print(wiersz["imie"], wiersz["przedmiot"], wiersz["ocena"])
- Wartości z pliku CSV są napisami — ocenę zamień na liczbę przez
float(). Sumy i liczby ocen zbieraj w słownikach, których kluczem jest imię.
Przykład
oceny.csvimie,przedmiot,ocena Ola,matematyka,5 Jan,fizyka,3 Ola,"WOS, rozszerzony",4 Jan,matematyka,4 Ewa,historia,6
oceny.csv
Ewa: 6.00 Jan: 3.50 Ola: 4.50
Ola ma oceny 5 i 4, więc jej średnia to $\frac{5 + 4}{2} = 4.5$.
Potrzebujesz teorii?
Zasady obowiązujące w rozdziale 20
Poniższe zadania polegają na wczytywaniu danych ze standardowego wejścia (stdin), wykonywaniu operacji na plikach i folderach oraz wypisywaniu wyniku na standardowe wyjście (stdout).
Każde zadanie jest osobnym, niezależnym programem.
Konwencje wspólne:
- Program działa na plikach w katalogu roboczym, czyli w folderze, w którym jest uruchamiany. Wszystkie ścieżki na wejściu są względne wobec katalogu roboczego i używają
/jako separatora, np.dane/raport.txt. Ścieżki wczytuj jako całe linie — mogą zawierać spacje. - Sprawdzarka przed każdym testem tworzy nowy katalog roboczy z plikami opisanymi w teście, uruchamia program, a potem sprawdza zarówno wypisany tekst, jak i zawartość plików.
- W przykładach Pliki przed: pokazuje zawartość katalogu roboczego przed uruchomieniem programu, a Pliki po: — stan wybranych plików po jego zakończeniu. Każda linia to ścieżka pliku, a linie zaczynające się od
|to kolejne wiersze jego treści. Ścieżka zakończona/to pusty folder,(rozmiar: N B)oznacza plik o rozmiarze N bajtów, a(usunięty)— plik, którego po zakończeniu programu ma już nie być. - Pliki tekstowe są zapisane w kodowaniu UTF-8 — otwieraj je przez
open(sciezka, encoding="utf-8"). - Rozszerzenie to końcówka nazwy pliku od ostatniej kropki (razem z nią), np.
archiwum.tar.gzma rozszerzenie.gz. Rozszerzenia porównuj bez względu na wielkość liter (.TXTto też.txt). - Listy plików wypisuj po jednym w linii, jako ścieżki względem podanego folderu z separatorem
/(np.2024/raport.txt), posortowane rosnąco tak, jak sortuje napisy funkcjasorted(). Na Windowsie ścieżki mają separator\— zamień go na/(np. metodąPath.as_posix()). - Komunikaty dla przypadków brzegowych wypisuj dokładnie w podanej postaci, np.
Folder nie istnieje.,Plik nie istnieje.,Brak plików. - Program nie wypisuje komunikatów typu „Podaj ścieżkę:”. Tekst podany w
input("…")jest ignorowany przez sprawdzarkę.
Zadanie pochodzi z otwartego zbioru Nauka-Programowania (z rozwiązaniami wzorcowymi). Zgłoś błąd w treści lub testach.
Przywrócono Twój zapisany kod.
Python uruchomi się w przeglądarce przy pierwszym teście.
Kod zapisuje się automatycznie w tej przeglądarce. Tab wstawia wcięcie; aby opuścić edytor klawiaturą, naciśnij Esc, a potem Tab.
Testy
Program dostaje „Wejście” przez input() i musi wypisać „Oczekiwane wyjście”. Liczby porównywane są z tolerancją 0,01, a tekst podany w input("…") nie jest sprawdzany.
Test 1
Nie uruchomionoklasa.csv
Bartek: 2.50 Kasia: 4.33
klasa.csvimie,przedmiot,ocena Kasia,polski,4.5 Kasia,matematyka,5 Bartek,polski,3 Kasia,angielski,3.5 Bartek,chemia,2
Test 2
Nie uruchomionooceny.csv
Adam: 4.50 Zofia: 6.00
oceny.csvimie,przedmiot,ocena Adam,"WOS, rozszerzony",5 Adam,historia,4 Zofia,"język polski, poziom podstawowy",6
Test 3
Nie uruchomionomoja klasa/oceny 2024.csv
Adam: 4.50 Marta: 5.75 Zenon: 3.50
moja klasa/oceny 2024.csvimie,przedmiot,ocena Zenon,fizyka,2 Adam,fizyka,3 Marta,fizyka,6 Adam,chemia,6 Zenon,chemia,5 Marta,chemia,5.5
Test 4
Nie uruchomionodane/2b.csv
Żaneta: 1.00
dane/2b.csvimie,przedmiot,ocena Żaneta,biologia,1
Test 5
Nie uruchomionoo.csv
Ola: 4.50 ola: 2.00
o.csvimie,przedmiot,ocena ola,plastyka,2 Ola,plastyka,4 Ola,muzyka,5
Test 6
Nie uruchomionopuste.csv
Brak danych.
puste.csvimie,przedmiot,ocena
Test 7
Nie uruchomionoklasa.csv
Plik nie istnieje.
oceny.csvimie,przedmiot,ocena Adam,fizyka,5