Übungen Thema 6
Aufgaben
Aufgaben zum Thema.
Aufgabe 6.1: Vereinfachen mit Funktion
Für die Ansage von Zugabfahrten wurde ein Programm erstellt.
print("Der nächste Zug fährt nach Bern.")
print("Der nächste Zug fährt nach Luzern.")
print("Der nächste Zug fährt nach Zürch.")
print("Der nächste Zug fährt nach Genf.")
print("Der nächste Zug fährt nach Chur.")
Es wird immer der gleiche Satz verwendet, nur der Name des Zuges ändert. Versuchen Sie dieses Programm mit einer Funktion zu vereinfachen.
TIP
Erstelle Sie eine Funktion ansage
, die als Parameter den Ort erhält und rufen Sie die Funktion wie folgt auf:
ansage("Bern")
ansage("Luzern")
ansage("Zürich")
ansage("Genf")
ansage("Chur")
Aufgabe 6.2: Vereinfachen mit Schleife
Unser Programm kann noch verbessert werden. Erstellen Sie eine Liste der Orte und übergeben Sie diese als Parameter an die Ansage-Funktion.
⭐ Vereinfachen mit Schleife.py
Aufgabe 6.3: Währungswechsel
Sie haben ein Programm geschrieben, welches Franken in Euro umrechnet. Dabei haben Sie für die Wechselrate und den Franken globale Variablen verwendet.
rate = 0.95
input_chf = 500
def wechsel():
return input_chf * rate
output_eur = wechsel()
print(output_eur)
Passen Sie das Programm so an, dass die Funktion wechsel
den Franken als Parameter input_chf
und die Wechselrate als rate
entgegennimmt.
Aufgabe 6.4: Währungswechsel
Übernehmen Sie die Funkion aus der vorhergehenden Aufgaben und definieren Sie einen Standardwert für den Parameter rate
mit dem Wert 0.8
.
Aufgabe 6.5: Parameter validieren
Wir möchten sicherstellen, dass die Ansage-Funktion nur Variablen vom Typ str
verarbeitet. Erstellen Sie eine entsprechende Prüfung vor der Ausgabe.
def ansage(ort):
print(f"Der nächste Zug fährt nach {ort}.")
Aufgabe 6.6: Freigabe
Sie haben diese Funktion geschrieben:
def freigabe(kosten):
if kosten < 2000 and kosten > 0:
return True
else:
return False
betrag1 = 1000
betrag2 = 3000
print(freigabe(betrag1))
print(freigabe(betrag2))
Schreiben Sie die freigabe
Funktion als Lambda und weisen Sie die Funktion der Variable freigabe
zu.
⭐ Freigabe
Aufgabe 6.7: Quersumme berechnen
Schreiben Sie eine Funktion quersumme(zahl)
, welche die Quersumme von zahl
berechnet und zurückgibt.
TIP
Wenn man die Zahl in einen String umwandelt kann man Sie in einer Schleife verarbeiten.
Aufgabe 6.8: Rekursion auf der Festplatte
Schreiben Sie eine rekursive Funktion, die als Parameter einen Ordnerpfad erwartet und alle Unterordner ausgibt.
TIP
Dazu eine Hilfestellung. Das folgende Programm gibt alle Dateien und Ordner unterhalb eines bestimmten Ordnerpfads aus:
import os
basepath = '/pfad/to/my/directory'
for entry in os.listdir(basepath):
fullpath = os.path.join(path, entry)
if os.path.isfile(fullpath):
print("Datei: ", entry)
if os.path.isdir(fullpath):
print("Ordner:", entry)
⭐ Rekursion auf der Festplatte
Aufgabe 6.9: Filtern mit Lambda
Kopieren Sie die Datenstruktur von https://jsonplaceholder.typicode.com/users nach Python.
Filter sind alle Benutzer aus der Liste, die eine Telefonnumer haben, die mit einer 1
beginnt. Verwenden Sie dazu eine Lambda-Funktion.
TIP
Verwenden Sie die folgende Bausteine:
print(user.get('email'))
for user in users:
filter(lambda user: user["name"] == "Leanne Graham", data)
users = list(filter)
Aufgabe 6.10: Chart to Code
Schreiben Sie diese Flowchart als Code:
Aufgabe 6.11: Code to Chart
Erstellen Sie einen Flowchart mit diagrams.net anhand dieses Codes:
zahl1 = input("Eingabe Zahl 1:")
zahl2 = input("Eingabe Zahl 2:")
if zahl1 > zahl2:
print("Die erste Zahl ist grösser als die Zweite.")
else:
zahl3 = input("Eingabe Zahl 3:")
if zahl3 > zahl2:
print("Die dritte Zahl ist grösser als die Zweite.")
else:
print("Die dritte Zahl ist kleiner als die Zweite.")
Aufgabe 6.11: Hangman
Entwickeln Sie das Spiel Hangman. Implementierung Sie dazu folgende Punkte:
- Zu Finden des Worts hat man 5 Versuche
- Das zu suchende Wort wird in Grossbuchstaben umgewandelt
- Der eingegebene Buchstabe wird in Grossbuchstaben umgewandelt
- Das zu suchende Wort wird als Liste gespeichert
TIP
Als Anschub haben wir die folgenden Bausteine:
wort = list("python".upper())
laenge = len(wort)
zensiert = list(laenge * '_')
versuche = 5
gefunden = []
gewonnen = False
if eingabe in wort:
gefunden.extend([eingabe])
while versuche > 0 and not gewonnen:
eingabe = input("Geben Sie einen Buchstaben ein: ").upper()
for i in range(0, laenge):
if wort[i] in gefunden:
zensiert[i] = wort[i]
if '_' not in zensiert:
gewonnen = True
print("Du hast gewonnen!")
if not gewonnen:
print("Du hast verloren!")
print(f"Treffer! Der aktuelle Stand: {' '.join(zensiert)}.")
print(f"Deine Treffer: {' '.join(gefunden)}.")
⭐ Hangman
Wiederholungsfragen
W1: Die in Python vordefinierten Funktionen min und max ermitteln das kleinste bzw. größte Element einer Liste. Programmieren Sie die Funktion minmax, die die beiden entsprechenden Elemente als Tupel zurückgibt – natürlich, ohne auf min und max zurückzugreifen.
def minmax(lst): return min(lst), max(lst)Wenn Sie die Funktion selbst implementieren, müssen Sie in einer Schleife alle Elemente der Liste durchlaufen – das ist Ihnen vermutlich klar. Schwierig ist es, Startwerte für die beiden Ergebnisvariablen min und max zu wählen. Sie könnten für min eine sehr große und für max eine sehr kleine Zahl nehmen (min=100000 und max=-100000). Wenn die Liste dann allerdings noch kleinere oder noch größere Werte enthält, erhalten Sie ein falsches Ergebnis. Auf der sicheren Seite sind Sie, wenn Sie als Startwerte einfach das jeweils erste Element der Liste verwenden. Wenn Sie Glück haben, ist das schon das Endergebnis. Wenn nicht, werden min bzw. max in der for-Schleife immer wieder korrigiert, bis die beiden Variablen schließlich den kleinsten bzw. größten Wert enthalten.
# Beispieldatei minmax.py def minmax(lst): min = lst[0] max = lst[0] for itm in lst: if itm < min: min = itm if itm > max: max = itm return (min, max) # Tupel zurückgeben
W2: Ein Palindrom ist ein Text, der von vorn und hinten gelesen den gleichen Inhalt hat – z. B. "Lagerregal" oder "Trug Tim eine so helle Hose nie mit Gurt?"". Leer- und Satzzeichen werden dabei ignoriert. Weitere Beispiele finden Sie hier: https://de.wikipedia.org/wiki/Palindrom. Schreiben Sie eine Funktion, die testet, ob eine Zeichenkette ein Palindrom ist. Tipp: Verwenden Sie die Funktion str.isalpha, um zu testen, ob ein Zeichen ein Buchstabe ist.
# Beispieldatei palindrom.py def palindrom(s): lst = list(s.lower()) plainlst = filter(str.isalpha, lst) plain = ''.join(plainlst) return plain == plain[::-1]
W3: Die Python-Funktion sum(a, b, c) berechnet die Summe aller übergebenen Parameter. Schreiben Sie eine äquivalente Funktion prod, die alle Parameter multipliziert.
# Beispieldatei prod.py def prod(*f): result = f[0] for factor in f[1:]: result = result * factor return result»Schöner« wird der Code (zumindest in Python-Denkweise), wenn Sie die reduce-Funktion anwenden. An reduce müssen Sie eine Lambda-Funktion übergeben, die die Multiplikation durchführt:
from functools import reduce def prod(*f): if len(f)<2: return f[0] else: return reduce(lambda x, y: x*y, f) Auf die Lambda-Funktion können Sie verzichten, wenn Sie wissen, dass Sie alle Python-Operatoren im operator-Modul auch als Funktionen zur Verfügung stehen: import operator def prod(*f): if len(f)<2: return f[0] else: return reduce(operator.mul, f)
W4: Schreiben Sie eine Funktion, die eine Zeichenkette nach allen Vorkommen einer anderen Zeichenkette durchsucht und die Startpositionen als Liste zurückgibt. Beispiel:
print(findAll('abcefgabcxyzabcd', 'abc'))
# Ausgabe: [0, 6, 12]
# Beispieldatei findall.py def findAll(s, pattern): matches = [] pos = s.find(pattern) while pos != -1: matches += [pos] pos = s.find(pattern, pos+1) return matches