Baustein 1 Meeting 4

1 Lösungen zu den letzten Aufgaben

(Alle Lösungen sind nur Beispiele, es gibt viele Wege die zur Lösung führen)

1.1 Funktionen

def combat(health, damage):
    difference = health - damage
    if difference < 0:
        return 0
    else return difference
print(combat(health=100, damage=20))
print(combat(health=10, damage=30))

Oder einfacher:

def combat(health, damage):
    return max(health - damage, 0)
def abbrevName(name):
    parts = name.split(" ")
    return parts[0][0].upper() + "." +  parts[1][0].upper()
def century(year):
    return ((year-1) // 100) +1

1.2 Number guessing game

user_eingabe = None
geheime_zahl = 42
while user_eingabe != geheime_zahl:
    user_eingabe = int(input("Bitte gebe eine Zahl ein: "))
    if user_eingabe > geheime_zahl:
        print("Zu hoch geschätzt!")
    elif user_eingabe < geheime_zahl:
        print("Zu niedrig geschätzt!")
    else:
        print("Richtig")

2 Mengen

Mengen sind ungeordnete Sammlungen von Objekten. Sie können kein Element mehrfach enthalten:

my_numbers = {1, 2, 3, 4, 5, 5, 6, 6}
print(my_numbers)
{1, 2, 3, 4, 5, 6}

Wie auch bei Listen und Dictionaries gibt es eine Built-in Funktion die bestimmte Objekte in Mengen umwandeln kann. Nochmal zur Übersicht:

list(...)

dict(...)

set(...)

Erzeugen Listen, Wörterbücher und Mengen aus ihren Argumenten (wenn möglich).

letter_set = set("A Python Tutorial")
print(letter_set)
meine_liste = ["A","B","C","A","B","C"]

leeres_wörterbuch = dict()

liste_ohne_duplikate = list(set(meine_liste))
{'t', 'h', 'P', 'r', 'A', 'u', 'l', 'T', 'o', ' ', 'y', 'i', 'a', 'n'}

Weitere interessante Operationen mit sets sind die sogenannten Mengenoperationen.

saeugetiere = {"löwe", "pferd", "eierlegende wollmilchsau", "schnabeltier", "giraffe", "affe"}
ovipare = {"rabe", "spatz", "eierlegende wollmilchsau", "schnabeltier", "tucan", "papagei"}

# Welche Tiere legen Eier und sind Säugetiere?

print(saeugetiere & ovipare)

# Welche tiere legen nur Eier

print(ovipare - saeugetiere)

# Welche tiere legen Eier, oder sind Säugetiere, aber nicht beides?

print(ovipare ^ saeugetiere)

# Alle tiere (Vereinigung beider mengen)

print(saeugetiere | ovipare)
{'schnabeltier', 'eierlegende wollmilchsau'}
{'tucan', 'spatz', 'rabe', 'papagei'}
{'tucan', 'löwe', 'pferd', 'papagei', 'giraffe', 'affe', 'rabe', 'spatz'}
{'tucan', 'löwe', 'affe', 'rabe', 'pferd', 'schnabeltier', 'eierlegende wollmilchsau', 'papagei', 'giraffe', 'spatz'}

2.1 Übung: gemeinsame Buchstaben

Die selbe Übung, in drei Schwierigkeitsgraden:

  • Deklariere zwei Zeichenketten text_1 und text_2. Versuche dann die Buchstaben auszugeben, die in beiden Zeichenketten enthalten sind.
  • Schreibe eine Funktion gemeinsame_buchstaben(text_1, text_2), welche diese gemeinsamen Buchstaben entweder ausgibt, oder als Rückgabewert liefert.
  • Schreibe ein Programm, welches zwei Zeichenketten vom User entgegennimmt, und dann die gemeinsamen Buchstaben ausgibt.

3 Objektorientierte Programmierung

3.1 Klassen und Objekte

Zusammenhänge in der echten Welt sind sehr komplex. Computer hingegen sind eigentlich ziemlich doof: Sie können nur mit exakten Rechenregeln arbeiten und stumpf Befehle ausführen. Um die Welt "berechenbar" zu machen braucht man also immer ein Modell: Ein vereinfachtes Abbild der Wirklichkeit.

Objektorientierung ist eine Möglichkeit, Zusammenhänge zu modellieren. Die Grundidee ist, jede Sache in der echten Welt als Objekt mit einem Zustand und fest definiertem Verhalten darzustellen.

Klassen sind Baupläne für Objekte. Sie beschreiben, welche Funktionalität ein konkretes Objekt hat, und welche Zustände es besitzt. Objekte sind dann konkrete Instanzen von Klassen.

Wann ist also der Unterschied zwischen Datenstrukturen und Objekten? Datenstrukturen verstecken Funktionalität und bieten Daten an, Objekte bieten Funktionalität und verstecken Daten.

Genauere Erklärung und Diskussion über OOP im Kurs

class Bike:

    def __init__(self, model, color):
        self.model = model
        self.color = color
        self.current_speed = 0

    def speed_up(self):
        self.current_speed += 5

    def slow_down(self):
        self.current_speed -= 5

    def brake(self):
        self.current_speed = 0

    def describe(self):
        print(self.model, "has color", self.color,
              ", current speed is", str(self.current_speed), "km/h")

mountain_bike = Bike("mountain bike", "black")
mountain_bike.speed_up()
mountain_bike.describe()

city_bike = Bike("city bike", "pink")
city_bike.speed_up()
city_bike.speed_up()
city_bike.speed_up()
city_bike.describe()
city_bike.brake()
city_bike.describe()
mountain bike has color black , current speed is 5 km/h
city bike has color pink , current speed is 15 km/h
city bike has color pink , current speed is 0 km/h

3.2 Übung: Objektorientiertes Bankkonto

Implementiert die Klasse Bankkonto.

  • Ein Bankkonto hat eine eindeutige ID und einen Kontostand (anfänglich 0)
  • Man kann einen bestimmten Betrag einzahlen und auszahlen
  • Man kann sich den aktuellen Kontostand ausgeben lassen

3.3 Übung (fortgeschritten): Piraterie

4 Weiterführend: Python lernen

Der erste Teil des Kurses ist vorbei und ihr möchtet alleine weitermachen? Kein Problem, es gibt eine Vielzahl von Möglichkeiten.

4.1 CodeCombat

Von einer Teilnehmerin empfohlen, kann man hier spielerisch am Ball bleiben: Link

4.2 Coding - Katas

Unter Entwicklern hat sich eine bestimmte Trainingsmethode etabliert: Die sogenannten Katas (der Begriff kommt aus dem Kampfsport). Hierbei schreibt ein Entwickler ein Problem auf, dass es zu lösen gilt. Zusätzlich schreibt der Herausforderer Test-Code der Überprüft, ob das Problem richtig gelöst wurde. Der andere Entwickler muss dann versuchen, das Problem so zu lösen dass der Test erfolgreich verläuft.

Es gibt eine Website, auf der man diese Katas in allen Schwierigkeitsgraden lösen kann: www.codewars.com. Meldet euch gerne dort an (wenn ihr wollt, tretet dem Clan "moinworld" bei). Eine unterhaltsame Möglichkeit zum Üben :)

