Zum Auffrischen verschaffen wir uns nocheinmal einen Überblick über die Programmierstrukturen und die verfügbaren Einfachen Datentypen von Python.
Aufgabe «Auffrischen»
Arbeit dich selbständig durch dieses Kapitel. Teste dabei die Beispiele mit Thonny aus. Verwende dazu das Fenster Variables und den Debugger (siehe Kapitel Thonny, Debugger)
# Boolean
ein Wahrheitswert: entweder True
oder False
.
zeit = 12
mittag = zeit == 12
print(mittag)
2
3
- Zeile 2
- wir definieren eine Variable mit dem Namen
mittag
- Rechts vom Zuweisungsoperator
=
steht ein Ausdruck - der Ausdruck vergleicht den Inhalt der Variablen
zeit
mit der Zahl12
- dieser Ausdruck wird ausgewertet und ergibt
True
oderFalse
, also einen Boolean
# Verzweigungen und Schleifen
Werte vom Typ Boolean
werden in Verzweigungen und Schleifen verwendet. Bei einem «Wenn-Dann» oder einem «Solange dass» entscheidet ein Boolean
über Ausführen oder Nicht-Ausführen eines Code-Abschnitts:
# Verzweigung – if-elif-else
zeit = 12
if zeit == 12:
print("Es ist Mittag")
print("gehen wir essen!")
elif zeit > 12:
print("Es ist Nachmittag")
else:
print("Es ist Vormittag")
2
3
4
5
6
7
8
Die Reihenfolge ist immer if
, dann kein oder mehrere elif
und am Schluss ein optionales else
.
# Schleifen – while
zeit = 8
while zeit < 12:
print("Es geht noch", 12-zeit, "Stunden")
zeit = zeit + 1
print("Jetzt ist es Mittag")
2
3
4
5
- Zeile 2
- Der Ausdruck im obigen Beispiel ist zuerst True, weil ja 8 kleiner als 12 ist. Also wird der Schleifeninhalt ausgeführt.
- Zeile 4
- In der Schleife drin wird die Variable
zeit
um 1 vergrössert. Somit wird diese Schleife 4 Mal ausgeführt. Nach 4 Durchläufen hatzeit
den Wert12
und somit ist der Ausdruckzeit < 12
nicht mehrTrue
, sondernFalse
. - Zeile 5
- das Programm wird unterhalb der Schleife weitergeführt.
# Integer (ganze Zahlen)
Beliebig grosse – auch negative – ganze Zahlen.
from math import sqrt
a = 3
b = 4
c_quadrat = a**2 + b**2
print(c_quadrat) # ergibt noch einen int
c = sqrt(c_quadrat)
print(c) # durch die Wurzel-Funktion float
2
3
4
5
6
7
8
9
10
Aufgabe «Fibonacci-Folge»
Gib alle Zahlen der Fibonacci-Folge die kleiner als 100’000 aus.
Fibonacci-Folge
Die Fibonacci-Folge ist eine rekursive Zahlenfolge. Man beginnt mit
Mathematische Definition:
Lösung «Fibonacci»
a = 0
b = 1
while True:
c = a + b
if c > 100000:
break
print(c)
a = b
b = c
2
3
4
5
6
7
8
9
10
# Unterprogramme
Code kann zur Wiederverwendung und auch zur Übersichtlichkeit in Unterprogramme unterteilt werden. Unterprogramme können mitgegebene Argumente entgegennehmen und eine Rückgabewert liefern.
from math import sqrt
def pythagoras(a, b):
c_quadrat = a**2 + b**2
c = sqrt(c_quadrat)
return c
print(pythagoras(3,4))
print(pythagoras(12.3,6.5))
2
3
4
5
6
7
8
9
- Zeile 3
- Wir definieren ein Unterprogramm mit dem Namen
pythagoras
- Unser Unterprogramm nimmt 2 Argumente entgegen
- im Unterprogramm sind diese Argumente unter den Namen
a
undb
verfügbar - Zeilen 4 & 5
- Wir berechnen ein Ergebnis
- Zeile 6
- der berechnete Wert wird mit
return
an den Aufrufenden zurückgegeben - Zeile 8 und 9
- wir rufen unser Unterprogramm mit verschiedenen Werten auf und geben das Ergebnis jeweils mit
print
direkt aus
# Floats (Dezimalbrüche)
Kommazahlen mit einer bestimmten Genauigkeit. Bei der Berechnung können Rundungsfehler entstehen!
from random import random
summe = 0
i = 0
while i < 100:
summe = summe + random()
i = i + 1
print("Summe von 100 Zufallszahlen zwischen 0 und 1:", summe)
2
3
4
5
6
7
8
9
Aufgabe «𝛑 mit Monte-Carlo»
Versuche eine möglichst genaue Näherung für 𝛑 mit der unten beschriebenen Monte-Carlo-Methode zu bestimmen.
Als Erweiterung kannst du den Versuch auch grafisch darstellen.
𝛑 mit Monte-Carlo
Die Formel zur Berechnung der Fläche eines Kreises, beinhaltet 𝛑. Wir verteilen Punkte zufällig auf eine Fläche, die zum Teil von einem Kreis bedeckt ist. Nun stehen die Anzahl «Treffer» auf den Kreis im Verhältnis zu der Fläche des Kreises. So können wir 𝛑 statistisch bestimmen.
Zur Einfachheit schauen wir einen Viertelkreis mit Radius 1 an und verteilen die Punkte zufällig im umgebenden Quadrat:
Fläche des Quadrates:
Fläche des Viertelkreises:
Die Wahrscheinlichkeiten, dass ein zufällig gewählter Punkt innerhalb des Viertelkreises liegt (
Wenn wir dann noch nach
Lösung «Pi mit Monte-Carlo»
from random import random
versuche = 0
treffer = 0
while versuche < 1000000:
x = random()
y = random()
if x*x + y*y < 1:
treffer = treffer + 1
versuche = versuche + 1
pi = 4 * treffer/versuche
print(pi)
2
3
4
5
6
7
8
9
10
11
12
13
14
# Strings (Text)
Texte bestehend aus Buchstaben, Ziffern, Sonder- und Steuerzeichen.
name = input("Sag mir bitte deinen Namen: ")
print("ich schreie:", name.upper())
print("ich flüstere:", name.lower())
print("ich sage:", name.capitalize())
print("dein Name hat", len(name), "Buchstaben")
if name.lower().find("e") >= 0:
print("dein Name beinhaltet", name.lower().count("e"), "mal den Buchstaben 'e'")
else:
print("dein Name hat kein 'e'")
2
3
4
5
6
7
8
9
- Zeile 1
- mit dem Befehle
input
kann eine Benutzer-Eingabe in der Shell erzeugt werden - Zeilen 2-4
- Strings können in Gross- und Kleinbuchstaben umgewandelt werden
- ab Zeile 6
- man kann nach Buchstaben oder Teilstrings suchen und die Anzahl Treffer zählen
Aufgabe «Smalltalk»
Erstelle einen kleines Konversations-Programm:
- Stelle eine Frage
- mache etwas mit der Antwort
- benütze die Antwort für weitere Fragen
- …
# Operatoren
Es folgt eine kleine Übersicht über die Operatoren von Python
# Arithmetische Operatoren
Diese werden verwendet um mit Zahlen zu rechnen:
Operand | Operation | Bemerkung |
---|---|---|
+ | Addition | Zusammenzählen |
- | Subtraktion | Minusrechnen |
* | Multiplikation | Malrechnen |
/ | Division | Ergebnis ist ein float |
// | ganzzahlige Division | Ergebnis ist ein int |
% | Modulo | Rest der ganzzahligen Division als int |
** | Potenzieren | Hochrechnen |
# Vergleichs-Operatoren
Zwei Werte werden verglichen:
Operand | Operation | Bemerkung |
---|---|---|
== | gleicher Wert | geht auch bei String, für Float gefährlich |
!= | nicht gleich | geht auch bei String, für Float gefährlich |
< | kleiner als | bei String alphabetische Sortierung |
> | grösser als | bei String alphabetische Sortierung |
<= | kleiner gleich | bei String alphabetische Sortierung |
>= | grösser gleich | bei String alphabetische Sortierung |
# Logische Operatoren
Verknüpfen Wahrheitswerte mit Hilfe von logischen Funktionen:
Operand | Operation | Bemerkung |
---|---|---|
and | logisches AND | nur True , falls a und b True |
or | logisches OR | True , wenn mindestens a oder b True |
not | Inverter | aus True wird False , und umgekehrt |
def mensa(stunde, minute):
if stunde == 12 and not (minute > 45 or minute < 15):
print("gehen wir Essen?")
else:
print("Kafi?")
mensa(10, 30)
mensa(12, 30)
mensa(12, 10)
2
3
4
5
6
7
8
9
- Zeile 2
- Mehrere Bedingungen werden logisch verknüpft:
- wenn es 12 Uhr ist und die Minute weder grösser als 45 noch kleiner als 15 ist
# Datentypen Umwandeln
Python bietet für jeden Datentyp eine Umwandlung. Der input
-Befehl liefert immer einen String. Wenn man aber ein Zahl erwartet und damit rechnen möchte, so muss man diesen String umwandeln
from math import pi
def kugelvolumen(r):
return (4/3)*pi*r**3
radius = float(input("Radius der Kugel: "))
print("Volumen der Kugel: ", kugelvolumen(radius))
2
3
4
5
6
7
Die folgenden Befehle stehen zur Verfügung und wandeln Datentypen um:
Befehl | Rückgabewert | Bemerkung |
---|---|---|
int() | ganze Zahl | ValueError wenn nicht möglich |
float() | Kommazahl | ValueError wenn nicht möglich |
str() | String | wird automatisch auf das Argument des print -Befehls angewandt |
bool() | Wahrheitswert | wird automatisch in Bedingungen bei if und while verwendet |
Möchte man sicherstellen, dass der Benutzer wirklich eine Zahl eingibt, so muss man den möglichen ValueError
mit einem sogenannten try abfangen:
from math import pi
def kugelvolumen(r):
return (4/3)*pi*r**3
try:
radius = float(input("Radius der Kugel: "))
print("Volumen der Kugel: ", kugelvolumen(radius))
except ValueError:
print("Bitte Kommazahl eingeben!!")
2
3
4
5
6
7
8
9
10
Man könnte die Eingabe auch wiederholen, solange bis der Benutzer endlich eine Zahl eingegeben hat:
from math import pi
def kugelvolumen(r):
return (4/3)*pi*r**3
value_ok = False
while not value_ok:
try:
radius = float(input("Radius der Kugel: "))
value_ok = True
except ValueError:
print("Bitte Kommazahl eingeben!!")
print("Volumen der Kugel: ", kugelvolumen(radius))
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Springob via Wikimedia (opens new window) ↩︎