Baustein 1 Meeting 1
Hello World, Datentypen, Variablen, Verzweigungen und Schleifen
- 1. Hello World
- 2. Datentypen
- 3. Variablen
- 4. Basisoperationen
- 5. Flusskontrolle
- 6. Schleifen
- 7. Kommentare
- 8. Endlos Katzen
- 9. Code
1 Hello World
Beim Lernen von Programmiersprachen ist es eine weit verbreitete Tradition, als Erstes ein Programm zu schreiben, welches einfach nur hello world
ausgibt. Diese Tradition wollen wir natürlich nicht brechen, außer dass wir es auf die Hamburger Art machen.
print("Moin world")
Moin world
🎉
Führt man diese Codezeile in Thonny aus, erscheint die Ausgabe in einem separaten Fenster namens “Shell”. Die shell ist eine rein textuelle Benutzeroberfläche um mit dem Computer zu arbeiten: Der Computer kann hier Ausgaben reinschreiben, und auch der Nutzer kann Text eingeben (das lernen wir später kennen). In diesem Fenster werden wir also die Ausgaben unserer Programme sehen, d.h. alles was durch den print
-Befehl ausgegeben wird. Auch Fehlermeldungen erscheinen hier.
print
ist eine Funktion, das bedeutet das der Print-Aufruf ein bestimmtes Verhalten auslöst. Funktionen werden wir später genauer kennen lernen, und wir werden auch eigene Funktionen schreiben.
Weiterhin ist print
eine sogenannte Built-In Funktion, d.h. sie ist ein fester Bestandteil der Programmiersprache Python und ihr könnt jederzeit auf sie zugreifen. Sie gibt das Funktionsargument auf der Konsole (“Shell” in Thonny) aus. Es gibt eine Vielzahl von built-in Funktionen, einige davon werden wir auch noch im Kurs kennenlernen.
Übungen
1.1 Übung
Gib deinen (und den Namen deines Pairs) aus
1.2 Übung
Inkludiere eine \n
(newline) zwischen den Namen, um die Namen in einer neuen Zeile auszugeben
1.3. EXTRA Übung
Die print funktion akzeptiert optionale
Parameter z.B. sep
, mit welchem wir mehrere übergebene Zeichenketten mit einem bestimmten Trennzeichen trennen können.
Probiere zb. das folgende Ergebnis zu erzeugen:
# | input | ergebnis |
---|---|---|
1.3.1 | '09','12','2021' |
09-12-2021 |
1.3.2 | 'Bob','Alice','Anna' |
Bob & Alice & Anna |
1.3.3 | 'Bob','Alice','Anna' |
Bob & Alice & Anna! |
2 Datentypen
“Moin world” ist mit Gänsefüßchen abgetrennt. Das bedeutet, dass “Moin world” Daten in Form einer Zeichenkette (“string”) sind. Daten können als Literale (dh. explizit in das python-programm reingeschrieben, wie in diesem Fall) vorliegen. Oder sie können aus Funktionsaufrufen erhalten oder importiert werden (dazu später mehr). Es gibt auch Daten in Form von Zahlen. Die Literale dazu sehen dann so aus:
print(1) # Das ist eine Ganzzahl, ein sog. Integer
print(1.2) # Das ist eine Kommazahl, ein sog. Float
1
1.2
Es gibt noch ein paar weitere Datentypen in Python, die wir noch kennenlernen. Mit der built-in Funktion type kann man sich jederzeit den typ zu einem Literal ausgeben lassen.
print(type(1))
print(type(1.2))
<class 'int'>
<class 'float'>
(Tipp: In dem obigen code-block habe ich Funktionsaufrufe geschachtelt. Das kann man beliebig oft tun, geschachtelte Ausdrücke werden immer von innen nach aussen ausgewertet.)
Übungen
2.1 Übung
Probiere eine Kommazahl auszugeben. Schau was passiert, wenn du statt dem .
eine ,
verwendest.
Könnt ihr verstehen was da passiert?
2.2 Übung
Nun verwende die funktion type
um den Datentyp einer korrekten Kommazahl auszugeben. Dann probiert nochmals
was passiert wenn du das .
mit einem ,
austauscht. Könnt ihr den Fehler entziffern?
3 Variablen
Variablen sind ein weiterer wichtiger Bestandteil von Python - Programmen. Sie sind Platzhalter. Zum Beispiel können sie eine Zeichenkette oder Zahl als Wert enthalten. Werte von Variablen können sich mit der Zeit ändern. Sie werden mit der Schreibweise platzhaltername = wert deklariert. Variablennamen dürfen Buchstaben, Unterstriche und Zahlen enthalten (vobei das erste Zeichen des Variablennamens keine Zahl sein darf).
gruß = "Moin"
name = "World"
print(gruß) # Aktueller wert ist 'Moin'
print(name)
gruß = "Hallo" # Wert des Platzhalters wird hier verändert
print(gruß) # Jetzt wird 'Hallo' ausgegeben
print(name)
Moin
World
Hallo
World
Variablen kann man genau so gut mit numerischen Literalen belegen.
zahl = 42.0
print(zahl)
42.0
Zahlen können auch von Zeichenketten überschrieben werden
zahl = "Dies ist eine Zeichenkette"
print(zahl)
Dies ist eine Zeichenkette
Pro-Tipp: Zeichenketten können auch mit dem einfachen Apostroph abgegrenzt werden.
print('Wieder was gelernt')
Wieder was gelernt
Übungen
3.1 Übung
Deklariere eine Variable für dein Alter und deinen Namen und gib diese aus.
3.2 Übung
Füge eine Kommastelle zu deinem Alter hinzu und gib diese nochmal aus.
4 Basisoperationen
Zahlen und Zeichenketten im Program zu haben ist ja schön und gut, aber was können wir damit anstellen? Mit Zahlen können wir z.B. rechnen, in der üblichen Schreibweise.
Code snippet #1
x = 10
y = 20
print(x + y)
z = x + y
print(z + 2)
print(2 * 2)
print(5 - 2)
print(12 / 4)
print(12 // 4) # Ganzzahlige Division
print(10 * (20 + 5)) # Ausdrücke können beliebig geklammert werden
30
32
4
3
3.0
3
250
Debugging
Hier ist es sehr hilfreich mit dem Debugger von Thonny zu arbeiten, dieser wird gestartet indem man auf den Käfer klickt:
Mit “Step into” (zweiter Pfeil neben dem Käfer) könnt ihr euch ganz genau ansehen, wie die einzelnen Befehle ausgewertet werden.
Schlussendlich, hier noch eine witzige Legende zur Herkunft des Wortes “debugging”
Mehr rechnen
Neben der Grundrechenarten gibt es noch ein paar weitere Operatoren.
“Modulo” gibt den Rest bei einer ganzzahligen Division. Um zu verstehen warum 13 % 5 == 3
, kann man das Beispiel vom Teilen von z.B. Keksen auf eine Gruppe Freunde vorstellen. Wenn ihr 13 Kekse auf 5 freunde fair aufteilen wollt (jeder bekommt die gleiche Anzahl, und man kann Kekse nicht weiter teilen), dann bekommt jeder 2 Kekse und 3 bleiben übrig. Die 3
ist der modulo💡.
print(13 % 5) # Modulo
print(4 ** 4) # Potenz
3
256
Übungen
4.1 Übung
Kopiere die folgenden Zeilen und starte den Debugger und erkunde Zeile für Zeile was passiert:
x = 10
y = 20
print(x + y)
z = x + y
print(z + 2)
print(2 * 2)
print(5 - 2)
print(12 / 4)
print(12 // 4) # Ganzzahlige Division
print(10 * (20 + 5)) # Ausdrücke können beliebig geklammert werden
print(13 % 5) # Modulo
print(4 ** 4) # Potenz
4.2 Übung
Mit welcher Operation können wir bestimmen, ob eine Zahl gerade oder ungerade ist? Probiere dies mit den Zahlen:
2
33
40
182012
332425
4.3. Übung
Programmiere die folgenden Rechnungen und gib das Ergebnis aus:
# | input | ergebnis |
---|---|---|
4.3.1 | addiere 27891 mit 2109 |
30000 |
4.3.2 | subtrahiere 891 von 27891 |
27000 |
4.3.3 | dividiere 292 durch 3 |
97.33333333333333 |
4.3.4 | dividiere 292 durch 3 und gib eine Ganzzahl aus |
97 |
4.3.5 | potenziere 14 hoch 4 |
38416 |
Interessantes über Floating Points
Nun lasst uns mal über Floating Points (Fließkommazahlen) sprechen.
print(0.1 + 0.2)
0.30000000000000004
Warum kommt bei 0.1 + 0.2
so ein krummes Ergebnis raus? Wie stellt der Computer “unendliche” Kommazahlen dar wie z.B. 1/3 = 0.333333..
?
Auch wenn es gerade komisch erscheint, es ist wichtig dies im Gedächnis zu behalten.
Zum Beispiel die Zahl 0.1 kann nicht als binäre Zahl representiert werden und daher kommt es bei Fliesskommazahlen (0.1, 0.2, 0.3…) öfters zu kleinen Rundungsfehlern.
Mehr dazu kann man in der offiziellen Python Doku nachlesen,
vorerst genügt es mal zu wissen, dass es zu Rundungsfehler kommen kann, für den Fall, dass ihr etwas mal ganz genau
ausrechnen müsst.
Zeichenketten
Zeichenketten unterstützen übrigens auch die Operationen *
und +
. Mit +
lassen sich zwei Zeichenketten zusammenfügen, und *
wiederholt eine Zeichenkette.
name = "Jürgen"
print("moin " * 5 + name)
name = "Jürgen"
print("moin " + name)
moin moin moin moin moin Jürgen
moin Jürgen
Übungen
4.4 Übung
Funktioniert das zusammenfügen mit +
auch mit Zahlen und Zeichenketten? Spoiler-Alert: Nein, wenn ihr als extra Übung
den Fehler selbst lösen möchtet dann kopiert nur den Code und probiert es aus ohne weiterzulesen.
zahl = 42
zeichenkette = "72"
print(zahl + zeichenkette)
Je nachdem welches Ergebnis wir erlangen wollen, können wir die Zahl mit der Funktion str
in eine Zeichenkette umwandeln
oder die Zeichenkette mit der Funktion int
in eine Zahl. Probiert mal beides aus und erkundet den Unterschied.
4.5 Übung
Deklariere eine Variable für dein Alter und deinen Namen und setze die Variablen im Satz ein, das Ergebnis
sollte so aussehen: Mein Name ist Jennifer und ich bin 24 Jahre alt.
4.6 Übung: Einkauf
Angenommen ihr habt 10 Euro dabei und wollt damit eine Schokolade, einen Lolli und eine Achterbahnfahrt kaufen. Wie viel bleibt übrig? Beginnt damit Variablen für die einzelnen Preise zu deklarieren. Das Ergebnis soll auch einer Variable zugewiesen und dann ausgegeben werden.
Produkt | Preis |
---|---|
Schokolade | 1.5 |
Lolli | 2 |
Achterbahn | 1 |
Mögliche Lösung zur 4.6 Übung: Einkauf
schokolade = 1.5
lolli = 1
achterbahn = 3
kosten = schokolade + lolli * 2 + achterbahn
r_geld = 10 - kosten
print("Kosten:", kosten, "Rückgeld:", r_geld)
Kosten: 6.5 Rückgeld: 3.5
4.7 Übung: Einkauf teilen
Nun nehmen wir mal an ihr habt 30 Euro und wollt für eine Party (mit insgesamt 3 Personen) einkaufen. Hier ist die Einkaufsliste:
Produkt | Preis pro Stk | Anzahl |
---|---|---|
Schokolade | 1.5 | 7 |
Lolli | 2 | 3 |
Aufstrich | 3 | 2 |
Brot | 1 | 4 |
- Rechnet zuerst den Gesamtpreis und das Restgeld aus
- Danach gibt aus wie viel Stück jedes Produkts pro Gast verfügbar sind und wie viel übrig von jedem Produkt übrig bleibt.
5 Flusskontrolle
Häufig möchte man, dass sich ein Programm verschieden verhält je nachdem ob eine bestimmte Bedingung wahr ist, oder nicht. Eine Wahrheitsaussage wird in Python über einen besonderen Datentypen modelliert, den sogenannten ‘Boolean’ (benannt nach dem Mathematiker George Boole). Dieser Datentyp kann nur zwei Werte annehmen: True und False.
print(type(True))
<class 'bool'>
Eine if-Anweisung nimmt einen Wahrheitswert entgegen, und führt den darauffolgenden eingerückten Code-Block nur aus, wenn dieser Wert True ist.
es_ist_heiss = True
if es_ist_heiss:
print("Sonne")
Sonne
In einer else - Anweisung kann der Codeblock angegeben werden, der alternativ ausgeführt werden soll.
es_ist_heiss = True
if es_ist_heiss:
print("Sonne")
else:
print("Schnee")
Sonne
Wahrheitswerte lassen sich auch aus Vorbedingungen berechnen. Zum Beispiel durch einen Zahlenvergleich. Angenommen, ihr möchtet in einem Programm eine Sonne anzeigen, wenn die Temperatur über 20 Grad ist. Ganz einfach:
temperatur = 40
if temperatur <= 0:
print ("Schnee")
if temperatur > 0 and temperatur < 20:
print("Regen")
if temperatur >= 20:
print("Sonne")
Sonne
Es gibt noch weitere Operatoren zum Vergleichen von Zahlen: <, <=, >, >=, !=
und ==
. Kleiner, kleiner gleich, größer, größer gleich ungleich und gleich. (Doppelt-gleich weil das einfache = für Variablenzuweisung belegt ist).
Mit der elif Anweisung können wir beliebig viele Bedingungen hintereinander prüfen. So lässt sich das Temperatur-Beispiel von eben viel einfacher aufschreiben.
temperatur = 8
if temperatur < 10:
print("Temperatur ist kleiner als 10")
elif temperatur < 20:
print("Temperatur ist kleiner als 20")
else:
print("Temperatur ist größer oder gleich 20")
Temperatur ist kleiner als 10
Mit or und and können wir Bedingungen auch verknüpfen:
if sonne_scheint and is_sunday:
print("It's an awesome day")
Solche Ausdrücke werden folgendermaßen ausgewertet:
a | b | a and b | a or b |
---|---|---|---|
True | True | True | True |
True | False | False | True |
False | True | False | True |
False | False | False | False |
Übungen
5.1 Übung
Schreibe ein Programm um zu entscheiden ob wir rausgehen wollen oder nicht.
Gegeben von 2 Boolean Variablen, gib den Text “rausgehen” oder “nicht rausgehen” aus.
wind: False
regen: True
Programmiere das folgende Szenario: Bei wind oder regen → “rausgehen” Bei wind und regen → “nicht rausgehen” Ansonsten “rausgehen”
Mögliche Lösung zu 5.1
wind=False
regen=True
if wind and regen:
print("nicht rausgehen")
elif wind or regen:
print("rausgehen")
else:
print("rausgehen")
5.2 Übung
Versuch die folgende Aufgabe zu programmieren:
Gegeben einer Variable summe
, welche die Summe eines Einkaufs einer Person darstellt.
Wenn die summe
größer gleich 1000 ist, dann ziehe 10% discount von der summe
ab.
Wenn die summe
größer gleich 500 und kleiner als 1000 ist, dann ziehe 5% discount ab.
Liegt die summe
unter 500 ziehe keinen discount ab.
Gib den Wert der summe
am Ende deines Programmes aus.
Nun teste dein Programm, indem du die summe mit den folgenden Werten gleichsetzt:
# | Input | Ergebnis |
---|---|---|
1 | 2000 | 1800 |
2 | 1000 | 900 |
3 | 505 | 479.75 |
4 | 500 | 475.0 |
5 | 499 | 499 |
Mögliche Lösung zu 5.2 Übung
Kleine Notiz: summe-=summe*(10/100)
ist dasselbe wie summe = summe - (summe *(10/100))
.
summe=1000
if summe >= 1000:
summe-=summe*(10/100)
print(summe)
elif summe >= 500 and summe < 1000:
summe-=summe*(5/100)
print(summe)
else:
print(summe)
900
5.3 Übung
Deklariere eine Variable input
und erstelle das folgende Programm:
- wenn die Zahl durch 3 teilbar ist, gib das Wort
Fizz
aus - wenn die Zahl durch 5 teilbar ist, gib das Wort
Buzz
aus - wenn die Zahl durch 3 und 5 teilbar ist, gib das Wort
FizzBuzz
aus - ansonsten gib einfach die Zahl aus
Teste dies mit den Zahlen 1
bis 16
.
6 Schleifen
Schleifen sind immer nützlich, wenn ihr Dinge wiederholt tun wollt. Zum Beispiel wäre es ziemlich nervig eine Codezeile für jeden User zu schreiben, dem ihr eine E-Mail schicken wollt. Mit Schleifen ist sowas aber kein Problem. while- Schleifen führen einen Codeblock aus, solange eine Bedingung wahr ist.
Code snippet #1
i = 1
while i <= 10: # während i kleiner ist als 10
i += 1 # erhöht i um 1. Kurzschreibweise für i = i + 1
print(i)
2
3
4
5
6
7
8
9
10
11
Code snippet #2
b = 1
while b <= 10:
print(b)
b += 2
1
3
5
7
9
Der Ablauf einer Schleife wird in dieser Animation ganz anschaulich dargestellt.
Schleifen umspannen beliebige Code-Blöcke, zum Beispiel kann eine Schleife wieder eine Schleife oder eine If-Else Anweisung enthalten.
Code snippet #3
a = 1
while a < 7:
if a % 2 == 0:
print(a, "ist gerade")
else:
print(a, "ist ungerade")
a += 1
1 ist ungerade
2 ist gerade
3 ist ungerade
4 ist gerade
5 ist ungerade
6 ist gerade
Auch diese Schleife gibt es als Animation. Der Thonny Debugger kann auch besonders bei solchen komplizierten Konstrukten hilfreich sein.
Übungen
6.1 Übung
Verwende den Debugger, um die code snippets von dieser Sektion 6 Schritt für Schritt durchzugehen.
Um dies ein wenig spannender zu machen, versuche vor jedem print
vorherzusagen welcher Wert ausgegeben werden sollte
und vergleiche dann das Ergebnis in der Konsole.
6.2 Übung
Erstelle eine Schleife welche jede 2. Zahl von 0 bis inkl. 20 ausgibt
6.3 Übung
Erstelle eine Schleife welche jede 2. Zahl von 0 bis exkl. 20 ausgibt, wenn diese Zahl gerade ist
6.4 Übung
Versuche nun die soeben erstellte Schleife rückwärts auszugeben, sodass du jede 2. Zahl von 20 bis exkl. 0 ausgibst, wenn diese gerade ist.
6.5 EXTRA Übung: FizzBuzz extension
Nun erweitern wir die vorherige FizzBuzz Übung. Kleiner fun fact
, diese Aufgabe war eine beliebte interview
Frage bei vielen berühmten tech companies.
Erstelle eine Schleife welche die Zahlen von 0 bis inkl. 45 durchgeht und folgendes ausgibt:
- wenn die Zahl durch 3 teilbar ist, gib das Wort
Fizz
aus - wenn die Zahl durch 5 teilbar ist, gib das Wort
Buzz
aus - wenn die Zahl durch 3 und 5 teilbar ist, gib das Wort
FizzBuzz
aus - ansonsten gib einfach die Zahl aus
7 Kommentare
Alles hinter einem #
wird von python ignoriert, so können wir Kommentare schreiben um Nachrichten an unser Zukunfts-Ich zu senden (uns Sachen zu merken)
print("Moin world") # Dieser Funktionsaufruf gibt Text auf der Konsole aus.
Moin world
7.1 Übung
Habt ihr heute etwas gelernt oder einen Fehler ausgebessert? Dann geht in eure Dateien und fügt gelernte Weisheiten als Kommentare hinzu.
8 Endlos Katzen
Es soll eine Schleife programmiert werden, die eine Animation anzeigt. Dafür habe ich eine .gif Animation bereitgestellt, sowie eine Funktion show(i)
, welche das Bild mit der Sequenznummer i anzeigt. Die Sequenznummern gehen von 0 bis 12. Ladet euch die nötigen Dateien herunter (hier klicken), entpackt das Archiv und löst die aufgabe dann in der Datei uebung.py
. Weitere Instruktionen sind in der Datei in Kommentaren beschrieben.
So oder so ähnlich sieht euer Endergebnis aus:
Figure 1: Katzenanimation mit einer for-schleife
9 Code
Den Code für dieses Meeting könnt ihr euch hier herunterladen: klick