Inhaltsverzeichnis

Python Grundlagen

Du hast mit Kara bereits die wichtigsten Konzepte von Python kennengelernt: Sequenz, Iteration und Selektion. Zudem hast du erste Algorithmen umgesetzt. In diesem Kapitel wirst du systematisch dein Wissen über Operatoren und Kontrollstrukturen komplettieren.

Gruppenpuzzle

Kommentare

Auf den unteren Zeilen des obigen Beispiels findest du Kommentare. Diese beginnen mit einem Hashtag #. Sämtlicher Code der folgt, wird von Python ignoriert. Damit kann man seinem Code zum Beispiel Überschriften oder Erklärungen anfügen. Möchte man Kommentare über mehrere Zeilen schreiben, verwendet man drei Anführungszeichen:

# single line comment
 
"""
multi
line
comment
"""

Leitfragen

Vergleichsoperatoren

Für Bedingungen in Verzweigungen und Schleifen benötigen wir Vergleichsoperatoren:

Operator Erklärung
x == 4 x ist Zahl und hat Wert von genau 4
s == "Hallo" s ist String und hat genau den Inhalt „Hallo“
x != 4 x ist NICHT eine Zahl vom Wert (Ungleich-Operator).
x > 5 x ist Zahl grösser als 5
x >= 5 x ist Zahl grösser gleich 5
x < 5 x ist Zahl kleiner als 5
x <= 5 x ist Zahl kleiner gleich 5
5 <= x <= 10 x ist Zahl zwischen 5 und 10 (inklusive)

Leitfragen

Mathematische Operationen

Neben dem + gibt es eine Vielzahl an mathematischen Operatoren:

Funktion Python-Code Resultat
Addition 5+2 7
Subtraktion 5-2 3
Multiplikation 5*2 10
Division (Nachkommastellen) 5/2 2.5
Ganzzahldivision 5//2 2
Modulo (Rest der Ganzzahl-Division) 5%2 1
Hoch (z.B. 5 hoch 2) 5**2 25
Wurzel (z.B. Wurzel von 2, sqrt für square-root) sqrt(2) 1.4142135...

Achtung: Für sqrt muss noch das Mathe-Modul importiert werden:

from math import *

Leitfragen

Strings (Zeichenketten)

Strings werden bekanntlich mit Anführungs- und Schlusszeichen geschriebene, zum Beispiel:

name = "Albert Einstein" # Ob doppeltes Anfuehrungs-/Schlusszeichen oder....
job = 'Physicist'        # ... einfaches spielt keine Regel. In einem String darf man einfach nicht mischen.

Um eine schöne Ausgabe mit verschiedenen Variablen egal welchen Typs zu erhalten, verwendet man Format-Strings. Sobald vor dem ersten Anführungszeichen der Buchstabe f steht, können Variablen mittels geschweifter Klammern in den String eingebettet werden.

age = 42 first_name = 'Albert' last_name = 'Einstein' print(f'My name is {first_name} {last_name} and I am {age} years old')

String-Verkettung

Einzelne Strings können auch mit + zusammengefügt werden. Der Plus-Operator hat je nach Typ unterschiedliche Bedeutung:

a = 42 # eine Zahl b = '25' # ein String # Zahl umwandeln in String c = str(a) + b # OK: + bedeutet String-Verkettung, c ist der String '4225' print(f'Strings: {c=}') # String umwandeln in Zahl c = a + int(b) # OK: + bedeutet Ganzzahl-Addition, c ist die Ganzzahl (int) 67 print(f'Zahlen: {c=}') # Gemischte Typen: Fehler c = a + b

Praktisch sind auch die Befehle s.lower() und s.upper(), mit denen ein String s in kleinbuchstaben, resp. GROSSBUCHSTABEN umgewandelt werden.

Stringformatierung

Leitfragen

Zufallszahlen

Mithilfe des random-Moduls können ganz einfach Zufallszahlen erzeugt werden. Folgender Code simuliert den Wurf eines Würfels:

import random z = random.randint(1,6) # bestimmt eine Zufallszahl aus Bereich 1,2,3,4,5,6 print(z)

