Eine Anleitung für die Bearbeitung und Abgabe der Übunsgaufgaben in Python findet Ihr im Abgabebereich des Moodlekurses ( Link ).
Kurzform: Eine Aufgabe besteht immer aus einer "Funktion", die für einen definierten Input (Argumente) einen definierten Output zurückgeben soll (engl.: return
). Überprüft die Korrektheit dieses Outputs und damit Eurer Lösung mit testme(funktionsname)
. Wenn Ihr fertig seid, erzeugt unter im Abschnitt Gesamtauswertung Euer Zertifikat und gebt es dann in Moodle zusammen mit diesem Notebook ab.
Hier ein Beispiel für eine Funktion: Die Funktion heißt beispiel
, hat die Argumente (den Input) x
und y
und gibt die Variable ergebnis
zurück. Das Ergebnis ist in diesem Fall die Summe der Argumente x
und y
.
def beispiel(x, y):
ergebnis = x + y
return(ergebnis)
beispiel(1,1)
beispiel(2,-3)
from testzentrum import *
import datetime as dt
import glob
import os.path as path
Die Funktion runde_sache
soll aus dem Argument x
(float
oder int
) einen String erzeugen und zurückgeben. Dieser String soll x
als Fließkommazahl mit drei Nachkommastellen darstellen. Außerdem soll dem String die Zeichenkette prefix
vorangestellt werden.
Beispiel:
x = 1.23456
prefix = "Gerundeter Wert:"
ergebnis = "Gerundeter Wert:1.235"
def runde_sache(x, prefix):
pass
testme(runde_sache)
Die Funktion spalten
soll die Zeichenkette haar
an allen Stellen "spalten" (also zerlegen), die mit dem Zeichen spaltstelle
markiert sind. Die Funktion soll dann eine Liste zurückgeben, welche die gespaltenen Teile enthält.
Beispiel:
haar = "a1,a2,a3,a4"
spaltstelle = ","
ergebnis = ["a1", "a2", "a3", "a4"]
def spalten(haar, spaltstelle):
pass
testme(spalten)
Die Funktion haaremachen
soll die Zeichenkette haar
nicht nur an allen Stellen "spalten" (also zerlegen), die mit dem Zeichen spaltstelle
markiert sind. Anschließend soll jedes gespaltene Element auch noch in eine Zahl vom Typ int
umgewandelt werden. Diese int
-Werte sollen dann als Liste (list
) zurückgegeben werden. Hinweis: Ihr könnt davon ausgehen, dass der String haar
auch wirklich nur Zeichen enthält, die als Integer interpretiert werden können.
Beispiel:
haar = "1,99,99,5"
spaltstelle = ","
ergebnis = [1, 99, 99, 5]
def haaremachen(haar, spaltstelle):
pass
testme(haaremachen)
Jaja, wir sind hier nicht im Kindergarten. Aber Astrid Lindgrens Geschichte von Polly Patent ist trotzdem schön: Nachdem sich Großmutter das Bein verletzt hat, kümmert sich Polly um das "Weihnachtsgroßreinmachen" und noch einiges andere...
Im konkreten Fall soll sie vom String boden
zunächst am Rand den Schmutz schmutz
abschrubben. Außerdem soll vom ganzen boden
der restliche dreck
entfernt werden.
Beispiel:
boden = "Xdiele_yydiele_dieyleX"
schmutz = "X"
dreck = "y"
ergebnis = "diele_diele_diele"
Hinweis: Nutzt die String-Methoden strip
und replace
!
def polly_hilft(boden, schmutz, dreck):
pass
testme(polly_hilft)
Die Funktion adventomat
erhält als Argument eine Zeichenkette datum
der Form "05.12.2021"
. Die Funktion soll zurückgeben, welchem Advent des Jahres 2021 die Zeichenkette datum
entspricht. Das Ergebnis soll eine Integer (1
,2
,3
oder 4
) sein. Falls datum
mit keinem Adventssonntag des Jahres 2021 übereinstimmt, soll 0
zurückgegeben werden.
Das Modul datetime
solltet Ihr oben bereits via import datetime as dt
importiert haben.
Beispiel:
# Beispiel 1:
datum = "05.12.2021"
ergebnis = 2
# Beispiel 2:
datum = "04.12.2021"
ergebnis = 0
Hinweis: Die vier Adventssonntage des Jahres haben wir Euch freundlicherweise schonmal in die Funktion eingetragen. Es handelt sich dabei um datetime
-Objekte. Ihr müsst also zunächst datum
in ein datetime
-Objekt umwandeln. Nutzt dazu die Funktion dt.datetime.strptime()
.
def adventomat(datum):
adventse = [dt.datetime(2021,11,28),
dt.datetime(2021,12,5),
dt.datetime(2021,12,12),
dt.datetime(2021,12,19)]
# Hier geht's los...
return(0)
testme(adventomat)
In dieser Aufgabe sollt Ihr die Funktion adventomat
erweitern (sie heiße nun adventomate
, kopiert ruhig Eure Lösung in den function body).
Die Funktion soll nun immer eine Zeichenkette zurückgeben:
datum
mit z.B. dem 2. Adventssonntag übereinstimmt, soll die Funktion "2. Advent!"
zurückgeben.datum
nach dem Heiligen Abend 2021 liegt, soll die Funktion "Weihnachten verpennt!"
zurückgeben."Nichts Besonderes!"
zurückgeben.Beispiel
# Beispiel 1:
datum = "05.12.2021"
ergebnis = "2. Advent!"
# Beispiel 2:
datum = "04.12.2021"
ergebnis = "Nichts Besonderes!"
# Beispiel 3:
datum = "26.12.2021"
ergebnis = "Weihnachten verpennt!"
Hinweis: Ihr könnt bei datetime
-Objekten auch den üblichen Operatoren ==
, >
usw. anwenden. So ergibt z.B. dt.datetime(2021,12,31) > dt.datetime(2021,12,30)
den Wert True
.
def adventomate(datum):
pass
testme(adventomate)
Die Referenzen zur Adventszeit nehmen einfach kein Ende. Aber bei geschlossenen Weihnachtsmärkten müssen wir jeden Anlass nutzen, um adventliche Stimmung zu erzeugen.
Die Eiersuche habt Ihr ja im Seminar schon geübt. Die Funktion keksversteck
suche nun bitte im Verzeichnis pfad
nach Keksverstecken. Ein Keksversteck ist immer eine Datei, welche die Endung .keks
hat. Suche nur im Verzeichnis pfad
- nicht in eventuellen Unterverzeichnissen.
Die Funktion soll nun die Zahl der Keksverstecke zurückgeben (also die Zahl der gefundenen .keks
-Dateien).
Beispiel:
pfad = "data/subdir1/"
ergebnis = 3
Hinweis: Ihr wisst nicht, ob das Argument pfad
immer ein /
am Ende hat. Um den Pfad über die Verzeichnisse bis hin zur Datei robust aus Einzelteilen zusammenzusetzen, solltet Ihr daher die Funktion os.path.join
verwenden. os.path
wurde oben bereits als import os.path as path
importiert.
# Beispiele für die Nutzung von os.path.join
print(path.join("data", "subdir", "file.txt"))
print(path.join("data", "subdir/", "file.txt"))
x = "beispielverzeichnis"
y = "beispieldatei.csv"
print(path.join(x, y))
def keksversteck(pfad):
pass
testme(keksversteck)
get_certificate(testmysolutions=[runde_sache, spalten, haaremachen,
polly_hilft, adventomat, adventomate,
keksversteck], lesson=4)