diff --git a/notebooks/hausaufgabe4.ipynb b/notebooks/hausaufgabe4.ipynb index aa465a72de18203df8440efccde26951712525db..1b03664b325fa7c74a43ef0366d1c4df946495c6 100644 --- a/notebooks/hausaufgabe4.ipynb +++ b/notebooks/hausaufgabe4.ipynb @@ -26,9 +26,11 @@ "source": [ "## Aufgabe 1\n", "\n", - "*(Dies ist [Aufgabe 1 im 7. Kapitel](https://scm.cms.hu-berlin.de/ibi/python/blob/master/notebooks/seminar07.ipynb#aufgabe-1).)*\n", + "Implementieren Sie die folgenden Funktionen und rufen Sie ihre Funktionen mit verschiedenen Argumenten auf, um sie auf Funktionalität zu testen.\n", "\n", - "Kopieren Sie die Schleife aus [Abschnitt 7.5](seminar07.ipynb#7.5-Quadratwurzeln) und verkapseln Sie sie in eine Funktion `mysqrt` die einen Parameter `a` erwartet, einen sinnvollen Wert für `x` wählt und eine Näherung für die Quadratwurzel von `a` zurückliefert." + "### 1a\n", + "\n", + "Schreiben Sie eine Funktion, die als Parameter eine Zeichenkette erwartet und prüft, ob das erste Zeichen der Zeichenkette ein Kleinbuchstaben ist. Die Funktion soll einen Wahrheitswert zurückgeben." ] }, { @@ -37,35 +39,24 @@ "metadata": {}, "outputs": [], "source": [ - "# Implementieren Sie hier die Funktion mysqrt\n", + "def is_lower_first_char(s):\n", + " pass\n", "\n", "\n", - "# Testen Sie hier die Funktion\n", - "print(\"Die Wurzel von 2 ist ungefähr \", mysqrt(2))\n", - "print(\"Die Wurzel von 23 ist ungefähr \", mysqrt(23))" + "is_lower_first_char(\"Test\")\n", + "is_lower_first_char(\"test\")\n", + "is_lower_first_char(\"tEST\")\n", + "is_lower_first_char(\"TESt\")\n", + "is_lower_first_char(\"TesT\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Testen Sie die Funktion, indem Sie eine Funktion `test_square_root` schreiben, die eine Tabelle der folgenden Art ausgibt:\n", - "\n", - "```\n", - "a mysqrt(a) math.sqrt(a) diff\n", - "- --------- ------------ ----\n", - "1.0 1.0 1.0 0.0\n", - "2.0 1.41421356237 1.41421356237 2.22044604925e-16\n", - "3.0 1.73205080757 1.73205080757 0.0\n", - "4.0 2.0 2.0 0.0\n", - "5.0 2.2360679775 2.2360679775 0.0\n", - "6.0 2.44948974278 2.44948974278 0.0\n", - "7.0 2.64575131106 2.64575131106 0.0\n", - "8.0 2.82842712475 2.82842712475 4.4408920985e-16\n", - "9.0 3.0 3.0 0.0\n", - "```\n", - "\n", - "Dabei ist die erste Spalte eine Zahl, `a`; die zweite Spalte ist die Quadratwurzel von `a` die mit `mysqrt` berechnet wurde; die dritte Spalte ist die Quadratwurzel, die mittels `math.sqrt` berechnet wurde; und die vierte Spalte ist der Absolutbetrag des Unterschieds zwischen den beiden Werten." + " ### 1b\n", + " \n", + "Schreiben Sie eine Funktion, die als Parameter eine Zeichenkette erwartet und prüft, ob das erste **oder** das letzte Zeichen Kleinbuchstaben sind. Die Funktion soll einen Wahrheitswert zurückgeben." ] }, { @@ -74,23 +65,23 @@ "metadata": {}, "outputs": [], "source": [ - "def test_square_root():\n", - " # Implementieren Sie hier die Funktion test_square_root\n", + "def is_lower_first_last_char(s):\n", + " pass\n", "\n", "\n", - "# Rufen Sie hier die Funktion test_square_root auf\n", - "test_square_root()" + "is_lower_first_last_char(\"Test\")\n", + "is_lower_first_last_char(\"test\")\n", + "is_lower_first_last_char(\"tEST\")\n", + "is_lower_first_last_char(\"TESt\")\n", + "is_lower_first_last_char(\"TesT\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Aufgabe 2\n", - "\n", - "*(Dies ist [Aufgabe 2 im 7. Kapitel](https://scm.cms.hu-berlin.de/ibi/python/blob/master/notebooks/seminar07.ipynb#aufgabe-2).)*\n", - "\n", - "Die eingebaute Funktion `eval` erwartet eine Zeichenkette und führt sie dann mit dem Python-Interpreter aus. Beispielsweise:" + "### 1c \n", + "Schreiben Sie eine Funktion, die als Parameter eine Zeichenkette erwartet und prüft, ob **alle** Zeichen der Zeichenkette Ziffern (0,...,9) sind. Die Funktion soll einen Wahrheitswert zurückgeben." ] }, { @@ -99,17 +90,24 @@ "metadata": {}, "outputs": [], "source": [ - "eval('1 + 2 * 3')" + "def is_number(s):\n", + " pass\n", + "\n", + "\n", + "is_number(\"9847\")\n", + "is_number(\"9.312\")\n", + "is_number(\"T238ws\")\n", + "is_number(\"+4917600011100\")\n", + "is_number(\"0049176-00011100\")\n", + "is_number(\"004917600011100\")" ] }, { - "cell_type": "code", - "execution_count": null, + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "import math\n", - "eval('math.sqrt(5)')" + " ### 1d\n", + "Schreiben Sie jeweils eine Funktion, die als Parameter eine Zeichenkette erwartet und alle Ziffern innerhalb einer Zeichenkette ausgibt." ] }, { @@ -118,16 +116,26 @@ "metadata": {}, "outputs": [], "source": [ - "eval('type(math.pi)')" + "def return_digits(s):\n", + " pass\n", + "\n", + "\n", + "return_digits(\"123123\")\n", + "return_digits(\"9847\")\n", + "return_digits(\"9.312\")\n", + "return_digits(\"T238ws\")\n", + "return_digits(\"Die Hausaufgabenabgabe ist am 13.Februar 2022.\")\n", + "return_digits(\"Und zwar vor 00:00.\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Schreiben Sie eine Funktion `eval_loop`, die den Nutzer iterativ bittet etwas einzugeben, die eingegebene Zeichenkette mittels `eval` ausführt und schließlich das Ergebnis ausgibt. \n", + "### 1e\n", + "Schreiben Sie eine Funktion, die als Parameter zwei Zeichenketten `s` und `w` erwartet und **alle** Vorkommen von `w` innerhalb von `s` zählt. Hierbei soll Groß-/Kleinschreibung ignoriert werden.\n", "\n", - "Die Funktion sollte so lange laufen, bis der Nutzer `fertig` eingibt und dann sollte der Rückgabewert des letzten ausgeführten Ausdrucks ausgegeben werden." + "Hinweis: Falls das Wort *USA* gefunden werden soll, sollen auch *usa, Usa, uSa*, usw. gefunden werden." ] }, { @@ -136,23 +144,24 @@ "metadata": {}, "outputs": [], "source": [ - "# Implementieren Sie hier die Funktion eval_loop" + "def count_occ(s, w):\n", + " pass\n", + "\n", + "\n", + "count_occ(\"Yippie yippie Yeah YiPPIE Yeah, Krawall und Remmi Demmi! Yippi YIPI Yeah YIPPIE Yeah, Krawall und Remmi Demmi!\", \"yippie\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Aufgabe 3\n", - "\n", - "Ziel dieser Aufgabe ist, dass Sie üben, fremden Code zu lesen, zu verstehen und zu verändern. \n", - "In [Aufgabe 3 im 7. Kapitel](https://scm.cms.hu-berlin.de/ibi/python/blob/master/notebooks/seminar07.ipynb#aufgabe-3) wird eine Methode zur näherungsweisen Berechnung von $\\pi$ vorgestellt, einschließlich des [Quellcodes](http://thinkpython2.com/code/pi.py). Verändern Sie diesen Quellcode, so dass stattdessen die Näherungsformel \n", + "## Aufgabe 2\n", "\n", - "\\begin{equation}\n", - "\\pi = \\sqrt{12}\\sum^\\infty_{k=0} \\frac{(-3)^{-k}}{2k+1} = \\sqrt{12}\\sum^\\infty_{k=0} \\frac{(-\\frac{1}{3})^k}{2k+1}\n", - "\\end{equation}\n", + "Schreiben Sie eine Funktion, die eine Zeichenkette als Parameter erwartet und die Zeichenkette folgendermaßen ändert.Nutzen Sie dafür **nur** [eingebauten Methoden (\"built-in methods\")](https://docs.python.org/3/library/stdtypes.html#string-methods), für jeden Task eine neue.\n", "\n", - "zur Berechnung von $\\pi$ verwendet wird ([Madhava–Leibniz Folge](https://en.wikipedia.org/wiki/Approximations_of_%CF%80#Middle_Ages)). Kommentieren Sie Ihren Quellcode in eigenen Worten (auf Deutsch) und entfernen Sie jeglichen Code, der nicht zur Berechnung benötigt wird. \n" + "- Alle Leerzeichen am Anfang und Ende der Zeichenkette sollen gelöscht werden\n", + "- Alle Minus-Zeichen (\"-\") sollen durch Unterstriche (\"_\") ersetzt werden \n", + "- Der gesamte Text soll nur noch aus Kleinbuchstaben bestehen" ] }, { @@ -161,54 +170,21 @@ "metadata": {}, "outputs": [], "source": [ - " # Implementieren und testen Sie hier ihre Funktion\n", + "def process_text(s):\n", + " pass\n", "\n", - " \n", - " \n", - "print(estimate_pi())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Aufgabe 4\n", "\n", - "Schreiben Sie jeweils eine Funktion, die als Argument eine Zeichenkette erwartet und\n", - " - prüft, ob das erste Zeichen der Zeichenkette ein Kleinbuchstaben ist.\n", - " - prüft, ob das erste und das letzte Zeichen Kleinbuchstaben sind.\n", - " - prüft, ob alle Zeichen der Zeichenkette Zahlen sind.\n", - " - alle Zahlen der Zeichenkette ausgibt.\n", - " - die Stelle ausgibt, an der eine Zahl gefunden wurde.\n", - " \n", - " Rufen Sie ihre Funktionen mit verschiedenen Parametern auf, um sie auf Funktionalität zu testen.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Die nachfolgenden Aufgaben können Sie erst lösen, wenn sie das notebook seminar09.ipynb durchgearbeitet haben" + "process_text(\" The function Return-Digits(S) returns all digits of a string. BELIEVE ME. ... \")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Aufgabe 5 - freiwillig\n", - "\n", - "Diese Aufgabe basiert auf einem Rätsel welches im Radioprogramm [Car Talk](http://www.cartalk.com/content/puzzlers) gesendet wurde. \n", - "\n", - "> Gib' mir ein Wort mit zwei aufeinanderfolgenden doppelten Buchstaben. Ich gebe Dir ein paar Wörter, die sich fast dafür qualifizieren (aber nur fast!) - beispielsweise das Wort Kommission, K-o-m-m-i-s-s-i-o-n. Es wäre gut, aber leider hat sich das \"i\" zwischen \"mm\" und \"ss\" eingeschlichen. Oder \"Ballett\" - wenn wir das \"e\" entfernen könnten, würde es klappen. Aber es gibt mindestens ein Wort, welches zwei aufeinanderfolgende Paare von (jeweils gleichen) Buchstaben hat und vielleicht ist es das einzige solche Wort. Welches Wort ist es?\n", + "## Aufgabe 3\n", "\n", - "Schreiben Sie ein Programm, um das Wort zu finden. Die Lösung für englische Wörter (http://thinkpython2.com/code/cartalk1.py) findet sogar Wörter mit drei aufeinanderfolgenden Buchstabenpaaren (die es im Deutschen vermutlich nicht gibt, zumindest nicht in der hier verwendeten Wortliste). " + "Schreiben Sie eine Funktion, die als Parameter zwei Listen `l` und `d` erwartet und **alle** Elemente aus der Liste `l`, die auch in `d` vorkommen, löscht. Die Rückgabe soll die modifizierte Liste `l` sein.\n", + "\n" ] }, { @@ -217,30 +193,11 @@ "metadata": {}, "outputs": [], "source": [ - "# Implementieren Sie hier das Programm" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Augabe 6 - freiwillig\n", - "Ein ähnliches Problem:\n", - "\n", - "\n", + "def del_elements(l, d):\n", + " pass\n", "\n", - "[Consecutive Vowels](https://xkcd.com/853/), Randall Munroe\n", "\n", - "Schreiben Sie ein Programm, welches das Wort mit den meisten hintereinander auftauchenden Vokalen in unserer Wortliste findet." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Implementieren Sie hier das Programm" + "del_elements([1,3,5,7,9,11,13,15,17,19,21,23,25,27,29], [9,15,21,25])" ] }, {