Viele Aufgaben aus diesem Kurs habe ich übrigens von dieser Website. Hier die komplette Liste, falls ihr dafür die Punkte holen wollt:

https://www.codewars.com/kata/drink-about/python

https://www.codewars.com/kata/thinkful-logic-drills-traffic-light

https://www.codewars.com/kata/sum-of-multiples

http://www.codewars.com/kata/century-from-year/train/python

http://www.codewars.com/kata/grasshopper-terminal-game-combat-function-1/train/python

http://www.codewars.com/kata/abbreviate-a-two-word-name/train/python

Für unser Erfahrungslevel sind Kata der Schwierigkeitsstufe 8 und 7 (sprache Python!) geeignet.

http://www.codewars.com/kata/search/python?q=&r%5B%5D=-8&r%5B%5D=-7&beta=false

4.3 Online - Kurse

Generell eine gute Resource um selbst zu lernen ist der Kurs von codecadamy: https://www.codecademy.com/learn/learn-python Dort gibt es interaktive Erklärungen zum Stoff und auch Übungsaufgaben die ganz genau erklärt und mit Hinweisen bestückt sind. Aber vorsicht: Dieser Kurs lehrt die Python Version zwei. Ist aber wie bereits erwähnt nicht schlimm, da der Unterschied zwischen Python 2 und 3 nicht groß ist. Es gibt auch einen Kurs für Python3, Kostet aber ziemlich viel (Mitgliedschaft für ~ 20€ /Monat), immerhin gibt es eine kostenlose 7 Tage mitgliedschaft.

Darüber hinaus gibt es noch unzählige Kurse, sogar mobile Apps zum Lernen. Die habe ich natürlich nicht alle ausprobiert, aber generell sind solche Kurse zumindest vom Inhalt in guter Qualität. Das beste ist, etwas zu suchen was einem Spass macht und voran bringt.

4.4 Eigene Projekte

Für die Motivation super: Ein eigenes Projekt ausdenken (nicht zu schwierig!) und einfach kraft Suchmaschine und Entwicklerforen wie stackoverflow.com / moinworld slack umsetzen.