Beachte, dass die Zufallsfunktion randint heisst. Dies steht für 'random integer', also 'zufällige ganze Zahl'. Ganze Zahlen sind Zahlen ohne Nachkommastellen, also $\ldots, -3,-2,-1,0,1,2,3,\ldots$.

Verzweigungen im Detail

Im Kapitel haben wir bereits if-else-Verzweigungen kennengelernt:

if BEDINGUNG:
    # Codeblock der ausgeführt wird,
    # falls (if) Bedingung erfüllt (True) ist
else:
    # Codeblock der ausgeführt wird,
    # der ansonsten ausgeführt wird,
    # falls also Bedingung NICHT erfüllt ist (False)

Diese sind sehr praktisch, wenn man im Code zwischen zwei verschiedenen Fällen unterscheiden will.

Gibt es aber drei oder mehr Fälle, muss man if-else-Verzweigungen ineinander verschachteln, wie zum Beispiel in der Schnaps, Bier & Sirup Aufgabe. Dadurch wird der Code sehr schnell unübersichtlich und fehleranfällig. Es ist dann besser, eine if-elif-else-Verzweigung zu programmieren, da man mit dieser beliebig viele Fälle unterscheiden kann:

if BEDINGUNG1:
    # Code, falls BEDINGUNG1 erfüllt ist.
elif BEDINGUNG2:
    # Code, falls BEDINGUNG2 erfüllt ist, aber nicht BEDINGUNG1.
else:
    # Code, falls keine der Bedingungen erfüllt ist.

Bemerkungen:

Aufgaben H

Aufgabe H1

Python ist super im rechnen und macht jeden Taschenrechner vergessen. Studiere das folgende kurze Kapitel zu den mathematischen Operationen, welches eine Übersicht über die wichtigsten mathematischen Rechenoperationen beinhaltet.

Berechne mit Python und gib das Resultat aus:

  1. Addiere $7777$ und $8888$
  2. Subtrahiere $27312$ von $101432$
  3. Wie oft kommt $29$ in $1447$ vor?
  4. Ist $1764$ eine Quadratzahl oder nicht? Beispiel für Quadratzahlen: $49$, weil $7^2 = 49$

Bemerkung: Einzelne Werte können auch in Variablen gespeichert werden. Dann kann mit den Variablen gerechnet werden. Es macht den Code aber nur länger.

Aufgabe H2: Personendetails

Studiere das Kapitel zu Strings.

Schreibe ein Programm, in welchem eine Person der Reihe nach aufgefordert wird, ihren Namen, Wohnort und Alter (als Zahl, nicht String) einzugeben. Die Werte werden in passenden Variablen gespeichert. Die Details zur Person werden dann in einem schön formatierten String ausgegeben, z.B. "Fritz wohnt in Romanshorn und ist 42 Jahre alt!"

Aufgabe H3: Verbotenes Wort

Studiere das Kapitel zu Vergleichsoperatoren.

Schreibe ein Programm, in welchem man aufgefordert wird, ein Wort einzugeben. Alle Eingaben sind ok bis auf eine: Die des verbotenen Wortes "Voldemort". Gibt man ein anderes Wort ein, erhält man die Rückmeldung, dass das Wort in Ordnung sei. Sonst soll eine deutliche Warnung angezeigt werden mit der Aufforderung, dieses Wort nie wieder einzugeben! Verwende dazu den Ungleich-Operator!

Aufgabe H4: Kettenrechnung

Weise der Variablen x den Wert 7 zu. Verändere nun die Variable nacheinander wie folgt:
  • verdopple sie
  • multipliziere mit 100
  • dividiere ganzzahlig (keine Nachkommazahlen) durch 80
  • rechne hoch drei
  • subtrahiere 13
  • ziehe die Quadratwurzel
  • dividiere durch 10
Nun solltest du wieder 7 erhalten.

Aufgabe H5: Ganzzahldivision

Es sollen zwei Zahlen eingelesen werden. Der Code berechnet dann die Ganzzahldivision inklusive Rest der beiden Zahlen und gibt diese in einem formatierten String aus.

