• Keine Ergebnisse gefunden

Hans-Joachim Böckenhauer Dennis Komm

N/A
N/A
Protected

Academic year: 2022

Aktie "Hans-Joachim Böckenhauer Dennis Komm"

Copied!
8
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Departement Informatik

Informatikgrundlagen

Funktionen

Hans-Joachim Böckenhauer Dennis Komm

Herbst 2021 – 21. Oktober 2021

Kontrollstrukturen

Terminierung

Terminierung

i = 1

while i <= 5:

s += i i += 1

Hier und meistens:

statement ändert einen Wert, der in condition vorkommt Nach endlich vielen Iterationen wird condition falsch ï Terminierung

Informatikgrundlagen für Humanmedizin – Funktionen und Rückgabewerte Herbst 2021 Böckenhauer, Komm 1 / 26

Endlosschleifen

Endlosschleifen sind leicht zu produzieren while True:

print("0")

while not False:

print("1")

while 2 > 1:

print("2")

. . . aber nicht automatisch zu erkennen

Informatikgrundlagen für Humanmedizin – Funktionen und Rückgabewerte Herbst 2021 Böckenhauer, Komm 2 / 26

(2)

Halteproblem

Unentscheidbarkeit des Halteproblems [Alan Turing, 1936]

Es gibt kein Python-Programm, das für jedes Python-Programm P und jede Eingabe I korrekt feststellen kann, ob P bei Eingabe I terminiert Das heisst, die Terminierung von Programmen kann nicht automatisch überprüft werden

Theoretische Fragestellungen dieser Art waren für Turing die Hauptmotivation für die Konstruktion seiner Rechenmaschine

Alan Turing [Wikimedia]

Informatikgrundlagen für Humanmedizin – Funktionen und Rückgabewerte Herbst 2021 Böckenhauer, Komm 3 / 26

Die Collatz-Folge

Folge von natürlichen Zahlen n 0 , n 1 , n 2 , n 3 , n 4 , n 5 , . . . n 0 = n

für jedes i ≥ 1, n i =

n i−1 /2, falls n i−1 gerade 3 · n i−1 + 1, falls n i−1 ungerade

Beispiel für n = 5

5, 16, 8, 4, 2, 1, 4, 2, 1, . . . (Repetition bei 1)

Informatikgrundlagen für Humanmedizin – Funktionen und Rückgabewerte Herbst 2021 Böckenhauer, Komm 4 / 26

Übung – Die Collatz-Folge

Schreiben Sie ein Programm, das eine ganze Zahl n als Eingabe erhält die Collatz-Folge ausgibt mit der Formel n 0 = n und

n i =

n i−1 /2, falls n i−1 gerade 3 · n i−1 + 1, falls n i−1 ungerade stoppt, sobald 1 erreicht wurde

Informatikgrundlagen für Humanmedizin – Funktionen und Rückgabewerte Herbst 2021 Böckenhauer, Komm 5 / 26

Übung – Die Collatz-Folge

n = int(input("Berechne die Collatz-Folge fuer n = "))

while n > 1: # stopp, wenn 1 erreicht ist if n % 2 == 0: # n ist gerade

n //= 2

else: # n ist ungerade n = 3 * n + 1

print(n, end=" ")

Informatikgrundlagen für Humanmedizin – Funktionen und Rückgabewerte Herbst 2021 Böckenhauer, Komm 6 / 26

(3)

Die Collatz-Folge

Beispiel für n = 27

27 82 41 124 62 31 94 47 142 71 214 107 322 161 484 242 121 364 182 91 274 137 412 206 103 310 155 466 233 700 350 175 526 263 790 395 1186 593 1780 890 445 1336 668 334 167 502 251 754 377 1132 566 283 850 425 1276 638 319 958 479 1438 719 2158 1079 3238 1619 4858 2429 7288 3644 1822 911 2734 1367 4102 2051 6154 3077 9232 4616 2308 1154 577 1732 866 433 1300 650 325 976 488 244 122 61 184 92 46 23 70 35 106 53 160 80 40 20 10 5 16 8 4 2 1

Informatikgrundlagen für Humanmedizin – Funktionen und Rückgabewerte Herbst 2021 Böckenhauer, Komm 7 / 26

Die Collatz-Folge

Die Collatz-Vermutung [Lothar Collatz, 1937]

Für jedes n ≥ 1 erscheint die 1 in der Folge

Niemand konnte die Vermutung bislang beweisen Falls sie nicht stimmt, ist die while -Schleife zur Berechnung der Collatz-Folge für einige n eine Endlosschleife

Lothar Collatz [Wikimedia]

Informatikgrundlagen für Humanmedizin – Funktionen und Rückgabewerte Herbst 2021 Böckenhauer, Komm 8 / 26

Kontrollanweisungen

Kontrollfluss

Kontrollfluss – if

Reihenfolge der (wiederholten) Ausführung von Anweisungen Grundsätzlich von oben nach unten. . .

. . . ausser in Auswahl- und Kontrollanweisungen condition

statement

true

false if condition : statement

