Skip to content
Snippets Groups Projects
Commit a91d1781 authored by schwabmi's avatar schwabmi
Browse files

updated ha4

parent bef43c44
No related branches found
No related tags found
No related merge requests found
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
# 4. Hausaufgabe # 4. Hausaufgabe
Geben Sie diese Hausaufgabe gemeinsam mit Ihrem/r Partner/in ab. Füllen Sie dazu dieses Notebook aus und speichern Sie es ab (Disketten-Icon oben links). Laden Sie dann die Datei (`hausaufgabe4.ipynb`) in Moodle hoch. Verwenden Sie Kommentare im Python-Quellcode und Markdown-Textboxen im Jupyter-Notebook ([Syntax-Beispiele](https://de.wikipedia.org/wiki/Markdown#Auszeichnungsbeispiele)) um ihr Programm zu kommentieren. Für diese Hausaufgabe sollten Sie alles bis zum 10. Kapitel durchgearbeitet haben, da Iteration, Rekursion, Verzweigungen und Funktionen mit Rückgabewert benötigt werden. Geben Sie diese Hausaufgabe gemeinsam mit Ihrem/r Partner/in ab. Füllen Sie dazu dieses Notebook aus und speichern Sie es ab (Disketten-Icon oben links). Laden Sie dann die Datei (`hausaufgabe4.ipynb`) in Moodle hoch. Verwenden Sie Kommentare im Python-Quellcode und Markdown-Textboxen im Jupyter-Notebook ([Syntax-Beispiele](https://de.wikipedia.org/wiki/Markdown#Auszeichnungsbeispiele)) um ihr Programm zu kommentieren. Für diese Hausaufgabe sollten Sie alles bis zum 10. Kapitel durchgearbeitet haben, da Iteration, Rekursion, Verzweigungen und Funktionen mit Rückgabewert benötigt werden.
- Geben Sie bitte Ihrem Notebook einen Namen, sodass es Ihnen und Ihrem Partner zugeordnet werden kann (z.B. nachname1_nachname2_hausaufgabe2.ipynb) - Geben Sie bitte Ihrem Notebook einen Namen, sodass es Ihnen und Ihrem Partner zugeordnet werden kann (z.B. nachname1_nachname2_hausaufgabe2.ipynb)
- Fügen Sie außerdem Kommentare / Docstrings zu jedem Code hinzu, mit denen Sie erklären, was die Funktion macht (Schleife, Bedingungen, etc. beschreiben). **Falls das nicht gemacht wird, wird der Code nicht bewertet.** - Fügen Sie außerdem Kommentare / Docstrings zu jedem Code hinzu, mit denen Sie erklären, was die Funktion macht (Schleife, Bedingungen, etc. beschreiben). **Falls das nicht gemacht wird, wird der Code nicht bewertet.**
- Falls es **Musterlösungen in den Übungen** gibt, können Sie gerne diese Code übernehmen (eigener Code ist natürlich schöner). Falls Sie das machen, muss aber durch ihre Kommentare hervorgehen, dass Sie den Code verstanden haben. - Falls es **Musterlösungen in den Übungen** gibt, können Sie gerne diese Code übernehmen (eigener Code ist natürlich schöner). Falls Sie das machen, muss aber durch ihre Kommentare hervorgehen, dass Sie den Code verstanden haben.
Wir wünschen viel Erfolg beim Lösen der Aufgaben! Wir wünschen viel Erfolg beim Lösen der Aufgaben!
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Aufgabe 1 ## Aufgabe 1
Nennen Sie das Thema, was für Sie bis jetzt am schwersten zu verstehen war und nennen Sie einen Vorschlag, wie Sie es einfacher verstanden hätten.
Beispiel:
Die print()-Funktion habe ich am Anfang überhaupt nicht verstanden. Zwar gab es eine Definition in den Seminarnotebooks, aber das das war zu unverständlich. Ich hätte mir gewünscht, dass Michel die Funktion an der Tafel vorgestellt hätte und uns gezeigt hätte, wie man sie einsetzt.
%% Cell type:markdown id: tags:
## Aufgabe 2
*(Dies ist [Aufgabe 1 im 7. Kapitel](https://scm.cms.hu-berlin.de/ibi/python/blob/master/notebooks/seminar07.ipynb#aufgabe-1).)* *(Dies ist [Aufgabe 1 im 7. Kapitel](https://scm.cms.hu-berlin.de/ibi/python/blob/master/notebooks/seminar07.ipynb#aufgabe-1).)*
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. 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.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ```
# Implementieren Sie hier die Funktion mysqrt # Implementieren Sie hier die Funktion mysqrt
# Testen Sie hier die Funktion # Testen Sie hier die Funktion
print("Die Wurzel von 2 ist ungefähr ", mysqrt(2)) print("Die Wurzel von 2 ist ungefähr ", mysqrt(2))
print("Die Wurzel von 23 ist ungefähr ", mysqrt(23)) print("Die Wurzel von 23 ist ungefähr ", mysqrt(23))
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
Testen Sie die Funktion, indem Sie eine Funktion `test_square_root` schreiben, die eine Tabelle der folgenden Art ausgibt: Testen Sie die Funktion, indem Sie eine Funktion `test_square_root` schreiben, die eine Tabelle der folgenden Art ausgibt:
``` ```
a mysqrt(a) math.sqrt(a) diff a mysqrt(a) math.sqrt(a) diff
- --------- ------------ ---- - --------- ------------ ----
1.0 1.0 1.0 0.0 1.0 1.0 1.0 0.0
2.0 1.41421356237 1.41421356237 2.22044604925e-16 2.0 1.41421356237 1.41421356237 2.22044604925e-16
3.0 1.73205080757 1.73205080757 0.0 3.0 1.73205080757 1.73205080757 0.0
4.0 2.0 2.0 0.0 4.0 2.0 2.0 0.0
5.0 2.2360679775 2.2360679775 0.0 5.0 2.2360679775 2.2360679775 0.0
6.0 2.44948974278 2.44948974278 0.0 6.0 2.44948974278 2.44948974278 0.0
7.0 2.64575131106 2.64575131106 0.0 7.0 2.64575131106 2.64575131106 0.0
8.0 2.82842712475 2.82842712475 4.4408920985e-16 8.0 2.82842712475 2.82842712475 4.4408920985e-16
9.0 3.0 3.0 0.0 9.0 3.0 3.0 0.0
``` ```
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. 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.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ```
def test_square_root(): def test_square_root():
# Implementieren Sie hier die Funktion test_square_root # Implementieren Sie hier die Funktion test_square_root
# Rufen Sie hier die Funktion test_square_root auf # Rufen Sie hier die Funktion test_square_root auf
test_square_root() test_square_root()
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Aufgabe 3 ## Aufgabe 2
*(Dies ist [Aufgabe 2 im 7. Kapitel](https://scm.cms.hu-berlin.de/ibi/python/blob/master/notebooks/seminar07.ipynb#aufgabe-2).)* *(Dies ist [Aufgabe 2 im 7. Kapitel](https://scm.cms.hu-berlin.de/ibi/python/blob/master/notebooks/seminar07.ipynb#aufgabe-2).)*
Die eingebaute Funktion `eval` erwartet eine Zeichenkette und führt sie dann mit dem Python-Interpreter aus. Beispielsweise: Die eingebaute Funktion `eval` erwartet eine Zeichenkette und führt sie dann mit dem Python-Interpreter aus. Beispielsweise:
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ```
eval('1 + 2 * 3') eval('1 + 2 * 3')
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ```
import math import math
eval('math.sqrt(5)') eval('math.sqrt(5)')
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ```
eval('type(math.pi)') eval('type(math.pi)')
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
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. 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.
Die Funktion sollte so lange laufen, bis der Nutzer `fertig` eingibt und dann sollte der Rückgabewert des letzten ausgeführten Ausdrucks ausgegeben werden. Die Funktion sollte so lange laufen, bis der Nutzer `fertig` eingibt und dann sollte der Rückgabewert des letzten ausgeführten Ausdrucks ausgegeben werden.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ```
# Implementieren Sie hier die Funktion eval_loop # Implementieren Sie hier die Funktion eval_loop
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Aufgabe 4 ## Aufgabe 3
Ziel dieser Aufgabe ist, dass Sie üben, fremden Code zu lesen, zu verstehen und zu verändern. Ziel dieser Aufgabe ist, dass Sie üben, fremden Code zu lesen, zu verstehen und zu verändern.
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 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
\begin{equation} \begin{equation}
\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} \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}
\end{equation} \end{equation}
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. 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.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ```
# Implementieren und testen Sie hier ihre Funktion # Implementieren und testen Sie hier ihre Funktion
print(estimate_pi()) print(estimate_pi())
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Aufgabe 5 ## Aufgabe 4
Schreiben Sie jeweils eine Funktion, die als Argument eine Zeichenkette erwartet und Schreiben Sie jeweils eine Funktion, die als Argument eine Zeichenkette erwartet und
- prüft, ob das erste Zeichen der Zeichenkette ein Kleinbuchstaben ist. - prüft, ob das erste Zeichen der Zeichenkette ein Kleinbuchstaben ist.
- prüft, ob das erste und das letzte Zeichen Kleinbuchstaben sind. - prüft, ob das erste und das letzte Zeichen Kleinbuchstaben sind.
- prüft, ob alle Zeichen der Zeichenkette Zahlen sind. - prüft, ob alle Zeichen der Zeichenkette Zahlen sind.
- alle Zahlen der Zeichenkette ausgibt. - alle Zahlen der Zeichenkette ausgibt.
- die Stelle ausgibt, an der eine Zahl gefunden wurde. - die Stelle ausgibt, an der eine Zahl gefunden wurde.
Rufen Sie ihre Funktionen mit verschiedenen Parametern auf, um sie auf Funktionalität zu testen. Rufen Sie ihre Funktionen mit verschiedenen Parametern auf, um sie auf Funktionalität zu testen.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ```
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
Die nachfolgenden Aufgaben können Sie erst lösen, wenn sie das notebook seminar09.ipynb durchgearbeitet haben Die nachfolgenden Aufgaben können Sie erst lösen, wenn sie das notebook seminar09.ipynb durchgearbeitet haben
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Aufgabe 6 - freiwillig ## Aufgabe 5 - freiwillig
Diese Aufgabe basiert auf einem Rätsel welches im Radioprogramm [Car Talk](http://www.cartalk.com/content/puzzlers) gesendet wurde. Diese Aufgabe basiert auf einem Rätsel welches im Radioprogramm [Car Talk](http://www.cartalk.com/content/puzzlers) gesendet wurde.
> 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? > 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?
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 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).
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ```
# Implementieren Sie hier das Programm # Implementieren Sie hier das Programm
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Augabe 7 - freiwillig ## Augabe 6 - freiwillig
Ein ähnliches Problem: Ein ähnliches Problem:
![But the windows! What if there's a voyeur watchi-- wait, now I'm turned on too.](https://imgs.xkcd.com/comics/consecutive_vowels.png) ![But the windows! What if there's a voyeur watchi-- wait, now I'm turned on too.](https://imgs.xkcd.com/comics/consecutive_vowels.png)
[Consecutive Vowels](https://xkcd.com/853/), Randall Munroe [Consecutive Vowels](https://xkcd.com/853/), Randall Munroe
Schreiben Sie ein Programm, welches das Wort mit den meisten hintereinander auftauchenden Vokalen in unserer Wortliste findet. Schreiben Sie ein Programm, welches das Wort mit den meisten hintereinander auftauchenden Vokalen in unserer Wortliste findet.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ```
# Implementieren Sie hier das Programm # Implementieren Sie hier das Programm
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
![Smiley](https://upload.wikimedia.org/wikipedia/commons/0/0f/Face-glasses.svg) ![Smiley](https://upload.wikimedia.org/wikipedia/commons/0/0f/Face-glasses.svg)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment