Baustein 1 Meeting 1

Hello World, Datentypen, Variablen, Verzweigungen und Schleifen

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 bes timmtes 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.

2 Datentypen

"Moin world" ist mit Gänsefüßchen abgetrennt. Das bedeutet, dass "Moin world" Daten in Form einer Zeichenkette 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.)

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

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.

Hier ist es sehr hilfreich mit dem Debugger von Thonny zu arbeiten. Mit "Step into" (zweiter Pfeil neben dem Käfer) könnt ihr euch ganz genau ansehen, wie die einzelnen Befehle ausgewertet werden.

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

Neben der Grundrechenarten gibt es noch ein paar weitere Operatoren.

print(13 % 5) # Modulo
print(4 ** 4) # Potenz
3
256

"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(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.. ?

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

Funktioniert das + auch mit Zahlen und Zeichenketten? Probiert das mal aus:

zahl = 42
zeichenkette = "72"
print(zahl + zeichenkette)

4.1 Übung: Einkauf

Angenommen ihr habt 10 Euro dabei und wollt damit eine Schokolade, einen Lolli und eine Achterbahnfahrt kaufen. Wieviel 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

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. 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")
Sonne
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

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.

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
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.

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.

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

8 Zum Üben

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:

cat.gif

Figure 1: Katzenanimation mit einer for-schleife

9 Code

Den Code für dieses Meeting könnt ihr euch hier herunterladen: klick