Informatikgrundlagen für Humanmedizin – Funktionen und Rückgabewerte Herbst 2021 Böckenhauer, Komm 9 / 26

(4)

Kontrollfluss – if-else

condition

statement1

statement2

true

false

if condition : statement1 else:

statement2

Informatikgrundlagen für Humanmedizin – Funktionen und Rückgabewerte Herbst 2021 Böckenhauer, Komm 10 / 26

Kontrollfluss – while

condition

statement

true

false

while condition : statement

Informatikgrundlagen für Humanmedizin – Funktionen und Rückgabewerte Herbst 2021 Böckenhauer, Komm 11 / 26

Kontrollfluss break in while -Schleife

condition

statement

break

Informatikgrundlagen für Humanmedizin – Funktionen und Rückgabewerte Herbst 2021 Böckenhauer, Komm 12 / 26

Funktionen

(5)

Funktionen

Bisher. . .

Ein Algorithmus pro Datei

Anweisungen werden sequentiell abgearbeitet Verwendung von Schleifen und Kontrollstrukturen

Gruppiere zusammenhängenden Code als Funktion

def begruessung():

date = "21. Oktober 2021"

print("Hallo", username, "!")

print("Willkommen zur Vorlesung am", date)

begruessung()

Definition einer Funktion Optionale Parameterliste

Informatikgrundlagen für Humanmedizin – Funktionen und Rückgabewerte Herbst 2021 Böckenhauer, Komm 13 / 26

Analogie zu natürlichen Sprachen

Python «versteht» gewisse Wörter

Diese heissen Schlüsselwörter: def , if , while etc.

Grundstock an Funktionen: print() , range() , input() etc.

def f(): ⇐⇒ Python «lernt» neues Wort f Aus dem Duden

Kühl · schrank, der

Mit einer Kältemaschine ausgestatteter schrankartiger Behälter zum Kühlen oder Frischhalten von Lebensmitteln

Informatikgrundlagen für Humanmedizin – Funktionen und Rückgabewerte Herbst 2021 Böckenhauer, Komm 14 / 26

Analogie zu natürlichen Sprachen

def begruessung():

date = "21. Oktober 2021"

print("Hallo", username, "!")

print("Willkommen zur Vorlesung am", date)

username = input("Geben Sie Ihren Benutzernamen ein:") if username == "hjb" or username == "dkomm":

begruessung()

...

else:

print("Benutzer nicht bekannt.") ...

date = "21. Oktober 2021"

print("Hallo", username, "!")

print("Willkommen zur Vorlesung am", date)

Informatikgrundlagen für Humanmedizin – Funktionen und Rückgabewerte Herbst 2021 Böckenhauer, Komm 15 / 26

Analogie zu mathematischen Funktionen

f (x) = 2 · x + 1

Funktionen in Python

Parameter x wird Funktion übergeben Wert wird zurückgegeben mit return

def f(x):

y = 2 * x + 1 return y def f(x):

return 2 * x + 1

return ohne Argument zum Beenden des Funktionsaufrufs

Informatikgrundlagen für Humanmedizin – Funktionen und Rückgabewerte Herbst 2021 Böckenhauer, Komm 16 / 26

(6)

Analogie zu mathematischen Funktionen

def f(x):

return 2 * x + 1

Durch die Verwendung von return repräsentiert der Funktionsaufruf den entsprechenden Wert; der Aufruf wird damit beendet

print(f(5)) erzeugt Ausgabe 11 z = f(6) weist z den Wert 13 zu

z = 3 * f(2) + f(4) weist z den Wert 24 zu

b = (f(10) > 20) weist b den Booleschen Wert True zu

Informatikgrundlagen für Humanmedizin – Funktionen und Rückgabewerte Herbst 2021 Böckenhauer, Komm 17 / 26

Funktionen mit Parametern

def checkuser(givenname):

validnames = [ "dbert", "dimant", "odudler", "fafrei", "shorvath", "ssteiner" ] if givenname in validnames:

return True else:

return False

username = input("Geben Sie Ihren Benutzernamen ein:") if checkuser(username) == True:

print("Willkommen", username)

password = input("Geben Sie Ihr Passwort ein:") ...

else:

print("Benutzername nicht gefunden.")

Informatikgrundlagen für Humanmedizin – Funktionen und Rückgabewerte Herbst 2021 Böckenhauer, Komm 18 / 26

Funktionen mit Parametern

username = input(”Geben Sie Ihren Benutzernamen ein:”) Geben Sie Ihren Benutzernamen ein: dkomm

username = dkomm

if checkuser( dkomm ) == True:

def checkuser(dkomm):

validnames = [ ”dbert”, ”dimant”, ”odudler”, ”fafrei”, ”shorvath”, ”ssteiner” ] if dkomm in validnames:

return True else:

return False if False == True:

Benutzername nicht gefunden.

Informatikgrundlagen für Humanmedizin – Funktionen und Rückgabewerte Herbst 2021 Böckenhauer, Komm 19 / 26

Definition von Funktionen

