Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
talit:oop_einfuehrung [2022-06-05 13:10] – [Auftrag 1] scatalit:oop_einfuehrung [2023-05-03 08:33] (aktuell) – [Auftrag 2: OOP im Game] sca
Zeile 3: Zeile 3:
 ===== - Klassen und Objekte ===== ===== - Klassen und Objekte =====
  
-Studiere die Slides für eine detaillierte Einführung in die **objektorientierte Programmierung (OOP)**. Hier im Wiki sind einfach die allerwichtigsten Grundlagen angegeben.+Studiere die {{ :talit:2022_talit_oop_python_i.pdf|Slides}} für eine detaillierte Einführung in die **objektorientierte Programmierung (OOP)**. Hier im Wiki sind einfach die allerwichtigsten Grundlagen angegeben.
  
 In der objektorientierten Programmierung schreibt man **Klassen**, von welcher man dann **Objekte** instanziiert.  In der objektorientierten Programmierung schreibt man **Klassen**, von welcher man dann **Objekte** instanziiert. 
Zeile 66: Zeile 66:
 {{ :talit:inthatcase.jpg?400 |}} {{ :talit:inthatcase.jpg?400 |}}
  
-==== Auftrag 1 ====+==== Auftrag 1: Klasse Person ====
  
-   1. Implementiere selbst die Klasse Person. Kein Copy-Paste, so viel wie geht aus Erinnerung anstelle Abschreiben +   1. Implementiere selbst die **Klasse Person**. Kein Copy-Paste, so viel wie geht aus Erinnerung anstelle Abschreiben 
-   1. Erstelle selbst mind. vier Objekte der Klasse von echten Personen (du selbst, Kolleg:innen, Lehrpersonen, siehe ISY oder nachfragen) +   1. Instanziiere selbst mind. vier **Objekte** der Klasse von echten Personen (du selbst, Kolleg:innen, Lehrpersonen, siehe ISY oder nachfragen) 
-   1. Füge weitere Attribute hinzu: Telefonnummer & Mail-Adresse+   1. Füge weitere **Attribute** hinzu: Telefonnummer & Mail-Adresse
    1. Erweitere `get_info()`: Andere Info für LP und STU:    1. Erweitere `get_info()`: Andere Info für LP und STU:
      1. für LP: "Name: Bert Schreiner, Adresse: … , … , … , Typ: LP, Position: HL"      1. für LP: "Name: Bert Schreiner, Adresse: … , … , … , Typ: LP, Position: HL"
Zeile 76: Zeile 76:
      1. Zeige auch neue Attribute darin an.      1. Zeige auch neue Attribute darin an.
    1. Implementiere Klassenmethode `increase_klasse()`. Gebe Fehlermeldung aus, falls für Lehrperson aufgerufen wird.    1. Implementiere Klassenmethode `increase_klasse()`. Gebe Fehlermeldung aus, falls für Lehrperson aufgerufen wird.
-   1. Implementiere Klassenmethode `get_age()`. Tipp: Verwende datetime-Modul+   1. Implementiere Klassenmethode `get_age()`. Tipp: Verwende datetime- und dateutil-Module
  
-{{:talit:pasted:20220605-144229.png}}+<nodisp 2> 
 +++++Lösung| 
 +<code python> 
 +from datetime import datetime 
 +from dateutil import relativedelta 
 + 
 +class Person: 
 +    def __init__(self,_name,_address,_birthday,_phone,_mail,_type,_position,_klasse): 
 +        self.name = _name 
 +        self.address = _address 
 +        self.birthday = _birthday 
 +        self.phone = _phone 
 +        self.mail = _mail 
 +        self.type = _type 
 +        self.position = _position 
 +        self.klasse = _klasse # can't use 'class' bc is keyword 
 + 
 +    def get_info(self): 
 +        str_all = f"Name: {self.name}, Adresse: {self.address}, Geburtstag{self.birthday}, Phone{self.phone}, Mail{self.mail}, Typ: {self.type
 +        if self.type == "LP": 
 +            return  str_all + f"Position: {self.position}" 
 +        else: 
 +            return str_all + f"Klasse: {self.klasse}" 
 + 
 +    def get_age(self): 
 +        birthdate = datetime.strptime(self.birthday,"%d.%m.%Y"
 +        now = datetime.now() 
 +        diff = relativedelta.relativedelta(now,birthdate) 
 +        return diff.years 
 + 
 +    def change_klasse(self,x=1): 
 +        yr = int(self.klasse[0]) + x 
 +        self.klasse = str(yr) + self.klasse[1::
 + 
 +# instantiate objects, store in list 
 +persons = [ 
 +    Person("Bert Schreiner", "Hoehenweg 8, 8590 Romanshorn TG", "07.12.1969","071 847 41 23","scb@ksr.ch","LP","HL",None), 
 +    Person("Monika Hohler", "Seeblickstrasse 17, 9306 Freidorf", "24.05.1990","071 369 54 11", "hom@ksr.ch", "LP","LB1",None), 
 +    Person("Verena Keller", "Saentisstrasse 22, 8580 Amriswil", "03.02.2007","071 345 67 78", "verkelle@ksr.ch", "STU",None,"1Fd"), 
 +    Person("Heiri Meier", "Kreisstrasse 3, 9322 Egnach", "11.09.2005", "071 499 85 31","heiri@rasenmeier.ch", "STU",None,"3Mfz"
 +
 + 
 +sca = Person("Andreas Schärer","Weinfelden","03.09.1987","123","sca@ksr.ch","LP","HL",None) 
 +print(sca.get_age()) 
 + 
 +verkelle = Person("Verena Keller", "Saentisstrasse 22, 8580 Amriswil", "03.02.2007","071 345 67 78", "verkelle@ksr.ch", "STU",None,"1Fd"
 +heimeier = Person("Heiri Meier", "Kreisstrasse 3, 9322 Egnach", "11.09.2005", "071 499 85 31","heiri@rasenmeier.ch", "STU",None,"3Mfz"
 +verkelle.change_klasse() # Verena 
 +heimeier.change_klasse(-1) # Heiri has to repeat a year 
 +print(verkelle.klasse) 
 +print(heimeier.klasse) 
 +</code> 
 +++++ 
 +</nodisp>
  
-==== Auftrag 2 ====+==== Auftrag 2: OOP im Game ====
  
-   1. Überlege dir mit einer Kolleg:in:+   1. Überlege dir mit einer Kolleg:in und mache Notizen:
      1. Wie könnte man OOP im Game von früher sinnvoll einsetzen?      1. Wie könnte man OOP im Game von früher sinnvoll einsetzen?
      1. Welche Klasse(n) & Objekte braucht es?      1. Welche Klasse(n) & Objekte braucht es?
      1. Welche Attribute und Methoden haben diese?      1. Welche Attribute und Methoden haben diese?
    1. Bespreche mit der Lehrperson    1. Bespreche mit der Lehrperson
-   1. Programmiere!+   1. Setze dies dann in der nächsten Aufgabe um.
  
  
  • talit/oop_einfuehrung.1654434612.txt.gz
  • Zuletzt geändert: 2022-06-05 13:10
  • von sca