Dziedziczenie wielopoziomowe: Człowiek → Student → StudentFizyki
Treść zadania
Zaprojektuj hierarchię klas:
Czlowiek— atrybuty: imię, nazwisko, miejsce urodzenia, zawód.Student(dziedziczy poCzlowiek) — dodatkowo: numer albumu, kierunek studiów.StudentFizyki(dziedziczy poStudent) — dodatkowo: średnia z laboratoriów, średnia z wykładów.
Każda klasa ma:
- konstruktor, który atrybuty odziedziczone przekazuje do konstruktora klasy bazowej przez
super().__init__(…), a sam zapisuje tylko nowe atrybuty, - metodę
opis(), która zwraca listę linii z danymi obiektu. Klasa potomna wywołujesuper().opis()i dopisuje do wyniku linie ze swoimi nowymi atrybutami, - nagłówek:
Człowiek,StudentalboStudent Fizyki.
Metoda wypisz() (zdefiniowana tylko w klasie Czlowiek) wypisuje nagłówek z dwukropkiem, a pod nim kolejne linie z opis().
Program wczytuje dane kilku osób, tworzy odpowiednie obiekty i wypisuje je w kolejności z wejścia.
Dane wejściowe
- 1. linia: liczba osób $n$
- następnie dane kolejnych osób; każda wartość w osobnej linii:
- rodzaj:
czlowiek,studentalbostudent_fizyki - imię
- nazwisko
- miejsce urodzenia
- zawód
- numer albumu (liczba całkowita) — tylko dla
studentistudent_fizyki - kierunek studiów — tylko dla
studentistudent_fizyki - średnia z laboratoriów (liczba rzeczywista) — tylko dla
student_fizyki - średnia z wykładów (liczba rzeczywista) — tylko dla
student_fizyki
- rodzaj:
Wartości tekstowe mogą zawierać spacje (np. Zielona Góra).
Dane wyjściowe
Dla każdej osoby blok linii, bloki oddzielone pustą linią. Blok ma postać (linie z nawiasu kwadratowego występują tylko w odpowiednich klasach):
<Nagłówek>:
Imię: <imię>
Nazwisko: <nazwisko>
Miejsce urodzenia: <miejsce>
Zawód: <zawód>
[Numer albumu: <numer>]
[Kierunek studiów: <kierunek>]
[Średnia z laboratoriów: <średnia>]
[Średnia z wykładów: <średnia>]
Średnie wypisz z dokładnością do 2 miejsc po przecinku.
Ograniczenia
- $1 \le n \le 10$
Uwagi
- Nagłówek wygodnie zapisać jako atrybut klasy, np.
naglowek = "Student"— klasa potomna nadpisuje go własną wartością, awypisz()odczytujeself.naglowek.
Przykład
3 czlowiek Jan Kowalski Kraków Inżynier student Anna Nowak Warszawa Student 12345 Informatyka student_fizyki Piotr Wiśniewski Gdańsk Student 54321 Fizyka 4.5 4.0
Człowiek: Imię: Jan Nazwisko: Kowalski Miejsce urodzenia: Kraków Zawód: Inżynier Student: Imię: Anna Nazwisko: Nowak Miejsce urodzenia: Warszawa Zawód: Student Numer albumu: 12345 Kierunek studiów: Informatyka Student Fizyki: Imię: Piotr Nazwisko: Wiśniewski Miejsce urodzenia: Gdańsk Zawód: Student Numer albumu: 54321 Kierunek studiów: Fizyka Średnia z laboratoriów: 4.50 Średnia z wykładów: 4.00
Potrzebujesz teorii?
Zasady obowiązujące w rozdziale 19
Zadania w tym rozdziale uczą dziedziczenia: klasa potomna przejmuje atrybuty i metody klasy bazowej, może je nadpisać (override) albo rozszerzyć, wywołując wersję z klasy bazowej przez super(). Dzięki polimorfizmowi ten sam kod (np. pętla po liście obiektów) wywołuje metodę odpowiednią dla konkretnej klasy obiektu. Dziedziczenie przydaje się też przy wyjątkach: własne wyjątki to klasy dziedziczące po Exception, które można układać w hierarchie.
Konwencje wspólne:
- Każde zadanie to osobny program: czyta standardowe wejście i wypisuje wynik na standardowe wyjście.
- W każdym zadaniu dostajesz kod startowy ze szkieletami klas i gotowym wczytywaniem danych. Twoim zadaniem jest uzupełnienie klas — wynik programu zależy od tego, jak działają Twoje klasy.
- Nazwy klas i metod podane w treści są obowiązkowe (kod startowy z nich korzysta). Nazwy w kodzie piszemy bez polskich znaków, np.
Kolo,Czlowiek. - „Z dokładnością do 2 miejsc po przecinku” oznacza dokładnie dwie cyfry po kropce, np.
f"{x:.2f}"(3.00,4.50). - Program nie wypisuje komunikatów typu „Podaj liczbę:”.
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 uruchomiono1 czlowiek Ala Zielińska Łódź Lekarka
Człowiek: Imię: Ala Nazwisko: Zielińska Miejsce urodzenia: Łódź Zawód: Lekarka
Test 2
Nie uruchomiono1 student_fizyki Ewa Kamińska Toruń Studentka 222 Fizyka techniczna 3.25 4.8
Student Fizyki: Imię: Ewa Nazwisko: Kamińska Miejsce urodzenia: Toruń Zawód: Studentka Numer albumu: 222 Kierunek studiów: Fizyka techniczna Średnia z laboratoriów: 3.25 Średnia z wykładów: 4.80
Test 3
Nie uruchomiono2 student Bartosz Lis Poznań Student 111 Matematyka czlowiek Ola Mróz Zielona Góra Nauczycielka
Student: Imię: Bartosz Nazwisko: Lis Miejsce urodzenia: Poznań Zawód: Student Numer albumu: 111 Kierunek studiów: Matematyka Człowiek: Imię: Ola Nazwisko: Mróz Miejsce urodzenia: Zielona Góra Zawód: Nauczycielka
Test 4
Nie uruchomiono3 student_fizyki Maria Skłodowska Warszawa Fizyk 1867 Fizyka 5 5 student Mikołaj Kopernik Toruń Astronom 1473 Astronomia student_fizyki Jan Nowak Opole Student 999 Fizyka medyczna 3.5 2.75
Student Fizyki: Imię: Maria Nazwisko: Skłodowska Miejsce urodzenia: Warszawa Zawód: Fizyk Numer albumu: 1867 Kierunek studiów: Fizyka Średnia z laboratoriów: 5.00 Średnia z wykładów: 5.00 Student: Imię: Mikołaj Nazwisko: Kopernik Miejsce urodzenia: Toruń Zawód: Astronom Numer albumu: 1473 Kierunek studiów: Astronomia Student Fizyki: Imię: Jan Nazwisko: Nowak Miejsce urodzenia: Opole Zawód: Student Numer albumu: 999 Kierunek studiów: Fizyka medyczna Średnia z laboratoriów: 3.50 Średnia z wykładów: 2.75