Funktion muss definiert werden, bevor sie verwendet werden kann

def f(x):

return 2 * x + 1 print(f(2))

funktioniert, aber nicht. . .

print(f(2))

def f(x):

return 2 * x + 1

NameError: name ’f’ is not defined

Informatikgrundlagen für Humanmedizin – Funktionen und Rückgabewerte Herbst 2021 Böckenhauer, Komm 20 / 26

(7)

Funktionen

Beispiel – Keksrechner

Beispiel – Keksrechner

kinder = int(input("Anzahl Kinder:")) kekse = int(input("Anzahl Kekse:"))

print("Jedes Kind kriegt", kekse // kinder, "Kekse") print("Papa kriegt", kekse % kinder, "Kekse")

Wir wollen sicherstellen, dass kinder positiv ist und jedes Kind mindestens einen Keks kriegt

Informatikgrundlagen für Humanmedizin – Funktionen und Rückgabewerte Herbst 2021 Böckenhauer, Komm 21 / 26

Keksrechner – Eingabeprüfung

Aus . . .

kinder = int(input("Anzahl Kinder:"))

. . . wird demnach

while True:

kinder = int(input("Anzahl Kinder:")) if kinder >= 1:

break else:

print("Wert muss mindestens 1 sein")

Analog dazu müssen wir prüfen, dass kekse >= kinder ist

Informatikgrundlagen für Humanmedizin – Funktionen und Rückgabewerte Herbst 2021 Böckenhauer, Komm 22 / 26

Keksrechner – Es wird unübersichtlich

while True:

kinder = int(input("Anzahl Kinder:")) if kinder >= 1:

break else:

print("Wert muss mindestens 1 sein")

while True:

kekse = int(input("Anzahl Kekse:")) if kekse >= kinder:

break else:

print(”Wert muss mindestens”, kinder, ”sein”)

print("Jedes Kind kriegt", kekse // kinder, "Kekse") print("Papa kriegt", kekse % kinder, "Kekse")

Anzahl Kinder einlesen und prüfen

Anzahl Kekse einlesen und prüfen

Informatikgrundlagen für Humanmedizin – Funktionen und Rückgabewerte Herbst 2021 Böckenhauer, Komm 23 / 26

(8)

Keksrechner – Erkenntnisse

Die beiden Code-Fragmente sind fast identisch Folgende Aspekte sind unterschiedlich:

Der Prompt, also "Kinder:" vs. "Kekse:"

Das Minimum, also 1 vs. kinder

Wir können das Code-Fragment in eine Funktion auslagern und somit wiederverwenden

Dabei müssen wir die unterschiedlichen Aspekte parametrisieren

Informatikgrundlagen für Humanmedizin – Funktionen und Rückgabewerte Herbst 2021 Böckenhauer, Komm 24 / 26

Übung – Keksrechner

Schreiben Sie eine Funktion, die

zwei Parameter prompt und minimum erhält den User bittet, eine Zahl einzugeben die Eingabe per return zurückgibt, wenn sie mindestens minimum ist

sonst erneut um eine Eingabe bittet

Verwenden Sie Ihre Funktion im Keksrechner

Informatikgrundlagen für Humanmedizin – Funktionen und Rückgabewerte Herbst 2021 Böckenhauer, Komm 25 / 26

Übung – Keksrechner

def checkinput(prompt, minimum):

while True:

x = int(input(prompt)) if x >= minimum:

return x else:

print(”Wert muss mindestens”, minimum, ”sein”)

kinder = checkinput("Anzahl Kinder:", 1) kekse = checkinput("Anzahl Kekse:", kinder) print("Jedes Kind kriegt", kekse // kinder, "Kekse") print("Papa kriegt", kekse % kinder, "Kekse")

Informatikgrundlagen für Humanmedizin – Funktionen und Rückgabewerte Herbst 2021 Böckenhauer, Komm 26 / 26

Referenzen

ÄHNLICHE DOKUMENTE

Schreiben Sie ein Programm, das die Benutzerin nach einem Z¨ ahler und einem Nenner fragt und dann den Z¨ ahler ganzzahlig durch den Nenner teilt. Hier ist ein Beispiel

Der zweite Teil entspricht dem Mittelteil mit ¨ andernden Zahlen und der dritte Teil ist wiederum wie der erste Teil die korrekte Anzahl Nullen auf der linken Seite. Teil 1 und 3

Boolesche Ausdrücke können mögliche Werte F oder T annehmen F entspricht «falsch». T

Informatikgrundlagen für Humanmedizin – Funktionen und Rückgabewerte Herbst 2021 Böckenhauer, Komm 2 / 26... aber nicht automatisch

Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 7 / 28... Angenommen, x ist durch

Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 4 / 282. Ein

Informatikgrundlagen für Humanmedizin – numpy, matplotlib Herbst 2021 Böckenhauer, Komm 9 / 25.. Das Modul numpy. numpy ist Grundlage für viele weitere

Informatikgrundlagen für Humanmedizin – pandas Herbst 2021 Böckenhauer, Komm 4 / 18... Komplexität