Skip to content

Rückblick

Simulation

Zum Auffrischen verschaffen wir uns noch einmal 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)

Tipp: Thonny updaten

Ev. hast du Thonny schon eine Weile nicht mehr verwendet und wahrscheinlich gibt es eine neue Version.

  • Starte Thonny und checke die installierte Version
  • Welche Version ist momentan auf der Webseite https://thonny.org verfügbar?
  • Lade und installiere die neue Version (vorher Thonny schliessen)

Boolean (Wahrheitswert)

ein Wahrheitswert: entweder True oder False. In Python abgekürzt mit bool.

py
zeit = 12
mittag = zeit == 12
print(mittag)
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 Zahl 12
dieser Ausdruck wird ausgewertet und ergibt True oder False, 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

py
zeit = 12   # Wert anpassen: 11 oder 13?
if zeit == 12:
    print("Es ist Mittag")
    print("gehen wir essen!")
elif zeit > 12:
    print("Es ist Nachmittag")
else:
    print("Es ist Vormittag")

Die Reihenfolge ist immer if, dann kein oder mehrere elif gefolgt von höchstens einem else.

Schleifen – while

py
zeit = 8
while zeit < 12:
    print("Es geht noch", 12-zeit, "Stunden")
    zeit = zeit + 1
print("Jetzt ist es Mittag")
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 hat zeit den Wert 12 und somit ist der Ausdruck zeit < 12 nicht mehr True, sondern False.
Zeile 5
das Programm wird unterhalb der Schleife weitergeführt.

Integer (ganze Zahlen)

Beliebig grosse – auch negative – ganze Zahlen. In Python abgekürzt mit int.

py
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

Aufgabe: Fibonacci-Folge

Gib alle Zahlen der Fibonacci-Folge kleiner als 100’000 aus.

Tipp: Fibonacci-Folge

Die Fibonacci-Folge ist eine rekursive Zahlenfolge. Man beginnt mit 0,1 und berechnet dann die weiteren Zahlen, indem man jeweils ihre beiden Vorgänger addiert.

0,1,1,2,3,5,8,13,21,..

Mathematische Definition:

fn=fn2+fn1, falls n>=3, sonst f1=0,f2=1
Lösung: Fibonacci
py
a = 0
b = 1

while True:
    c = a + b
    if c > 100000:
        break
    print(c)
    a = b
    b = c

Unterprogramme

Code kann zur Wiederverwendung und auch zur Übersichtlichkeit in Unterprogramme unterteilt werden. Unterprogramme können mitgegebene Argumente entgegennehmen und einen Rückgabewert liefern.

py
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))
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 und b 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

Floating-Point (Dezimalbrüche)

Fliesskommazahlen mit einer bestimmten Genauigkeit. In Python abgekürzt mit float. Bei der Berechnung können Rundungsfehler entstehen!

py
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)

Aufgabe: 𝛑 mit Monte-Carlo

Versuche eine möglichst genaue Näherung für 𝛑 mit der unten beschriebenen Methode zu bestimmen.
Als Erweiterung kannst du den Versuch auch grafisch darstellen.

Tipp: 𝛑 mit Monte-Carlo

Die Formel zur Berechnung der Fläche eines Kreises, beinhaltet 𝛑. Wir verteilen Punkte zufällig auf einer 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:

PI statistisch[1]

Fläche des Quadrates mit Seitenlänge 1:

AQ=s2=1

Fläche des Viertelkreises mit Radius 1:

AK=r2π4=π4

Die Wahrscheinlichkeiten, dass ein zufällig gewählter Punkt innerhalb des Viertelkreises liegt (Treffer), verglichen zu innerhalb des Quadrates (Versuche), verhalten sich gleich, wie die Flächen:

TrefferVersuche=AKAQ=π/41=π4

Wenn wir dann noch nach π auflösen, ergibt dies:

π=4TrefferVersuche
Lösung: 𝛑 mit Monte-Carlo
py
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)

Strings (Text)

Texte bestehend aus Buchstaben, Ziffern, Sonder- und Steuerzeichen. In Python abgekürzt mit str.

py
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'")
Zeile 1
mit dem Befehle input kann eine Benutzer-Eingabe in der Shell erzeugt werden. Die Eingabe ist immer ein String – auch wenn eine Zahl getippt wird!
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. Das Ergebnis ist eine Zahl, also ein int oder ein float.

OperandOperationBemerkung
+AdditionZusammenzählen
-SubtraktionMinusrechnen
*MultiplikationMalrechnen
/DivisionErgebnis ist ein float
//ganzzahlige DivisionErgebnis ist ein int
%ModuloRest der ganzzahligen Division als int
**PotenzierenHochrechnen

Vergleichs-Operatoren

Zwei Werte werden verglichen. Das Ergebnis ist ein bool.

OperandOperationBemerkung
==gleicher Wertgeht auch bei String, für Float gefährlich
!=nicht gleichgeht auch bei String, für Float gefährlich
<kleiner alsbei String alphabetische Sortierung
>grösser alsbei String alphabetische Sortierung
<=kleiner gleichbei String alphabetische Sortierung
>=grösser gleichbei String alphabetische Sortierung

Logische Operatoren

Verknüpfen Wahrheitswerte mit Hilfe von logischen Funktionen. Das Ergebnis ist ein bool.

OperandOperationBemerkung
andlogisches ANDnur True, falls a und b True
orlogisches ORTrue, wenn mindestens a oder b True
notInverteraus True wird False, und umgekehrt
py
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)
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

py
from math import pi

def kugelvolumen(r):
    return (4/3)*pi*r**3

eingabe = input("Radius der Kugel: ")
radius = float(eingabe)
print("Volumen der Kugel: ", kugelvolumen(radius))

Die folgenden Befehle stehen zur Verfügung und wandeln Datentypen um:

BefehlRückgabewertBemerkung
int()ganze ZahlValueError wenn nicht möglich
float()KommazahlValueError wenn nicht möglich
str()Stringwird automatisch auf das Argument des print-Befehls angewandt
bool()Wahrheitswertwird 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:

py
from math import pi

def kugelvolumen(r):
    return (4/3)*pi*r**3

try:
    eingabe = input("Radius der Kugel: ")
    radius = float(eingabe)
    print("Volumen der Kugel: ", kugelvolumen(radius))
except ValueError:
    print("Bitte Kommazahl eingeben!!")

Man könnte die Eingabe auch wiederholen, solange bis der Benutzer endlich eine Zahl eingegeben hat:

py
from math import pi

def kugelvolumen(r):
    return (4/3)*pi*r**3

value_ok = False

while not value_ok:
    try:
        eingabe = input("Radius der Kugel: ")
        radius = float(eingabe)
        value_ok = True
    except ValueError:
        print("Bitte Kommazahl eingeben!!")

print("Volumen der Kugel: ", kugelvolumen(radius))

  1. Springob via Wikimedia ↩︎

Gymnasium Kirchenfeld, fts