Beispiel: Werden 23 und 5 eingegeben, so ist die Ausgabe: "23 : 5 = 4 Rest 3"

Aufgabe H6: Modulo

Kara soll dem Gang folgen bis sie vor einem Pilz steht. Unterwegs soll sie alle 5 Felder ein Blatt ablegen.

Tipps:

TTTTTTTTTTT T> T TTTTTTTTT T T T T T TTTTT T T T T MT T T T T TTT T T T T T T T TTTTTTT T T T TTTTTTTTTTT cells = 0 while not kara.mushroomFront(): if kara.treeFront(): kara.turnRight() cells = cells + 1 if cells % 5 == 0: kara.putLeaf() kara.move() TTTTTTTTTTT T L T TTTTTTTTTLT T L T T TLTTTTT T T T T >MT T T T T TTTLT T T TL TLT T TTTTTTT T TL L T TTTTTTTTTTT

Aufgaben J

Vorwissen: Verzweigungen im Detail

Bei diesen Aufgaben geht es um folgendes:

Aufgabe J1

Das Programm soll:
  • den Benutzer nach dem Alter fragen
  • Ausgeben, ob der Benutzer Schnaps, Bier oder Sirup trinken darf.

Programmiere die Schnaps, Bier & Sirup Aufgabe mit einer if-elif-else-Verzweigung.

Aufgabe J2

Die Benutzerin wird aufgefordert, eine Zahl einzugeben. Der Code analysiert, ob die Zahl positiv, Null oder negativ ist und gibt eine entsprechende Nachricht.

Aufgabe J3

Schritt 1

Schreibe ein kleines Mathe-Quiz-Spiel. Der Benutzer soll eine Additionsrechnung erhalten, die er lösen soll. Nachdem er das Resultat eingegeben hat, soll er die Rückmeldung erhalten, ob das Resultat korrekt war oder nicht.

Schritt 2

Erweitere nun dein Mathe-Quiz. In diesem soll die Aufgabe per Zufall generiert werden. Nutze den Zufallsgenerator von Python, um die beiden Zahlen, die addiert werden sollen, zufällig zu wählen.

Dazu musst du das random-Modul einbinden.

import random # schreibe dies ganz oben in deinem Code
...
x = random.randint(0,10) # wählt zufällig eine Zahl aus den Zahlen 0,1,2,3,...,9,10 aus
...
Schritt 3

Erweitere nun dein Spiel wie folgt: Insgesamt sollen 10 Runden gespielt werden, wobei in jeder Runde eine Zufallsaufgabe generiert wird (wie in Schritt 2). Es soll mitgezählt werden, wie viele Aufgaben richtig gelöst wurden. Am Schluss soll der Spieler eine entsprechende Rückmeldung erhalten, z.B.: Du hast 7 von 10 Aufgaben richtig gelöst.

Schritt 4

Gleich wie Schritt 3, die Rückmeldung soll aber erweitert werden. Je nach erreichter Anzahl Punkte soll eine andere Meldung erscheinen:

Erreichte PunkteMeldung
10Perfekt, du hast alle Aufgaben richtig gelöst!
8-9Sehr gut, du hast fast alle Aufgaben richtig gelöst!
6-7Nicht schlecht, du hast mehr als die Hälfte der Aufgaben richtig gelöst!
5Genügend, du hast die Häfte der Aufgaben richtig gelöst
1-4Ungenügend, du hast leider weniger als die Hälfte der Aufgaben richtig gelöst
0Leider hast du alle Aufgaben falsch gelöst. Zurück in die Primarschule!

Aufgabe J4 (optional)

Mache eine Kopie von deinem Mathe-Quiz. Erweitere deinen Code nun so, dass neben der Addition auch Subtraktionen und Multiplikationen vorkommen können. Die Division sollte weggelassen werden, da es dort schnell Aufgaben gibt, die man kaum lösen kann. Welche der drei Operationen an der Reihe ist, soll ebenfalls der Zufall entscheiden.