Übungsaufgaben zu Lektion 5

Vorab

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.

In [ ]:
def beispiel(x, y):
    ergebnis = x + y
    return(ergebnis)
In [ ]:
beispiel(1,1)
In [ ]:
beispiel(2,-3)

Testzentrum importieren!

In [ ]:
from testzentrum import *

Weitere benötigte Pakete importieren

In [ ]:
import datetime as dt
import glob
import os.path as path

Runde Sache

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"
In [ ]:
def runde_sache(x, prefix):
    pass
In [ ]:
testme(runde_sache)

Haare spalten

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"]
In [ ]:
def spalten(haar, spaltstelle):
    pass
In [ ]:
testme(spalten)

Haare spalten und weiter verarbeiten

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]
In [ ]:
def haaremachen(haar, spaltstelle):
    pass
In [ ]:
testme(haaremachen)

Polly hilft der Großmutter

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!

In [ ]:
def polly_hilft(boden, schmutz, dreck):
    pass
In [ ]:
testme(polly_hilft)

Schon Advent?

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().

In [ ]:
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)
In [ ]:
testme(adventomat)

Weihnachten verpennt?

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:

  • Wenn datum mit z.B. dem 2. Adventssonntag übereinstimmt, soll die Funktion "2. Advent!" zurückgeben.
  • Wenn datum nach dem Heiligen Abend 2021 liegt, soll die Funktion "Weihnachten verpennt!" zurückgeben.
  • Ansonsten soll die Funktion "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.

In [ ]:
def adventomate(datum):
    pass
In [ ]:
testme(adventomate)

Keksversteck

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.

In [ ]:
# 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))
In [ ]:
def keksversteck(pfad):
    pass
In [ ]:
testme(keksversteck)

Gesamtauswertung

In [ ]:
get_certificate(testmysolutions=[runde_sache, spalten, haaremachen, 
                                 polly_hilft, adventomat, adventomate, 
                                 keksversteck], lesson=4)
In [ ]: