Zuerst wollen wir unsere Programmierkenntnisse etwas auffrischen und bereits Bekanntest repetieren.
Variablen
Variablen schreiben wir immer mit Kleinbuchstaben. Zudem dürfen diese nicht mit einer Zahl beginnen und ausser dem Unterstrich _ keine Sonderzeichen beinhalten.
Variablen werden eingesetzt, um Werte zwischenzuspeichern. Diese Variablen können in nachfolgenden Anweisungen wieder verwendet werden, um auf die Werte zuzugreifen.
Um einen Wert in einer Variablen zu speichern, wird die Zuweisung verwendet. Dabei steht die Variable, die den Wert aufnehmen soll, stets auf der linken Seite des Zuweisungsoperators =, während der zu speichernde Wert oder die Rechnung immer rechts steht:
a = 123
b = 1.5
flaeche = a * b
gefunden = True
feld_leer = False2
3
4
5
Es ist möglich und erlaubt, den Inhalt einer Variablen zu verändern, indem der Inhalt in der gleichen Anweisung gelesen und überschrieben wird:
anzahl = 1
...
anzahl = anzahl + 12
3
Ausgabe
Mit Hilfe der Funktion print("Text") kann Text ausgegeben werden, dabei können auch Variablen verwendet werden. Der Name der Variable darf dabei nicht in den Anführungszeichen stehen, da dieser sonst wörtlich ausgegeben wird. Variablen und fixer Text werden mittels +-Operator aneinander gehängt:
wort = "Welt"
print("Hallo " + wort)
zahl = 13
print("Die Zahl lautet: " + str(zahl))2
3
4
5
Achtung
Enthält eine Variable eine Zahl und nicht einen String (also eine Zeichenfolge), so muss diese vor der Ausgabe mit der Funktion str() in einen String umgewandelt werden.
Eingabe
Mit Hilfe der Funktion input() kann eine Benutzereingabe angefordert werden. Der eingegebene Wert wird in jedem Fall als String zurückgeliefert und kann in einer Variablen gespeichert werden:
print("Gib ein Wort ein:")
wort = input()
print("Das Wort lautet: " + wort)2
3
Soll stattdessen eine Zahl eingegeben werden, mit der gerechnet werden kann, so muss der Eingabewert mit der Funktion int() in eine Zahl umgewandelt werden:
print("Gib eine Zahl ein:")
zahl = int(input())
quadrat = zahl * zahl
print("Das Quadrat der eingegebenen Zahl lautet: " + str(quadrat))2
3
4
Vergleiche
In Python können Werte auf folgende Arten verglichen werden:
| Vergleich | Mathematisch | Python |
|---|---|---|
| gleich | a == b | |
| nicht gleich | a != b | |
| kleiner als | a < b | |
| kleiner als oder gleich | a <= b | |
| grösser als | a > b | |
| grösser als oder gleich | a >= b |
Gleichheit und Zuweisung
Die Gleichheit wird durch zwei aufeinanderfolgende Gleichheitszeichen == geprüft. Ein einzelnes Gleichheitszeichen = wird für die Zuweisung eines Werts an eine Variable verwendet.
Verzweigungen
Verzweigungen mit if-Anweisungen werden wie folgt verwendet:
if(zwingend vorhanden),elif(optional, aber mehrfach möglich) undelse(optional, aber nur einmal und ohne zusätzliche Bedingung)
Am Ende der Zeile steht jeweils ein Doppelpunkt. Nachfolgende Zeilen, die nur unter der genannten Bedingung ausgeführt werden, werden eingerückt.
if a < 0:
# Anweisungen für den Fall, dass a negativ ist
elif a > 0:
# Anweisungen für den Fall, dass a positiv ist
else:
# Anweisungen für den Fall, dass a gleich 0 ist2
3
4
5
6
Bedingungen verknüpfen
Mehrere Bedingungen können mit den Schlüsselwörtern and oder or verknüpft oder mittels not in ihrer Bedeutung umgekehrt werden.
Schleifen
for-Schleifen werden eingesetzt, wenn Anweisungen eine bestimmte Anzahl Mal oder für eine Liste von Elementen ausgeführt werden müssen.
Mit der Funktion range(min, max) kann eine Serie von Zahlen erzeugt werden, die mit dem Minimum min beginnt und 1 vor dem Maximam max aufhört (das Maximum ist also nicht in der Serie enthalten).
for zahl in range(0, 10):
print(str(zahl))
# Der Inhalt dieser Schleife wird 10x ausgeführt.
# Dabei nimmt die Variale 'zahl' jedes Mal eine neue Zahl an,
# beginnend mit 0 und im letzten Druchgang die 9.
# Also werden die Zahlen von 0 - 9 ausgegeben.2
3
4
5
6
Unterprogramme (Funktionen)
Unterprogramme oder Funktionen werden eingesetzt, um eine Reihe von Anweisungen unter einem bestimmten Namen verfügbar zu machen. So kann z.B. die Berechnung der Dreiecksfläche in eine Funktion ausgelagert werden, damit bei mehrmaliger Verwendung nicht immer wieder die Formel, sondern nur der Funktionsaufruf notiert werden kann:
def dreiecksflaeche(a, h):
flaeche = (a * h)/2
return flaeche
flaeche1 = dreiecksflaeche(3, 6)
flaeche2 = dreiecksflaeche(7, 14)2
3
4
5
6
7
Dabei muss die Funktion definiert werden, bevor sie verwendet wird. Die Definition erfolgt mittels Schlüsselwort def, gefolgt vom Funktionsnamen (Regeln analog zu Variablennamen). Direkt hinter dem Namen stehen runde Klammern und am Schluss ein Doppelpunkt.
In den runden Klammern stehen die Werte, die die Funktion benötigt, um ihre Aufgabe auszuführen. Genau so viele Werte, wie in der Klammer aufgeführt sind, müssen der Funktion beim Aufruf übergeben werden. Das Resultat wird mittels return zurückgegeben und kann mit einer Zuweisung gespeichert werden.
Zufallszahlen und mathematische Funktionen
Damit Funktionen aus zusätzlichen Bibliotheken verwendet werden können, ist ganz am Anfang des Programms eine Import-Anweisung nötig:
import random
zahl = random.randrange(0, 10) # Zufallszahl im Interval [0, 10[ wird erzeugt2
3
Viele mathematische Funktionen oder auch Konstanten wie Pi stehen in der math-Bibliothek zur Verfügung:
import math
flaeche = r * r * math.pi
wurzel = math.sqrt(16)2
3
4
Kommentare
Alles, was hinter einem #-Zeichen steht, wird vom Computer ignoriert, dient also ausschliesslich als Kommentar für uns.
Repetitionsaufgaben
Aufgabe: Einfache Aufgaben
- Frag den Benutzer nach seinem Namen und gib eine persönliche Begrüssung in der Form «Hallo Emma» aus.
- Der Benutzer soll eine Zahl eingeben. Das Programm gibt aus, ob die Zahl grösser als 1’000, kleiner als 100 oder dazwischen ist.
- Berechne eine Zufallszahl (es soll nur 0 oder 1 möglich sein). Wenn die Zufallszahl 0 ist, soll das Wort «Kopf», andernfalls «Zahl» ausgegeben werden. Teste das Programm solange, bis beide Werte vorkommen.
- Gib alle 50-er Zahlen (50 - 59) aus.
- Gib für alle Zahlen zwischen 100 und 120 ihre Quadratzahl aus.
- Schreibe eine Funktion
runden_zaehlen(), die 10x den Satz «Das ist Runde X» ausgibt. Anstelle von X soll die jeweilige Rundenzahl stehen (Runde 1, Runde 2, …). Rufe sie auf und kontrolliere, ob sie funktioniert. - Schreibe eine Funktion
wurzel(zahl), die einen Wert entgegen nimmt und dessen Wurzel berechnet und ausgibt. Rufe sie mit verschiedenen Werten auf. - Schreibe eine Funktion
maximum(a, b), die für zwei erhaltene Werte den grösseren als Resultat zurückgibt. Teste die Funktion mit verschiedenen Kombinationen.
Lösung: Einfache Aufgaben (nicht angemeldet)
Diese Lösung ist nur für angemeldete Benutzer zugänglich – wenn die LK die Lösung freigegeben hat. Bitte melde dich an, um die Lösung einsehen zu können.Aufgabe: Kombinierte Aufgaben
- Gehe alle positiven Zahlen unter 20 durch und gib nur die geraden Zahlen aus. Der Operator
%berechnet den Rest, der bei einer Division zweier Zahlen entsteht (7 % 2ergibt als Resultat1). - Schreibe eine Funktion
addiere_bis(zahl), die alle Zahlen von 1 bis und mit der angegebenen Zahl addiert. Die Summe soll als Resultat (mitreturn) zurückgegeben werden. Teste die Funktion mit verschiedenen Zahlen und gib jeweils das Resultat aus. - Schreibe eine Funktion
fakultaet(n), die für eine angegebene Zahl die Fakultät (mathematische Notation: n! = 1 _ 2 _ 3 _ … _ n) berechnet. Das Resultat soll mitreturnzurückgegeben werden. - Schreibe eine Funktion
quadratische_gleichung(a, b, c), welche quadratische Gleichungen der Form löst und je nach Fall eine sinnvolle Ausgabe liefert. Überprüfe dein Programm mit folgenden drei Eingaben:- a = 2, b = -3, c = 1
- a = 1, b = 2, c = 1
- a = 7, b = 2, c = 4
Tipps Kombinierte Aufgaben
- Gib zuerst alle Zahlen aus und füge anschliessend noch einen
if-Block in die Schleife ein. - Du brauchst eine zusätzliche Variable
summe, die du vor Beginn der Schleife auf0setzen musst, damit du in der Schleife die jeweilige Zahl addieren kannst. - Du brauchst eine zusätzliche Variable
produkt, die du vor Beginn der Schleife auf einen sinnvollen Wert setzen musst (welchen?). Achte auf einen sinnvollen Bereich derrange()-Funktion! - Die Lösungsformel lautet:
. Überlege, wann es zwei Lösungen gibt, wann genau eine und wann gar keine.
Lösung: Kombinierte Aufgaben (nicht angemeldet)
Diese Lösung ist nur für angemeldete Benutzer zugänglich – wenn die LK die Lösung freigegeben hat. Bitte melde dich an, um die Lösung einsehen zu können.Aufgabe: Schwierigere Aufgaben
- Der Benutzer gibt eine Zahl ein. Das Programm gibt aus, ob es sich um eine Quadratzahl handelt.
- Verpacke den Code aus der vorherigen Aufgabe in eine Funktion
ist_quadratzahl(zahl)und rufe sie mit verschiedenen Zahlen auf. Falls es sich um eine Quadratzahl handelt, soll die Funktion den folgenden Text ausgeben:16 ist eine Quadratzahl - Passe die Funktion so an, dass sie anstelle der Textausgabe einfach
TrueoderFalsezurückgibt. - Nutze die vorhin geschriebene Funktion, um in einer Schleife alle Quadratzahlen zwischen 1 und 999 auszugeben.
Tipps Schwierigere Aufgaben
- Berechne zuerst die Wurzel der Zahl. Schneide die Nachkommastellen ab mit
int(a). Diese abgerundete Zahl quadrierst du wieder und vergleichst sie mit dem ursprünglichen Resultat. - Lasse die Benutzereingabe weg und rufe die Funktion mit vorgegebenen Werten auf.
- Benutze anstelle von
print()in der Verzweigungreturn Trueresp.return False. Die Ausgabe muss nun also nach dem Aufruf der Funktion geschehen, daher muss das Resultat gespeichert werden. - Die Schleife muss ausserhalb der Funktion notiert werden, da wir in der Schleife für jede Zahl kleiner als 1’000 die Funktion aufrufen und die Zahl nur ausgeben, wenn es sich um eine Quadratzahl handelt.
Lösung: Schwierigere Aufgaben (nicht angemeldet)
Diese Lösung ist nur für angemeldete Benutzer zugänglich – wenn die LK die Lösung freigegeben hat. Bitte melde dich an, um die Lösung einsehen zu können.⭐ Zusatzaufgabe
- Probiere aus, wie fest der häufige Aufruf von
print()ein Programm verlangsamt. Miss dazu die Laufzeit einer Schleife mittelstime-Modul (import timeund dannzeit = time.time(), was die aktuelle Zeit in Sekunden seit dem 1.1.1970 zurückgibt). - Berechne die Quersumme einer Zahl, die der Benutzer eingegeben hat. Überlege dir, wie du die Ziffern einer Zahl einzeln «berechnen» kannst.
- 2520 ist die kleinste Zahl, die durch sämtliche Zahlen von 1 bis 10 ohne Rest dividiert werden kann. Welches ist die kleinste Zahl, die ohne Rest durch die Zahlen von 1 bis n teilbar ist (n = 18, n = 19, n = 20)?
Tipps Zusatzaufgabe
- Führe eine einfache mathematische Berechnung in der Schleife durch und berechne die Zeitdifferenz. Versuche es vorerst mit 1’000 Schleifendurchgängen. Füge anschliessend zusätzlich eine
print()-Anweisung in der Schleife ein und miss hierfür die Zeit. - Die Ganzzahldivision durch 10 (
a // 10) und die Berechnung des Restes bei der Division durch 10 (a % 10) helfen dir dabei. Zudem kannst du die Anzahl Ziffern herausfinden, indem du die Zahl in einen String umwandelst und mitlen(s)dessen Länge berechnest. - Bei n = 18 dauert die Suche (bei einigermassen gutem Programm) unter 2.5s. Bei n = 19 und n = 20 dauert die Suche bereits 1 - 1.5 Minuten. Lass dir auf keinen Fall Zwischenschritte ausgeben, denn
print()verlangsamt das Programm unglaublich!
Lösung: Zusatzaufgabe
- bitte bei der Lehrperson nachfragen
- bitte bei der Lehrperson nachfragen
- Hier die Lösungen für die drei Fälle:
- n = 18 → 12’252’240
- n = 19 und n = 20 → 232’792’560