IB111 Základy programování František Lachman lachmanfrantisek@mail.muni.cz cvičení 10 22. listopad 2017 Osnova kontrolní otázky struktury objekty s metodami třetí domácí úkol čtvrtý domácí úkol Kontrolní otázky Uveďte příklady dat, pro jejichž reprezentaci se přirozeně hodí objektový zápis. Jaký je rozdíl mezi pojmy třída a objekt? Jaký je význam pojmů atribut, metoda, konstruktor? Co je to „metoda“ a jak ji zapisujeme? 3 Kontrolní otázky Jak přistupujeme k metodám a atributům objektu? Jak vytvoříme objekt? Co znamená self v zápisu metod? 4 Objekty, struktury třída ( class ) je šablonou pro vytváření nových objektů daného typu class Student(object): def __init__(self, name, points): self.name = name self.points = points john = Student('John', 10) print(john.name) # John john.points += 20 print(john.points) # 30 5 Objekty, struktury from turtle import Turtle turtle1 = Turtle() turtle2 = Turtle() turtle1.right(30) turtle1.forward(100) turtle2.right(150) turtle2.forward(200) 6 Objekty, struktury - příklady 10.1.1. Barevné kruhy Vytvořte třídu pro reprezentaci barevného kruhu na daných souřadnicích. 10.1.3. Bod Napište třídu Point pro reprezentaci bodu v rovině (parametry x a y). Potom implementujte funkci distance(point1, point2) , která vypočítá vzdálenost dvou bodů. 7 Objekty s metodami třída de nuje typy objekt a implementace jeho metod (funkcí spljatých s objektem) 8 class Student(object): def __init__(self, name): self.name = name self.points = 0 def add_points(self, new_points): """Pridani bodu studentovi.""" self.points += new_points def __str__(self): """Vraci informacni retezec.""" return '' .format(self.name, self.points) john = Student('John') print(john) john.add_points(20) print(john) 9 Piškvorky 1 Třída Field pro reprezentaci jednoho pole. Vlastnosti: mark - značka na políčku (nebo None ) Metody: is_empty() 10 Piškvorky 2 Třída Board pro reprezentaci hřiště. Inicializace: rows , cols Vlastnosti: fields - reprezentace dvojrozměrného pole rows , cols Metody: __str__() - pěkný výpis šachovnice : 11 Piškvorky 3 Třída Board pro reprezentaci hřiště. Metody: : is_valid_choice(col) - True / False , zda je tah povolen Nesmíme být mimo pole ani v plném sloupci. 12 Piškvorky 4 Třída Board pro reprezentaci hřiště. Metody: : add_mark(col) - přidá značku do sloupce 13 Piškvorky 5 Třída Board pro reprezentaci hřiště. Metody: : is_won_for_sequence(sequence) - True / False , zda v daném seznamu s prvky typu Field je výherní řada. 14 Piškvorky 6 Třída Board pro reprezentaci hřiště. Metody: : is_won_for_sequence(sequence) - True / False , zda v daném seznamu s prvky typu Field je výherní řada. is_game_over() - True / False , zda je konec hry 15 Piškvorky 7 Třída Board pro reprezentaci hřiště. Metody: : is_won_for_sequence(sequence) - True / False , zda v daném seznamu s prvky typu Field je výherní řada. is_game_over() - True / False , zda je konec hry who_won() - Vrátí výherní znak 16 Piškvorky 8 Třída HumanPlayer reprezentující hráče Inicializace: name Vlastnosti: name Metody: strategy(state, mark) - Vrátí tah zadaný uživatelem. 17 Piškvorky 9 Třída ComputerPlayer reprezentující počítač Inicializace: name Vlastnosti: name Metody: strategy(state, mark) - Vrátí vhodný tah. 18 Piškvorky 10 Třída TicTacToe reprezentující hru Vlastnosti: statistics - slovník s body Metody: play(player1, player2, board) 19 Čtvrtý domácí úkol 40 bodů soft deadline: středa 29. 11. 12:00 (Zpětná vazba.) hard headline: neděle 3. 12. 23:59 Dodržet strukturu, spustitelný kód. PEP8, pojmenování proměnných, komentáře. Není na chvilu. Začít včas! (Mimo jiné je vhodnou přípravou na vnitro.) 20 Čtvrtý domácí úkol Ženský rodokmen Mater certa, pater incertus est. 1. Reprezentace rodokmenu žen 2. Reprezentace klubů 3. Načítání databáze ze souboru 4. Vyhledávání v rodokmenu 21 Čtvrtý domácí úkol 1. Reprezentace rodokmenu žen: Třída Woman : inicializace: name , born_year , hair_color name , born_year , mother , daughters , hair_color get_age() , add_daughter(daughter) 22 Čtvrtý domácí úkol 2. Reprezentace klubů: Třída Club : inicializace: name , established_year name , established_year , members add_member(member) 23 Čtvrtý domácí úkol 3. načítání databázeze souboru: Metoda load_from_file(file_name="people-data.txt") Vrací dvojici [ Woman ], [ Club ] Soubor má následující formát: Mary,1920,blond Janet,1942,brown # CHILDREN Mary->Janet # CLUBS 90's girls,1995:Sharon,Betty,Carol Jane Austen fans,1880:Patricia,Maria,Ruth,Sharon,Pamela Empty club,2000: 24 Čtvrtý domácí úkol 4. Vyhledávání v rodokmenu last_born_offspring(person) -> Woman Vrátí nejmladšího potomka. get_younges_mother(womans) -> Woman Najde ženu, která měla dítě v nenižším věku. get_common_members(club1, club2) -> [ Woman ] Vrátí ženy, které jsou členkami obou klubů. 25 Závěr struktury objekty s metodami třetí domácí úkol čtvrtý domácí úkol druhá vnitrosemestrálka (objekty, rekurze) 6.12. 26