Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
No results found
Show changes
Commits on Source (128)
Showing
with 18551 additions and 7252 deletions
...@@ -19,18 +19,17 @@ indem Sie mit der rechten Maustaste auf die Links klicken und /Ziel ...@@ -19,18 +19,17 @@ indem Sie mit der rechten Maustaste auf die Links klicken und /Ziel
speichern unter.../ wählen: speichern unter.../ wählen:
- [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar00.ipynb][Einführung]] - [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar00.ipynb][Einführung]]
- [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar01.ipynb][1: Die ersten Programme]] - [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar01.ipynb][1: Operatoren, Ausdrücke, Typen]]
- [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar02.ipynb][2: Variablen, Ausdrücke und Anweisungen]] - [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar02.ipynb][2: Variablen und Anweisungen]]
- [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar03.ipynb][3: Funktionen]] - [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar03.ipynb][3: Funktionen]]
- [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar03extra.ipynb][3 extra: reguläre Ausdrücke]] - [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar04.ipynb][4: Turtle: Schnittstellenentwurf]]
- [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar04.ipynb][4: Fallstudie: Schnittstellenentwurf]]
- [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar05.ipynb][5: Verzweigungen und Rekursion]] - [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar05.ipynb][5: Verzweigungen und Rekursion]]
- [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar06.ipynb][6: Ertragreiche Funktionen]] - [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar06.ipynb][6: Ertragreiche Funktionen]]
- [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar07.ipynb][7: Iteration]] - [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar07.ipynb][7: Iteration und Suche]]
- [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar08.ipynb][8: Zeichenketten]] - [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar08.ipynb][8: Reguläre Ausdrücke und Zeichenketten]]
- [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar09.ipynb][9: Fallstudie: Wortspiele]] - [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar09.ipynb][9: Listen]]
- [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar10.ipynb][10: Listen]] - [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar10.ipynb][10: Assoziative Datenfelder]]
- [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar11.ipynb][11: Assoziative Datenfelder]] - [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar11.ipynb][11: Tupel]]
Merken Sie sich, wo Sie die Dateien gespeichert haben und navigieren Merken Sie sich, wo Sie die Dateien gespeichert haben und navigieren
Sie dann mit Jupyter zu diesem Ordner, um sie zu öffnen. Sie dann mit Jupyter zu diesem Ordner, um sie zu öffnen.
......
img/by-nc-sa.png

21.9 KiB

Sie können sich die Notebooks hier in GitLab ansehen aber nicht * Seminar Problemorientierte Programmierung
ausführen. Dazu müssen Sie sie herunterladen und in Jupyter
öffnen. Klicken Sie dazu auf der Seite mit dem jeweiligen Notebook auf Dieses Projekt enthält Jupyter-Notebooks für einen
den Button "Download" und speichern Sie es als Datei: Python-Programmierkurs. Die Notebooks sind im Wesentlichen eine
Übersetzung der 2. Ausgabe des Buches [[http://greenteapress.com/wp/think-python-2e/][Think Python]] von
Allen B. Downey. Es gibt das Buch auch in einer offiziellen deutschen
Übersetzung mit dem Titel /Programmieren lernen mit Python/.
Sie finden die Notebooks im Ordner [[file:notebooks/][notebooks]]. Sie können sich die
Notebooks hier in GitLab ansehen aber nicht ausführen. Dazu müssen Sie
sie herunterladen und in Jupyter öffnen. Klicken Sie dazu auf der
Webseite mit dem jeweiligen Notebook auf den Button "Download" und
speichern Sie es als Datei:
[[file:img/download.png]] [[file:img/download.png]]
Alternativ können Sie auch direkt hier die Dateien herunterladen, Alternativ können Sie die Notebooks auch direkt hier herunterladen,
indem Sie mit der rechten Maustaste auf die Links klicken und /Ziel indem Sie mit der rechten Maustaste auf die Links klicken und /Ziel
speichern unter.../ wählen: speichern unter.../ wählen:
- [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar00.ipynb][Einführung]] - [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar00.ipynb][Einführung]]
- [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar01.ipynb][1: Die ersten Programme]] - [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar01.ipynb][1: Operatoren, Ausdrücke, Typen]]
- [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar02.ipynb][2: Variablen, Ausdrücke und Anweisungen]] - [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar02.ipynb][2: Variablen und Anweisungen]]
- [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar03.ipynb][3: Funktionen]] - [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar03.ipynb][3: Funktionen]]
- [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar03extra.ipynb][3 extra: reguläre Ausdrücke]] - [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar04.ipynb][4: Turtle: Schnittstellenentwurf]]
- [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar04.ipynb][4: Fallstudie: Schnittstellenentwurf]]
- [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar05.ipynb][5: Verzweigungen und Rekursion]] - [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar05.ipynb][5: Verzweigungen und Rekursion]]
- [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar06.ipynb][6: Ertragreiche Funktionen]] - [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar06.ipynb][6: Ertragreiche Funktionen]]
- [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar07.ipynb][7: Iteration]] - [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar07.ipynb][7: Iteration und Suche]]
- [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar08.ipynb][8: Zeichenketten]] - [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar08.ipynb][8: Reguläre Ausdrücke und Zeichenketten]]
- [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar09.ipynb][9: Fallstudie: Wortspiele]] - [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar09.ipynb][9: Listen]]
- [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar10.ipynb][10: Listen]] - [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar10.ipynb][10: Assoziative Datenfelder]]
- [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar11.ipynb][11: Assoziative Datenfelder]] - [[https://scm.cms.hu-berlin.de/ibi/python/raw/master/notebooks/seminar11.ipynb][11: Tupel]]
Merken Sie sich, wo Sie die Dateien gespeichert haben und navigieren
Sie dann mit Jupyter zu diesem Ordner, um sie zu öffnen.
[[file:img/cc-by-nc.png]] Dieser Kurs ist als freies Werk unter der Lizenz
[[http://creativecommons.org/licenses/by-nc/3.0/][Creative Commons Attribution-NonCommercial 3.0 Unported]] verfügbar. Sie
dürfen die Inhalte kopieren, verteilen und verändern, solange Sie die
Urheber nennen und sie nicht für kommerzielle Zwecke nutzen.
** Tipps zur Einrichtung von Python und Jupyter
*** Allgemeine Hinweise
- Im Kurs wird durchgängig Python 3 benutzt. Daher bitte darauf
achten, keine alte Python-Version (2.6, 2.7, etc.) zu
installieren. Am besten mindestens Python 3.5.3 benutzen, aktuellere
Versionen sind auch ok.
- Helfen Sie sich gegenseitig bei der Installation und unterstützen
Sie sich bei Problemen. Benutzen Sie auch gerne das Forum bei einem
spezifischen Problem, um Hilfe von Ihren Kommiliton*innen zu
erhalten. Wenn niemand helfen kann, helfen wir Ihnen.
*** Windows
- [[https://www.anaconda.com/download]]
- [[https://technivore.org/2016/02/27/python-jupyter-windows/]]
*** Linux
- Je nach Distribution das passende Paket installieren, z.B. in Debian mittels ~apt-get install python3-notebook~.
- Anaconda enthält sowohl Jupyter Notebooks, als auch Python 3.5 oder 3.6 Kernel und einige wichtige Python-Bibliotheken wie z.B. Numpy.
- Die aktuelle Anaconda-Distribution ist hier zu finden: [[https://www.anaconda.com/download/#linux]]
- Ältere Anaconda-Distributionen finden sich hier: [[https://docs.anaconda.com/free/anaconda/reference/packages/oldpkglists/]]
- [[https://docs.anaconda.com/anaconda/install/linux][Hilfestellungen zur Installation von Conda]]
*** Mac
- Die aktuelle Anaconda-Distributon finden sich hier: [[https://www.anaconda.com/download/#macos]]
- Mac OS X Installations-Hilfe: [[https://docs.anaconda.com/anaconda/install/mac-os#macos-graphical-install]]
** Hinweise zu GitLab
Das System, auf dem Sie diese Seite gerade lesen und in dem Sie die
Notebooks finden, nennt sich *GitLab* und ist eine professionelle
Umgebung zur kollaborativen Softwareentwicklung. Hier können
Programmierer*innen Quellcode abspeichern, Änderungen verfolgen und
rückgängig machen, Fehler melden und Code dokumentieren.
Wenn Sie *Fehler* in den Jupyter-Notebooks finden oder *Hinweise zur
Verbesserung* haben, können Sie diese im Menü links unter [[https://scm.cms.hu-berlin.de/ibi/python/issues][Issues]]
hinzufügen.
Fortgeschrittene können sich dieses Projekt auch auf ihrem eigenen
Rechner *mittels [[https://de.wikipedia.org/wiki/Git][Git]] klonen* und dann immer die aktuellste Version der
Notebooks herunterladen.
Sie können die Möglichkeiten des Systems später auch für Ihre *Haus-
oder Abschlussarbeiten* nutzen, indem Sie [[https://scm.cms.hu-berlin.de/projects/new][ein eigenes Projekt anlegen]]
und dort Ihre Dateien sicher abspeichern. Dazu sollten Sie sich mit
der Versionsverwaltungssoftware [[https://de.wikipedia.org/wiki/Git][Git]] vertraut machen.
** Ressourcen rund um Python
- Ein [[http://introtopython.org/][freier Python-Kurs]] (auf Englisch), ebenfalls basierend auf
Jupyter-Notebooks.
- Die [[https://docs.python.org/3/][offizielle Dokumentation für Python 3]].
- Eine [[https://scm.cms.hu-berlin.de/ibi/notebooks][Sammlung interessanter Notebooks]] mit vielen Beispielen.
# https://github.com/jupyter/jupyter/wiki/A-gallery-of-interesting-Jupyter-Notebooks
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<h1>Table of Contents<span class="tocSkip"></span></h1>
<div class="toc"><ul class="toc-item"><li><span><a href="#Aufgabe-1" data-toc-modified-id="Aufgabe-1-1"><span class="toc-item-num">&nbsp;&nbsp;</span>Aufgabe 1</a></span></li><li><span><a href="#Aufgabe-2" data-toc-modified-id="Aufgabe-2-2"><span class="toc-item-num">&nbsp;&nbsp;</span>Aufgabe 2</a></span></li><li><span><a href="#Aufgabe-3" data-toc-modified-id="Aufgabe-3-3"><span class="toc-item-num">&nbsp;&nbsp;</span>Aufgabe 3</a></span></li></ul></div>
%% Cell type:markdown id: tags:
# 1. Hausaufgabe # 1. Hausaufgabe
### Bitte lesen Sie sich die nachfolgenden Hinweise zur Hausaufgabe gut durch. ### Bitte lesen Sie sich die nachfolgenden Hinweise zur Hausaufgabe gut durch.
Geben Sie diese Hausaufgabe gemeinsam als Pair Programming Gruppe ab. Füllen Sie dazu dieses Notebook aus und speichern Sie es ab (Disketten-Icon oben links). Laden Sie dann die Datei unter `Hausaufgabe 1` in Moodle hoch. Geben Sie diese Hausaufgabe gemeinsam als Pair Programming Gruppe ab. Füllen Sie dazu dieses Notebook aus und speichern Sie es ab (Disketten-Icon oben links). Laden Sie dann die Datei unter `Hausaufgabe 1` in Moodle hoch.
**Tipps und Anmerkungen**: **Tipps und Anmerkungen**:
- Es reicht, wenn ein Gruppenmitglied die Hausaufgabe einreicht. Passen Sie auf, dass Sie in Moodle auf Abgabe drücken, damit es nicht nur ein Entwurf ist. - Es reicht, wenn ein Gruppenmitglied die Hausaufgabe einreicht. Passen Sie auf, dass Sie in Moodle auf Abgabe drücken, damit es nicht nur ein Entwurf ist.
- Nutzen Sie das Wissen aus den bisher bearbeiteten Notebooks (1-3). - Nutzen Sie das Wissen aus den bisher bearbeiteten Notebooks (1-3).
- Nutzen Sie http://pythontutor.com, um ihren Code nachvollziehen zu können und Fehler zu finden! - Nutzen Sie http://pythontutor.com, um ihren Code nachvollziehen zu können und Fehler zu finden!
- Fügen Sie außerdem **kurze Kommentare** zu ihrem Code hinzu, mit denen Sie erklären, was die Funktion macht. Dies kann man durch zwei Varianten machen: - Fügen Sie außerdem **kurze Kommentare** zu ihrem Code hinzu, mit denen Sie erklären, was die Funktion macht. Dies kann man durch zwei Varianten machen:
- inline-Kommentare (Code kommentieren): `#` - inline-Kommentare (Code kommentieren): `#`
- Docstrings (Beschreibung der Funktion): `''' '''` - Docstrings (Beschreibung der Funktion): `''' '''`
- Bitte ändern Sie den Dateinamen ihrer Hausaufgabe zu: **hausaufgabe1_nachnamePartnerIn1_nachnamePartnerIn2.ipynb** - Bitte ändern Sie den Dateinamen ihrer Hausaufgabe zu: **hausaufgabe1_nachnamePartnerIn1_nachnamePartnerIn2.ipynb**
- z.B. `hausaufgabe1_hachmeier_jaeschke.ipynb` - z.B. `hausaufgabe1_hachmeier_jaeschke.ipynb`
- Das können Sie einfach machen, indem Sie **jetzt** oben links auf `hausaufgabe1` klicken und den neuen Namen eingeben. - Das können Sie einfach machen, indem Sie **jetzt** oben links auf `hausaufgabe1` klicken und den neuen Namen eingeben.
- Falls Sie **generative KI** in der Hausaufgabe genutzt haben wie bspw. ChatGPT: Dokumentieren Sie Ihre Nutzung. Geben Sie **alle** Eingaben an, die Sie in der jeweiligen Aufgabe verwendet haben und beschreiben Sie, welche Änderungen Sie vor Abgabe zur Anpassung an die jeweilige Aufgabe vornehmen mussten. Testen Sie Ihre Implementierung hier besonders gründlich und kommentieren Sie **jede Codezeile** sinnvoll. Bitte beachten Sie, dass sie vollständig für den generierten Code verantwortlich sind. - Falls Sie **generative KI** in der Hausaufgabe genutzt haben wie bspw. ChatGPT: Dokumentieren Sie Ihre Nutzung. Geben Sie **alle** Eingaben an, die Sie in der jeweiligen Aufgabe verwendet haben und beschreiben Sie, welche Änderungen Sie vor Abgabe zur Anpassung an die jeweilige Aufgabe vornehmen mussten. Testen Sie Ihre Implementierung hier besonders gründlich und kommentieren Sie **jede Codezeile** sinnvoll. Bitte beachten Sie, dass sie vollständig für den generierten Code verantwortlich sind.
- Bei (Verständnis-)Fragen können Sie mich **frühzeitig** per E-Mail oder während der Sitzungen erreichen. - Bei (Verständnis-)Fragen können Sie mich **frühzeitig** per E-Mail oder während der Sitzungen erreichen.
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
Was gibt jede der folgenden Anweisungen aus? Erklären Sie jeweils die Ausgabe. Was gibt jede der folgenden Anweisungen aus? Erklären Sie jeweils die Ausgabe.
- Welche Funktionen werden genutzt und was machen diese Funktionen? (die `print` -Funktion muss nicht erklärt werden). Achten Sie darauf, in welcher Reihenfolge die Anweisungen ausgeführt werden. - Welche Funktionen werden genutzt und was machen diese Funktionen? (die `print` -Funktion muss nicht erklärt werden). Achten Sie darauf, in welcher Reihenfolge die Anweisungen ausgeführt werden.
- Was ist die Ausgabe? Geben Sie Wert und Datentyp an. - Was ist die Ausgabe? Geben Sie Wert und Datentyp an.
- Nutzen Sie Kommentare wie im Beispiel beschrieben. - Nutzen Sie Kommentare wie im Beispiel beschrieben.
- Nutzen Sie **mehrere Zeilen pro Anweisung, damit Ihre Antwort in die Breite des Codeblocks passt** und man nicht hin- und herscrollen muss. (Sie finden heraus, was ich meine, wenn es passiert ;) ) - Nutzen Sie **mehrere Zeilen pro Anweisung, damit Ihre Antwort in die Breite des Codeblocks passt** und man nicht hin- und herscrollen muss. (Sie finden heraus, was ich meine, wenn es passiert ;) )
Beispiel Beispiel
``` ```
print("a"+"b") print("a"+"b")
# zwei Zeichenketten werden durch den Operator "+" verkettet # zwei Zeichenketten werden durch den Operator "+" verkettet
# Ausgabe: "ab", Datentyp: Zeichenkette/string # Ausgabe: "ab", Datentyp: Zeichenkette/string
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ``` python
print(2 + 3) print(2 + 3)
# #
# #
print(2.2 + 3.3) print(2.2 + 3.3)
# #
# #
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ``` python
print('2' + '3') print('2' + '3')
# #
# #
print('2.2' + '3.3') print('2.2' + '3.3')
# #
# #
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ``` python
print(str(2) + str(3)) print(str(2) + str(3))
# #
# #
print(str(2.2) + str(3.3)) print(str(2.2) + str(3.3))
# #
# #
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ``` python
print(int('2') + int('3')) print(int('2') + int('3'))
# #
# #
print(int('2' + '3')) print(int('2' + '3'))
# #
# #
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ``` python
print(float('2') + float('3')) print(float('2') + float('3'))
# #
# #
print(float('2' + '3')) print(float('2' + '3'))
# #
# #
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ``` python
print(int(2.6 + 2.6)) print(int(2.6 + 2.6))
# #
# #
print(int(2.6) + int(2.6)) print(int(2.6) + int(2.6))
# #
# #
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Aufgabe 2 ## Aufgabe 2
**Tipp**: Wichtig bei den folgenden Aufgaben ist der Umgang mit Zeichenketten und der `print`-Funktion. Das haben Sie in den seminar-Notebooks schon gelernt. Gehen Sie diese zu Beginn der Hausaufgabe noch einmal durch und achten Sie, mit welchen **Operatoren** man Zeichenketten zusammenfügen und verketten kann. **Tipp**: Wichtig bei den folgenden Aufgaben ist der Umgang mit Zeichenketten und der `print`-Funktion. Das haben Sie in den seminar-Notebooks schon gelernt. Gehen Sie diese zu Beginn der Hausaufgabe noch einmal durch und achten Sie, mit welchen **Operatoren** man Zeichenketten zusammenfügen und verketten kann.
### Aufgabe 2a ### Aufgabe 2a
Ihre Aufgabe ist es, eine Funktion `boxprint` zu implementieren, die eine als Argument übergegebene Zeichenkette innerhalb einer Box ausgibt. Die horizontalen Linien der Box sollen durch `-` erzeugt werden, die vertikalen Linien durch `|` und die Ecken durch `+`. Zwischen der Zeichenkette und dem linken und rechten Rand der Box soll jeweils genau ein Leerzeichen stehen. Ihre Aufgabe ist es, eine Funktion `boxprint` zu implementieren, die eine als Argument übergegebene Zeichenkette innerhalb einer Box ausgibt. Die horizontalen Linien der Box sollen durch `-` erzeugt werden, die vertikalen Linien durch `|` und die Ecken durch `+`. Zwischen der Zeichenkette und dem linken und rechten Rand der Box soll jeweils genau ein Leerzeichen stehen.
Beispiel: Bei Übergabe des Arguments `Hello World!` soll die Funktion folgende Ausgabe erzeugen: Beispiel: Bei Übergabe des Arguments `Hello World!` soll die Funktion folgende Ausgabe erzeugen:
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
``` ```
+--------------+ +--------------+
| Hello World! | | Hello World! |
+--------------+ +--------------+
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
Überlegen Sie zunächst, wie Sie das Problem lösen könnten und beschreiben Sie hier kurz ihre Überlegungen bzw. ihr Vorgehen: Überlegen Sie zunächst, wie Sie das Problem lösen könnten und beschreiben Sie hier kurz ihre Überlegungen bzw. ihr Vorgehen:
- -
- -
- -
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ``` python
def boxprint(zeichenkette): def boxprint(zeichenkette):
'''Die Funktion nimmt eine Zeichenkette entgegen und gibt '''Die Funktion nimmt eine Zeichenkette entgegen und gibt
die Zeichenkette innerhalb einer Textbox aus. die Zeichenkette innerhalb einer Textbox aus.
''' '''
pass # Diese Zeile können Sie bei der Implementierung löschen pass # Diese Zeile können Sie bei der Implementierung löschen
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ``` python
# Funktionsaufrufe # Funktionsaufrufe
boxprint("Hello World!") boxprint("Hello World!")
boxprint("Das Reh springt hoch, das Reh springt weit. Warum auch nicht, es hat ja Zeit.") boxprint("Das Reh springt hoch, das Reh springt weit. Warum auch nicht, es hat ja Zeit.")
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ``` python
# Schreiben Sie hier zwei Funktionsaufrufe der Funktion mit eigenen Argumenten # Schreiben Sie hier zwei Funktionsaufrufe der Funktion mit eigenen Argumenten
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
### Aufgabe 2b ### Aufgabe 2b
Mit dem Linux-Programm [cowsay](https://en.wikipedia.org/wiki/Cowsay) kann man verschiedene Tiere "Sprüche klopfen" lassen: Mit dem Linux-Programm [cowsay](https://en.wikipedia.org/wiki/Cowsay) kann man verschiedene Tiere "Sprüche klopfen" lassen:
``` ```
________ ________
< Muuuh! > < Muuuh! >
-------- --------
\ ^__^ \ ^__^
\ (oo)\_______ \ (oo)\_______
(__)\ )\/\ (__)\ )\/\
||----w | ||----w |
|| || || ||
``` ```
Schreiben Sie eine Funktion `stegosay`, die einen als Argument übergebenen Text folgendermaßen ausgibt: Schreiben Sie eine Funktion `stegosay`, die einen als Argument übergebenen Text folgendermaßen ausgibt:
``` ```
___________________________ ___________________________
( Wo bleibt mein Frühstück? ) ( Wo bleibt mein Frühstück? )
--------------------------- ---------------------------
o . . o . .
o / `. .' ' o / `. .' '
o .---. < > < > .---. o .---. < > < > .---.
o | \ \ - ~ ~ - / / | o | \ \ - ~ ~ - / / |
_____ ..-~ ~-..-~ _____ ..-~ ~-..-~
| | \~~~\.' `./~~~/ | | \~~~\.' `./~~~/
--------- \__/ \__/ --------- \__/ \__/
.' O \ / / \ ' .' O \ / / \ '
(_____, `._.' | } \/~~~/ (_____, `._.' | } \/~~~/
`----. / } | / \__/ `----. / } | / \__/
`-. | / | / `. ,~~| `-. | / | / `. ,~~|
~-.__| /_ - ~ ^| /- _ `..-' ~-.__| /_ - ~ ^| /- _ `..-'
| / | / ~-. `-. _ _ _ | / | / ~-. `-. _ _ _
|_____| |_____| ~ - . _ _ _ _ _> |_____| |_____| ~ - . _ _ _ _ _>
``` ```
Nutzen Sie dazu Ihre bei der Programmierung von `boxprint` gesammelte Erfahrung. Auch hier soll das Argument eine variable Länge aufweisen können, die "Sprechbox" soll sich anpassen. Nutzen Sie dazu Ihre bei der Programmierung von `boxprint` gesammelte Erfahrung. Auch hier soll das Argument eine variable Länge aufweisen können, die "Sprechbox" soll sich anpassen.
**Achung**: Die Denkblase ist verschieden zu der Sprachblase auf Aufgabe 2a. **Achung**: Die Denkblase ist verschieden zu der Sprachblase auf Aufgabe 2a.
**Tipp**: Man kann den Stegosaurus im Editiermodus kopieren, Sie müssen nicht jedes Zeichen selbst abtippen. **Tipp**: Man kann den Stegosaurus im Editiermodus kopieren, Sie müssen nicht jedes Zeichen selbst abtippen.
Durch Durch
``` ```
''' '''
Dinoabbildung Zeile 1 Dinoabbildung Zeile 1
Dinoabbildung Zeil 2 Dinoabbildung Zeil 2
... ...
Dinoabbildung Zeile ... Dinoabbildung Zeile ...
''' '''
``` ```
können Sie den Dino vollständig im Editormodus dieses Blocks herauskopieren und in Ihre Funktion einfügen. können Sie den Dino vollständig im Editormodus dieses Blocks herauskopieren und in Ihre Funktion einfügen.
Freiwillige Erweiterung für Fortgeschrittene: Erweitern Sie die Funktion um ein Argument, mit dem eine maximale Breite (Anzahl Zeichen) übergeben werden kann, so dass die ausgegebene Box nicht breiter ist. Implementieren Sie dann die Behandlung von Zeichenketten, die länger als die vorgegebene Breite sind. Sie haben zwei Möglichkeiten: a) die Zeichenkette abschneiden, b) die Zeichenkette umbrechen. Entscheiden Sie sich für eine der beiden Varianten. Hinweis: auf die ersten `k` Zeichen einer Zeichenkette `s` können Sie mittels `s[0:k]` zugreifen. Analog können Sie auf das 2. bis 4. Zeichen mittels `s[1:4]` zugreifen, usw. Freiwillige Erweiterung für Fortgeschrittene: Erweitern Sie die Funktion um ein Argument, mit dem eine maximale Breite (Anzahl Zeichen) übergeben werden kann, so dass die ausgegebene Box nicht breiter ist. Implementieren Sie dann die Behandlung von Zeichenketten, die länger als die vorgegebene Breite sind. Sie haben zwei Möglichkeiten: a) die Zeichenkette abschneiden, b) die Zeichenkette umbrechen. Entscheiden Sie sich für eine der beiden Varianten. Hinweis: auf die ersten `k` Zeichen einer Zeichenkette `s` können Sie mittels `s[0:k]` zugreifen. Analog können Sie auf das 2. bis 4. Zeichen mittels `s[1:4]` zugreifen, usw.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ``` python
print(""" print("""
o . . o . .
o / `. .' ' o / `. .' '
o .---. < > < > .---. o .---. < > < > .---.
o | \ \ - ~ ~ - / / | o | \ \ - ~ ~ - / / |
_____ ..-~ ~-..-~ _____ ..-~ ~-..-~
| | \~~~\.' `./~~~/ | | \~~~\.' `./~~~/
--------- \__/ \__/ --------- \__/ \__/
.' O \ / / \ ' .' O \ / / \ '
(_____, `._.' | } \/~~~/ (_____, `._.' | } \/~~~/
`----. / } | / \__/ `----. / } | / \__/
`-. | / | / `. ,~~| `-. | / | / `. ,~~|
~-.__| /_ - ~ ^| /- _ `..-' ~-.__| /_ - ~ ^| /- _ `..-'
| / | / ~-. `-. _ _ _ | / | / ~-. `-. _ _ _
|_____| |_____| ~ - . _ _ _ _ _> |_____| |_____| ~ - . _ _ _ _ _>
""") """)
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ``` python
def stegosay(z): def stegosay(z):
'''Diese Funktion nimmt eine Zeichenkette entgegen und gibt '''Diese Funktion nimmt eine Zeichenkette entgegen und gibt
die Zeichenkette innerhalb einer Denkblase eines Dinos wieder aus. die Zeichenkette innerhalb einer Denkblase eines Dinos wieder aus.
In dieser Funktion soll der Dinosaurier inklusive der Denkblase ausgegeben werden. In dieser Funktion soll der Dinosaurier inklusive der Denkblase ausgegeben werden.
''' '''
pass # Diese Zeile können Sie bei der Implementierung löschen pass # Diese Zeile können Sie bei der Implementierung löschen
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ``` python
# Testen Sie hier ihre Funktion; fügen Sie auch eigene Tests hinzu # Testen Sie hier ihre Funktion; fügen Sie auch eigene Tests hinzu
stegosay("Wo bleibt mein Frühstück?") stegosay("Wo bleibt mein Frühstück?")
stegosay("Auf einem Baum, da saß ein Specht. Der Baum war hoch, dem Specht war schlecht.") stegosay("Auf einem Baum, da saß ein Specht. Der Baum war hoch, dem Specht war schlecht.")
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Aufgabe 3 ## Aufgabe 3
### Aufgabe 3a ### Aufgabe 3a
Schreiben Sie eine Funktion `sinprint`, die die Sinusfunktion (`math.sin`) im Bereich zwischen 0 und 2π um 90° gedreht ausgibt, also ungefähr so: Schreiben Sie eine Funktion `sinprint`, die die Sinusfunktion (`math.sin`) im Bereich zwischen 0 und 2π um 90° gedreht ausgibt, also ungefähr so:
``` ```
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
``` ```
Hinweise: Hinweise:
- Lösen Sie diese Aufgabe mit Hilfe einer Schleife. Sie kennen die Syntax und Semantik der `while`-Schleife schon aus der Vorlesung. Sie funktioniert in Python genau so, wie sie für den Pseudocode definiert wurde. - Lösen Sie diese Aufgabe mit Hilfe einer Schleife. Sie kennen die Syntax und Semantik der `while`-Schleife schon aus der Vorlesung. Sie funktioniert in Python genau so, wie sie für den Pseudocode definiert wurde.
- Sie müssen selbst entscheiden, wieviele Werte Sie im verlangten Intervall berechnen. Die Kurve oben wurde z.B. mit einem Rasterabstand von 0.2 berechnet (d.h., für die Werte 0, 0.2, 0.4, 0.6, ..., 6.2). Dies können Sie übernehmen. - Sie müssen selbst entscheiden, wieviele Werte Sie im verlangten Intervall berechnen. Die Kurve oben wurde z.B. mit einem Rasterabstand von 0.2 berechnet (d.h., für die Werte 0, 0.2, 0.4, 0.6, ..., 6.2). Dies können Sie übernehmen.
- Damit Sie die Funktion `math.sin` nutzen können, müssen Sie anfangs das `math`-Modul importieren. - Damit Sie die Funktion `math.sin` nutzen können, müssen Sie anfangs das `math`-Modul importieren.
- Folgende Probleme müssen gelöst werden: - Folgende Probleme müssen gelöst werden:
- Umwandeln von Gleitkommazahlen in Ganzzahlen - Umwandeln von Gleitkommazahlen in Ganzzahlen
- Umwandeln von negativen in positive Zahlen - Umwandeln von negativen in positive Zahlen
- Nutzen Sie die `print`-Funktion, um die **Sternchen** (*) an verschiedenen Stellen zu zeichnen. - Nutzen Sie die `print`-Funktion, um die **Sternchen** (*) an verschiedenen Stellen zu zeichnen.
- Falls Sie das Problem nicht lösen können, fragen Sie im Seminar nach. Dort können Sie wertvolle Tipps erhalten. - Falls Sie das Problem nicht lösen können, fragen Sie im Seminar nach. Dort können Sie wertvolle Tipps erhalten.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ``` python
# Beispiel einer einfachen while-Schleife # Beispiel einer einfachen while-Schleife
i = 0 i = 0
while i < 5: while i < 5:
print(i) print(i)
i = i + 1 i = i + 1
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ``` python
import math import math
def sinprint(): def sinprint():
'''Diese Funktion zeichnet eine Sinus-Kurve ohne eine plot-Bibliothek.''' '''Diese Funktion zeichnet eine Sinus-Kurve ohne eine plot-Bibliothek.'''
pass # Diese Zeile können Sie bei der Implementierung löschen pass # Diese Zeile können Sie bei der Implementierung löschen
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ``` python
# Funktionsaufruf # Funktionsaufruf
sinprint() sinprint()
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
### Aufgabe 3b ### Aufgabe 3b
Ändern Sie die Funktion `sinprint`, so dass eine beliebige Funktion gezeichnet werden kann. Diese Funktion sollte als Argument übergeben werden können. Also beispielsweise so: Ändern Sie die Funktion `sinprint`, so dass eine beliebige Funktion gezeichnet werden kann. Diese Funktion sollte als Argument übergeben werden können. Also beispielsweise so:
```python ```python
funcprint(math.sin) funcprint(math.sin)
``` ```
Ändern Sie gleich auch den Namen der Funktion zu `funcprint`, da sie ja jetzt nicht nur die Sinusfunktion ausgeben kann. (In der 2. Aufgabe des 3. Jupyter-Notebooks haben wir die Funktion `do_twice` kennengelernt - dort sehen Sie, wie Sie Funktionen als Argumente übergeben und verwenden können.) Ändern Sie gleich auch den Namen der Funktion zu `funcprint`, da sie ja jetzt nicht nur die Sinusfunktion ausgeben kann. (In der 2. Aufgabe des 3. Jupyter-Notebooks haben wir die Funktion `do_twice` kennengelernt - dort sehen Sie, wie Sie Funktionen als Argumente übergeben und verwenden können.)
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ``` python
import math import math
def funcprint(func): def funcprint(func):
'''Diese Funktion nimmt den Parameter `func` entgegen, der ein Funktionsobjekt repräsentiert und zeichnet '''Diese Funktion nimmt den Parameter `func` entgegen, der ein Funktionsobjekt repräsentiert und zeichnet
die Funktionskurve die Funktionskurve
''' '''
pass # Diese Zeile können Sie bei der Implementierung löschen pass # Diese Zeile können Sie bei der Implementierung löschen
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ``` python
# Funktionsaufruf # Funktionsaufruf
funcprint(math.sin) funcprint(math.sin)
funcprint(math.cos) funcprint(math.cos)
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
### Aufgabe 3c ### Aufgabe 3c
Wenn alles geklappt hat, enthält Ihre Funktion jetzt einige Werte, die als Literale angegeben sind, z.B. Wenn alles geklappt hat, enthält Ihre Funktion jetzt einige Werte, die als Literale angegeben sind, z.B.
- den Anfangs- und Endwert des Intervalls, in dem die Funktion gezeichnet werden soll - den Anfangs- und Endwert des Intervalls, in dem die Funktion gezeichnet werden soll
- die Schrittweite - die Schrittweite
- die Verschiebung des Nullpunkts - die Verschiebung des Nullpunkts
- Skalierung in Richtung der x-Achse (Stauchung, Streckung) - Skalierung in Richtung der x-Achse (Stauchung, Streckung)
- Skalierung in Richtung der y-Achse (Stauchung, Streckung) - Skalierung in Richtung der y-Achse (Stauchung, Streckung)
Erweitern Sie die Funktion `funcprint`, so dass alle diese Werte als Argumente übergeben werden können. Erweitern Sie die Funktion `funcprint`, so dass alle diese Werte als Argumente übergeben werden können.
Fangen Sie mit einem Parameter an und versuchen Sie nach und nach alle Parameter einzusetzen. Falls die nicht funktioniert, rufen Sie Ihre Funktion mit den Parametern auf, die funktionieren. Fangen Sie mit einem Parameter an und versuchen Sie nach und nach alle Parameter einzusetzen. Falls die nicht funktioniert, rufen Sie Ihre Funktion mit den Parametern auf, die funktionieren.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ``` python
import math import math
def funcprint_advanced(func, start, end, step, shift, scale_y): def funcprint_advanced(func, start, end, step, shift, scale_y):
'''Diese Funktion nimmt den Parameter `func` entgegen, der ein Funktionsobjekt repräsentiert und zeichnet '''Diese Funktion nimmt den Parameter `func` entgegen, der ein Funktionsobjekt repräsentiert und zeichnet
die Funktionskurve. Zudem nimmt die Funktion mehrere Parameter entgegen, die die Kurve verändern können. die Funktionskurve. Zudem nimmt die Funktion mehrere Parameter entgegen, die die Kurve verändern können.
''' '''
pass # Diese Zeile können Sie bei der Implementierung löschen pass # Diese Zeile können Sie bei der Implementierung löschen
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ``` python
# Funktionsrauf # Funktionsrauf
funcprint_advanced(math.cos, 2, 10, 0.1, 30, 5) funcprint_advanced(math.cos, 2, 10, 0.1, 30, 5)
``` ```
%% 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)
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
![CC-BY-NC](https://scm.cms.hu-berlin.de/ibi/python/-/raw/master/img/cc-by-nc.png) ![CC-BY-NC](https://scm.cms.hu-berlin.de/ibi/python/-/raw/master/img/cc-by-nc.png)
Dieses Notebook ist als freies Werk unter der Lizenz [Creative Commons Attribution-NonCommercial 3.0 Unported](http://creativecommons.org/licenses/by-nc/3.0/) verfügbar. Sie dürfen die Inhalte kopieren, verteilen und verändern, solange Sie die Urheber nennen und sie nicht für kommerzielle Zwecke nutzen. Dieses Notebook ist als freies Werk unter der Lizenz [Creative Commons Attribution-NonCommercial 3.0 Unported](http://creativecommons.org/licenses/by-nc/3.0/) verfügbar. Sie dürfen die Inhalte kopieren, verteilen und verändern, solange Sie die Urheber nennen und sie nicht für kommerzielle Zwecke nutzen.
......
This diff is collapsed.
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<h1>Table of Contents<span class="tocSkip"></span></h1>
<div class="toc"><ul class="toc-item"><li><span><a href="#Aufgabe-1" data-toc-modified-id="Aufgabe-1-1"><span class="toc-item-num">&nbsp;&nbsp;</span>Aufgabe 1</a></span></li><li><span><a href="#Aufgabe-2" data-toc-modified-id="Aufgabe-2-2"><span class="toc-item-num">&nbsp;&nbsp;</span>Aufgabe 2</a></span></li><li><span><a href="#Aufgabe-3" data-toc-modified-id="Aufgabe-3-3"><span class="toc-item-num">&nbsp;&nbsp;</span>Aufgabe 3</a></span></li><li><span><a href="#Aufgabe-4" data-toc-modified-id="Aufgabe-4-4"><span class="toc-item-num">&nbsp;&nbsp;</span>Aufgabe 4</a></span></li></ul></div>
%% Cell type:markdown id: tags:
# 3. Hausaufgabe # 3. Hausaufgabe
### Bitte lesen Sie sich die nachfolgenden Hinweise zur Hausaufgabe gut durch. ### Bitte lesen Sie sich die nachfolgenden Hinweise zur Hausaufgabe gut durch.
Geben Sie diese Hausaufgabe gemeinsam als Pair Programming Gruppe ab. Füllen Sie dazu dieses Notebook aus und speichern Sie es ab (Disketten-Icon oben links). Laden Sie dann die Datei unter `Hausaufgabe 3` in Moodle hoch. Für diese Hausaufgabe sollten Sie das 4. bis 6. Kapitel durchgearbeitet haben, da Rekursion, Verzweigungen und Funktionen mit Rückgabewert benötigt werden. Geben Sie diese Hausaufgabe gemeinsam als Pair Programming Gruppe ab. Füllen Sie dazu dieses Notebook aus und speichern Sie es ab (Disketten-Icon oben links). Laden Sie dann die Datei unter `Hausaufgabe 3` in Moodle hoch. Für diese Hausaufgabe sollten Sie das 4. bis 6. Kapitel durchgearbeitet haben, da Rekursion, Verzweigungen und Funktionen mit Rückgabewert benötigt werden.
**Tipps und Anmerkungen**: **Tipps und Anmerkungen**:
- Es reicht, wenn ein Gruppenmitglied die Hausaufgabe einreicht. Passen Sie auf, dass Sie in Moodle auf Abgabe drücken, damit es nicht nur ein Entwurf ist. - Es reicht, wenn ein Gruppenmitglied die Hausaufgabe einreicht. Passen Sie auf, dass Sie in Moodle auf Abgabe drücken, damit es nicht nur ein Entwurf ist.
- Nutzen Sie http://pythontutor.com, um ihren Code nachvollziehen zu können und Fehler zu finden! - Nutzen Sie http://pythontutor.com, um ihren Code nachvollziehen zu können und Fehler zu finden!
- Fügen Sie außerdem **kurze Kommentare** zu ihrem Code hinzu, mit denen Sie erklären, was die Funktion macht. Dies kann man durch zwei Varianten machen: - Fügen Sie außerdem **kurze Kommentare** zu ihrem Code hinzu, mit denen Sie erklären, was die Funktion macht. Dies kann man durch zwei Varianten machen:
- inline-Kommentare (Code kommentieren): `#` - inline-Kommentare (Code kommentieren): `#`
- Docstrings (Beschreibung der Funktion): `''' '''` - Docstrings (Beschreibung der Funktion): `''' '''`
- für Kommentare in Markdown-Textboxen im Jupyter-Notebook: ([Syntax-Beispiele](https://de.wikipedia.org/wiki/Markdown#Auszeichnungsbeispiele)) - für Kommentare in Markdown-Textboxen im Jupyter-Notebook: ([Syntax-Beispiele](https://de.wikipedia.org/wiki/Markdown#Auszeichnungsbeispiele))
- Bitte ändern Sie den Dateinamen ihrer Hausaufgabe zu: **hausaufgabe3_nachnamePartnerIn1_nachnamePartnerIn2.ipynb** - Bitte ändern Sie den Dateinamen ihrer Hausaufgabe zu: **hausaufgabe3_nachnamePartnerIn1_nachnamePartnerIn2.ipynb**
- z.B. `hausaufgabe3_hachmeier_jaeschke.ipynb` - z.B. `hausaufgabe3_hachmeier_jaeschke.ipynb`
- Das können Sie einfach machen, indem Sie **jetzt** oben links auf `hausaufgabe3` klicken und den neuen Namen eingeben. - Das können Sie einfach machen, indem Sie **jetzt** oben links auf `hausaufgabe3` klicken und den neuen Namen eingeben.
- Falls Sie **generative KI** in der Hausaufgabe genutzt haben wie bspw. ChatGPT: Dokumentieren Sie Ihre Nutzung. Geben Sie **alle** Eingaben an, die Sie in der jeweiligen Aufgabe verwendet haben und beschreiben Sie, welche Änderungen Sie vor Abgabe zur Anpassung an die jeweilige Aufgabe vornehmen mussten. Testen Sie Ihre Implementierung hier besonders gründlich und kommentieren Sie **jede Codezeile** sinnvoll. Bitte beachten Sie, dass sie vollständig für den generierten Code verantwortlich sind. - Falls Sie **generative KI** in der Hausaufgabe genutzt haben wie bspw. ChatGPT: Dokumentieren Sie Ihre Nutzung. Geben Sie **alle** Eingaben an, die Sie in der jeweiligen Aufgabe verwendet haben und beschreiben Sie, welche Änderungen Sie vor Abgabe zur Anpassung an die jeweilige Aufgabe vornehmen mussten. Testen Sie Ihre Implementierung hier besonders gründlich und kommentieren Sie **jede Codezeile** sinnvoll. Bitte beachten Sie, dass sie vollständig für den generierten Code verantwortlich sind.
- Bei (Verständnis-)Fragen können Sie mich **frühzeitig** per E-Mail oder während der Sitzungen erreichen. - Bei (Verständnis-)Fragen können Sie mich **frühzeitig** per E-Mail oder während der Sitzungen erreichen.
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:
%% Cell type:markdown id: tags:
# Aufgabe 1 # Aufgabe 1
Stellen Sie sich vor, Sie spielen Schere-Stein-Papier mit ihrer Partner\*in. Stellen Sie sich vor, Sie spielen Schere-Stein-Papier mit ihrer Partner\*in.
Wer das Spiel nicht kennt: Wer das Spiel nicht kennt:
Zwei Spieler\*innen müssen sich gleichzeitig für eins der drei Symbole (Schere, Stein oder Papier) entscheiden. Zwei Spieler\*innen müssen sich gleichzeitig für eins der drei Symbole (Schere, Stein oder Papier) entscheiden.
Der Gewinner wird folgendermaßen ermittelt: Der Gewinner wird folgendermaßen ermittelt:
- Stein schlägt Schere - Stein schlägt Schere
- Schere schlägt Papier - Schere schlägt Papier
- Papier schlägt Stein - Papier schlägt Stein
Falls beide Spieler\*innen dasselbe Symbol ausgewählt haben, wird noch einmal gespielt. Falls beide Spieler\*innen dasselbe Symbol ausgewählt haben, wird noch einmal gespielt.
Ihre Aufgabe ist es, einen Durchlauf des Spiels zu implementieren. Ihre Aufgabe ist es, einen Durchlauf des Spiels zu implementieren.
1. Schreiben Sie eine Funktion `schere_stein_papier`, die zwei Zeichenketten als Argumente erwartet und "Spieler\*in 1 gewinnt" oder "Spieler\*in 2 gewinnt" ausgibt, abhängig davon, ob Argument 1 gegen Argument 2 gewinnt oder umgedreht. 1. Schreiben Sie eine Funktion `schere_stein_papier`, die zwei Zeichenketten als Argumente erwartet und "Spieler\*in 1 gewinnt" oder "Spieler\*in 2 gewinnt" ausgibt, abhängig davon, ob Argument 1 gegen Argument 2 gewinnt oder umgedreht.
- Falls die **Argumente gleich** sind, soll eine Mitteilung gemacht werden, dass noch einmal gespielt werden muss. - Falls die **Argumente gleich** sind, soll eine Mitteilung gemacht werden, dass noch einmal gespielt werden muss.
- Decken Sie auch den Fall ab, dass ein Argument eine **andere Zeichenkette** sein kann, z.B. "Brunnen". Hier soll eine Warnung gezeigt werden, dass einer der Spieler\*innen versucht, zu betrügen. - Decken Sie auch den Fall ab, dass ein Argument eine **andere Zeichenkette** sein kann, z.B. "Brunnen". Hier soll eine Warnung gezeigt werden, dass einer der Spieler\*innen versucht, zu betrügen.
2. Schreiben Sie eine Funktion, die die **Nutzer\*in bittet, zwei Zeichenketten einzugeben** und dann die Funktion `schere_stein_papier` nutzt, um zu entscheiden, welche Spieler\*in gewonnen hat. 2. Schreiben Sie eine Funktion, die die **Nutzer\*in bittet, zwei Zeichenketten einzugeben** und dann die Funktion `schere_stein_papier` nutzt, um zu entscheiden, welche Spieler\*in gewonnen hat.
3. **Freiwillig und zum Knobeln**: Schreiben Sie eine Funktion, die drei Durchläufe `schere-stein-papier` spielt und den Gesamtsieger ermittelt. 3. **Freiwillig und zum Knobeln**: Schreiben Sie eine Funktion, die drei Durchläufe `schere-stein-papier` spielt und den Gesamtsieger ermittelt.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ``` python
# Implementieren Sie hier die Funktionen # Implementieren Sie hier die Funktionen
def schere_stein_papier(s1, s2): def schere_stein_papier(s1, s2):
pass # Diese Zeile können Sie bei der Implementierung der Funktion löschen pass # Diese Zeile können Sie bei der Implementierung der Funktion löschen
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ``` python
schere_stein_papier("Stein", "Papier") # Spieler*in 2 gewinnt schere_stein_papier("Stein", "Papier") # Spieler*in 2 gewinnt
schere_stein_papier("Schere", "Papier") # Spieler*in 1 gewinnt schere_stein_papier("Schere", "Papier") # Spieler*in 1 gewinnt
schere_stein_papier("Papier", "Papier") # Unentschieden schere_stein_papier("Papier", "Papier") # Unentschieden
schere_stein_papier("Brunnen", "Papier") # Geschummelt! schere_stein_papier("Brunnen", "Papier") # Geschummelt!
# Rufen Sie hier Ihre Funktion mit allen möglichen Kombinationen auf, # Rufen Sie hier Ihre Funktion mit allen möglichen Kombinationen auf,
# die in den vorherigen Aufrufen noch nicht abgedeckt wurden: # die in den vorherigen Aufrufen noch nicht abgedeckt wurden:
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Aufgabe 2 ## Aufgabe 2
*(Dies ist [Aufgabe 4 im 5. Kapitel](https://scm.cms.hu-berlin.de/ibi/python/blob/master/notebooks/seminar05.ipynb#aufgabe-4).)* *(Dies ist [Aufgabe 4 im 5. Kapitel](https://scm.cms.hu-berlin.de/ibi/python/blob/master/notebooks/seminar05.ipynb#aufgabe-4).)*
Was gibt das folgende Programm aus? Zeichnen Sie (entweder mit Stift und Papier oder in einem Markdown Feld, siehe ein Beispiel unten) ein Stapeldiagramm (siehe [Abschnitt 3.9](https://scm.cms.hu-berlin.de/ibi/python/blob/master/notebooks/seminar03.ipynb#3-9-stapel-diagramme)), das den Zustand des Programms ausgibt, wenn `recurse(3, 0)` aufgerufen wird: Was gibt das folgende Programm aus? Zeichnen Sie (entweder mit Stift und Papier oder in einem Markdown Feld, siehe ein Beispiel unten) ein Stapeldiagramm (siehe [Abschnitt 3.9](https://scm.cms.hu-berlin.de/ibi/python/blob/master/notebooks/seminar03.ipynb#3-9-stapel-diagramme)), das den Zustand des Programms ausgibt, wenn `recurse(3, 0)` aufgerufen wird:
*Hinweis: Laden Sie das digitalisierte Stapeldiagramm zusammen mit diesem Notebook in Moodle hoch. Wenn Sie wollen, können Sie auch ASCII-Textboxen direkt hier einfügen, ungefähr so:* *Hinweis: Laden Sie das digitalisierte Stapeldiagramm zusammen mit diesem Notebook in Moodle hoch. Wenn Sie wollen, können Sie auch ASCII-Textboxen direkt hier einfügen, ungefähr so:*
*Beispiel eines Stapeldiagramms für function_1, die einmal aufgerufen wurde:* *Beispiel eines Stapeldiagramms für function_1, die einmal aufgerufen wurde:*
``` ```
+------------------------------------+ +------------------------------------+
function_1 | parameter_1 -> argument_1 | function_1 | parameter_1 -> argument_1 |
| parameter_2 -> argument_2 | | parameter_2 -> argument_2 |
+------------------------------------+ +------------------------------------+
``` ```
Für jeden Funktionsaufruf von recurse soll ein neues "Fenster" gezeichnet werden. Für jeden Funktionsaufruf von recurse soll ein neues "Fenster" gezeichnet werden.
**Lösung:** **Lösung:**
``` ```
+------------------------------------+ +------------------------------------+
recurse | -> | recurse | -> |
| -> | | -> |
+------------------------------------+ +------------------------------------+
... ...
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ``` python
def recurse(n, s): def recurse(n, s):
''' '''
''' '''
if n == 0: if n == 0:
print(s) print(s)
else: else:
recurse(n-1, n+s) recurse(n-1, n+s)
recurse(3, 0) recurse(3, 0)
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## 2a ## 2a
Was würde passieren, wenn wir diese Funktion so aufrufen würden: `recurse(-1, 0)`? Was würde passieren, wenn wir diese Funktion so aufrufen würden: `recurse(-1, 0)`?
**Lösung**: **Lösung**:
## 2b ## 2b
Fügen Sie einen Docstring zur Funktion hinzu, der alles erklärt, was man wissen sollte, um diese Funktion nutzen zu können (und nicht mehr!). Insbesondere soll erwähnt werden, welche Eigenschaften die Parameter haben müssen. Fügen Sie einen Docstring zur Funktion hinzu, der alles erklärt, was man wissen sollte, um diese Funktion nutzen zu können (und nicht mehr!). Insbesondere soll erwähnt werden, welche Eigenschaften die Parameter haben müssen.
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Aufgabe 3 ## Aufgabe 3
*(Das ist [Aufgabe 4 im 6. Kapitel](https://scm.cms.hu-berlin.de/ibi/python/blob/master/notebooks/seminar06.ipynb#aufgabe-4).)* *(Das ist [Aufgabe 4 im 6. Kapitel](https://scm.cms.hu-berlin.de/ibi/python/blob/master/notebooks/seminar06.ipynb#aufgabe-4).)*
Eine ganze Zahl `a` ist eine Potenz von `b`, wenn `a` durch `b` teilbar ist und `a/b` eine Potenz von `b` ist. (Beispielsweise ist 27 eine Potenz von 3, denn 27 ist durch 3 teilbar und 9 ist eine Potenz von 3.) Schreiben Sie eine Funktion `is_power` die Parameter `a` und `b` erwartet und `True` zurückgibt, wenn `a` eine Potenz von `b` ist (ansonsten `False`). Eine ganze Zahl `a` ist eine Potenz von `b`, wenn `a` durch `b` teilbar ist und `a/b` eine Potenz von `b` ist. (Beispielsweise ist 27 eine Potenz von 3, denn 27 ist durch 3 teilbar und 9 ist eine Potenz von 3.) Schreiben Sie eine Funktion `ist_potenz` die Parameter `a` und `b` erwartet und `True` zurückgibt, wenn `a` eine Potenz von `b` ist (ansonsten `False`).
Sie dürfen die Code aus Kapitel 6 übernehmen. Beantworten Sie dazu folgende Fragen: Sie dürfen die Code aus Kapitel 6 übernehmen. Beantworten Sie dazu folgende Fragen:
- Was ist die Abbruchbedingung/ der Basisfall? - Was ist die Abbruchbedingung/ der Basisfall?
- **Lösung**: - **Lösung**:
- Markieren Sie im Code, an welchen Stellen der Basisfall definiert wird - Markieren Sie im Code, an welchen Stellen der Basisfall definiert wird
- Markieren Sie im Code, an welcher Stelle der rekursive Aufruf stattfindet - Markieren Sie im Code, an welcher Stelle der rekursive Aufruf stattfindet
- Wieviele unterschiedliche Rückgabewerte sind möglich? Welche Rückgabewerte gibt es? - Wieviele unterschiedliche Rückgabewerte sind möglich? Welche Rückgabewerte gibt es?
- **Lösung**: - **Lösung**:
- Rufen Sie die Funktion `ist_potenz` mit verschiedenen Argumenten so auf, dass die verschiedenen Abbruchbedingungen mindestens einmal durchlaufen werden. Rufen Sie die Funktion außerdem so auf, dass jeder Rückgabewert mindestens einmal herauskommt. - Rufen Sie die Funktion `ist_potenz` mit verschiedenen Argumenten so auf, dass die verschiedenen Abbruchbedingungen mindestens einmal durchlaufen werden. Rufen Sie die Funktion außerdem so auf, dass jeder Rückgabewert mindestens einmal herauskommt.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ``` python
def ist_potenz(a,b): def ist_potenz(a,b):
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ``` python
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Aufgabe 4 ## Aufgabe 4
Ziel dieser Aufgabe ist, eine ASCII-Tabelle für die Zeichen mit dem Code von 32 (dezimal) bis 127 (dezimal) mit den zugehören Hexadezimalcodes auszugeben. Das Ergebnis sollte so aussehen: Ziel dieser Aufgabe ist, eine ASCII-Tabelle für die Zeichen mit dem Code von 32 (dezimal) bis 127 (dezimal) mit den zugehören Hexadezimalcodes auszugeben. Das Ergebnis sollte so aussehen:
``` ```
20 21 ! 22 " 23 # 24 $ 25 % 26 & 27 ' 28 ( 29 ) 2a * 2b + 2c , 2d - 2e . 2f / 20 21 ! 22 " 23 # 24 $ 25 % 26 & 27 ' 28 ( 29 ) 2a * 2b + 2c , 2d - 2e . 2f /
30 0 31 1 32 2 33 3 34 4 35 5 36 6 37 7 38 8 39 9 3a : 3b ; 3c < 3d = 3e > 3f ? 30 0 31 1 32 2 33 3 34 4 35 5 36 6 37 7 38 8 39 9 3a : 3b ; 3c < 3d = 3e > 3f ?
40 @ 41 A 42 B 43 C 44 D 45 E 46 F 47 G 48 H 49 I 4a J 4b K 4c L 4d M 4e N 4f O 40 @ 41 A 42 B 43 C 44 D 45 E 46 F 47 G 48 H 49 I 4a J 4b K 4c L 4d M 4e N 4f O
50 P 51 Q 52 R 53 S 54 T 55 U 56 V 57 W 58 X 59 Y 5a Z 5b [ 5c \ 5d ] 5e ^ 5f _ 50 P 51 Q 52 R 53 S 54 T 55 U 56 V 57 W 58 X 59 Y 5a Z 5b [ 5c \ 5d ] 5e ^ 5f _
60 ` 61 a 62 b 63 c 64 d 65 e 66 f 67 g 68 h 69 i 6a j 6b k 6c l 6d m 6e n 6f o 60 ` 61 a 62 b 63 c 64 d 65 e 66 f 67 g 68 h 69 i 6a j 6b k 6c l 6d m 6e n 6f o
70 p 71 q 72 r 73 s 74 t 75 u 76 v 77 w 78 x 79 y 7a z 7b { 7c | 7d } 7e ~ 70 p 71 q 72 r 73 s 74 t 75 u 76 v 77 w 78 x 79 y 7a z 7b { 7c | 7d } 7e ~
``` ```
Lesen Sie sich den Exkurs am Anfang des [7. Kapitels](https://scm.cms.hu-berlin.de/ibi/python/blob/master/notebooks/seminar07.ipynb) durch und **versuchen Sie zu verstehen, wie die Funktion `dez_zu_allem` funktioniert**. Dazu sollte es reichen, die Funktion mit verschiedenen Eingaben aufzurufen und zu verstehen, wie die jeweilige Ausgabe mit der Eingabe zusammenhängt. (Der Parameter `s` stellt das Alphabet für ein Positionssystem dar, wobei alle Zeichen einfach hintereinander als Zeichenkette erwartet werden.) Lesen Sie sich den Exkurs am Anfang des [7. Kapitels](https://scm.cms.hu-berlin.de/ibi/python/blob/master/notebooks/seminar07.ipynb) durch und **versuchen Sie zu verstehen, wie die Funktion `dez_zu_allem` funktioniert**. Dazu sollte es reichen, die Funktion mit verschiedenen Eingaben aufzurufen und zu verstehen, wie die jeweilige Ausgabe mit der Eingabe zusammenhängt. (Der Parameter `s` stellt das Alphabet für ein Positionssystem dar, wobei alle Zeichen einfach hintereinander als Zeichenkette erwartet werden.)
Rufen Sie die Funktion mit dem Dezimalcode für das Zeichen 'B' auf (diesen finden Sie in der ASCII-Tabelle aus der Vorlesung), so dass der Wert als Hexadezimalzahl zurückgegeben wird. Geben Sie diese Hexadezimalzahl mit `print` aus. (Es sollte '42' ausgegeben werden.) Rufen Sie die Funktion mit dem Dezimalcode für das Zeichen 'B' auf (diesen finden Sie in der ASCII-Tabelle aus der Vorlesung), so dass der Wert als Hexadezimalzahl zurückgegeben wird. Geben Sie diese Hexadezimalzahl mit `print` aus. (Es sollte '42' ausgegeben werden.)
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ``` python
# Hilfsfunktion aus Kapitel 7, # Hilfsfunktion aus Kapitel 7,
def dez_zu_allem(n, s): def dez_zu_allem(n, s):
if n == 0: if n == 0:
return "" return ""
return dez_zu_allem(n // len(s), s) + s[n % len(s)] return dez_zu_allem(n // len(s), s) + s[n % len(s)]
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
Mit der Funktion `chr` können wir Dezimalzahlen zwischen 0 und 127 in das entsprechende ASCII-Zeichen (als Zeichenkette) umwandeln. Probieren Sie es aus, indem Sie mit Hilfe von `chr` das Zeichen mit dem (dezimalen) ASCII-Code 84 ausgeben. (Es sollte `T` ausgegeben werden.) Mit der Funktion `chr` können wir Dezimalzahlen zwischen 0 und 127 in das entsprechende ASCII-Zeichen (als Zeichenkette) umwandeln. Probieren Sie es aus, indem Sie mit Hilfe von `chr` das Zeichen mit dem (dezimalen) ASCII-Code 84 ausgeben. (Es sollte `T` ausgegeben werden.)
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ``` python
# Fügen Sie hier Ihren Code ein # Fügen Sie hier Ihren Code ein
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
Schreiben Sie jetzt eine Funktion `zeichentabelle`, die folgende Parameter erwartet: Schreiben Sie jetzt eine Funktion `zeichentabelle`, die folgende Parameter erwartet:
- `anfang`: die Dezimalzahl des ASCII-Codes des ersten Zeichens, welches ausgegeben werden soll - `anfang`: die Dezimalzahl des ASCII-Codes des ersten Zeichens, welches ausgegeben werden soll
- `ende`: die Dezimalzahl des ASCII-Codes des letzten Zeichens, welches ausgegeben werden soll - `ende`: die Dezimalzahl des ASCII-Codes des letzten Zeichens, welches ausgegeben werden soll
- `trennzeichen`: eine Zeichenkette, die als Trennzeichen zwischen zwei Code-Zeichen-Paaren ausgegeben werden soll - `trennzeichen`: eine Zeichenkette, die als Trennzeichen zwischen zwei Code-Zeichen-Paaren ausgegeben werden soll
- `paare_pro_zeile`: die Anzahl an Code-Zeichen-Paaren die pro Zeile ausgegeben werden sollen - `paare_pro_zeile`: die Anzahl an Code-Zeichen-Paaren die pro Zeile ausgegeben werden sollen
Die Funktion soll mit Hilfe einer `for`-Schleife und der `range`-Funktion über alle Dezimalzahlen zwischen `anfang` und `ende` (jeweils inklusive) laufen und den Hexadezimalcode sowie das zugehörige Zeichen durch Leerzeichen getrennt ausgeben. Danach soll das `trennzeichen` ausgegeben werden und nach entsprechend vielen Paaren soll eine neue Zeile erzeugt werden. Die Funktion soll mit Hilfe einer `for`-Schleife und der `range`-Funktion über alle Dezimalzahlen zwischen `anfang` und `ende` (jeweils inklusive) laufen und den Hexadezimalcode sowie das zugehörige Zeichen durch Leerzeichen getrennt ausgeben. Danach soll das `trennzeichen` ausgegeben werden und nach entsprechend vielen Paaren soll eine neue Zeile erzeugt werden.
Hinweis: Sie können bei der `print`-Funktion die Ausgabe eines Zeilenumbruchs unterdrücken, indem Sie dem Parameter `end` einen anderen Wert mitgeben, beispielsweise so: Hinweis: Sie können bei der `print`-Funktion die Ausgabe eines Zeilenumbruchs unterdrücken, indem Sie dem Parameter `end` einen anderen Wert mitgeben, beispielsweise so:
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ``` python
print("Spalte 1", end=" | ") print("Spalte 1", end=" | ")
print("Spalte 2", end=" | ") print("Spalte 2", end=" | ")
print("Spalte 3") print("Spalte 3")
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ``` python
def zeichentabelle(anfang, ende, trennzeichen, paare_pro_zeile): def zeichentabelle(anfang, ende, trennzeichen, paare_pro_zeile):
pass # löschen Sie diese Anweisung, wenn Sie anfangen, die Funktion zu implementieren pass # löschen Sie diese Anweisung, wenn Sie anfangen, die Funktion zu implementieren
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ``` python
zeichentabelle(32, 127, " ", 16) zeichentabelle(32, 127, " ", 16)
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ``` python
zeichentabelle(32, 127, " ", 10) zeichentabelle(32, 127, " ", 10)
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
Hier folgen weitere Tipps ... versuchen Sie es aber erst einmal ohne diese Tipps. Hier folgen weitere Tipps ... versuchen Sie es aber erst einmal ohne diese Tipps.
<a data-flickr-embed="true" href="https://www.flickr.com/photos/jasoneppink/4964471335" title="Spoiler Alert"><img src="https://farm5.staticflickr.com/4110/4964471335_1f86a923f3_n.jpg" width="320" height="213" alt="Spoiler Alert"></a><script async src="//embedr.flickr.com/assets/client-code.js" charset="utf-8"></script> <a data-flickr-embed="true" href="https://www.flickr.com/photos/jasoneppink/4964471335" title="Spoiler Alert"><img src="https://farm5.staticflickr.com/4110/4964471335_1f86a923f3_n.jpg" width="320" height="213" alt="Spoiler Alert"></a><script async src="//embedr.flickr.com/assets/client-code.js" charset="utf-8"></script>
Der Restoperator `%` kann Ihnen helfen, im richtigen Rhythmus Zeilenumbrüche einzufügen. Der Restoperator `%` kann Ihnen helfen, im richtigen Rhythmus Zeilenumbrüche einzufügen.
<a data-flickr-embed="true" href="https://www.flickr.com/photos/jasoneppink/4964471335" title="Spoiler Alert"><img src="https://farm5.staticflickr.com/4110/4964471335_1f86a923f3_n.jpg" width="320" height="213" alt="Spoiler Alert"></a><script async src="//embedr.flickr.com/assets/client-code.js" charset="utf-8"></script> <a data-flickr-embed="true" href="https://www.flickr.com/photos/jasoneppink/4964471335" title="Spoiler Alert"><img src="https://farm5.staticflickr.com/4110/4964471335_1f86a923f3_n.jpg" width="320" height="213" alt="Spoiler Alert"></a><script async src="//embedr.flickr.com/assets/client-code.js" charset="utf-8"></script>
Sie müssen den Rest der aktuellen Zahl bei Division durch `paare_pro_zeile` prüfen. Sie müssen den Rest der aktuellen Zahl bei Division durch `paare_pro_zeile` prüfen.
<a data-flickr-embed="true" href="https://www.flickr.com/photos/jasoneppink/4964471335" title="Spoiler Alert"><img src="https://farm5.staticflickr.com/4110/4964471335_1f86a923f3_n.jpg" width="320" height="213" alt="Spoiler Alert"></a><script async src="//embedr.flickr.com/assets/client-code.js" charset="utf-8"></script> <a data-flickr-embed="true" href="https://www.flickr.com/photos/jasoneppink/4964471335" title="Spoiler Alert"><img src="https://farm5.staticflickr.com/4110/4964471335_1f86a923f3_n.jpg" width="320" height="213" alt="Spoiler Alert"></a><script async src="//embedr.flickr.com/assets/client-code.js" charset="utf-8"></script>
Es ist etwas knifflig, die Zeilen mit dem richtigen Wert beginnen zu lassen (im Beispiel `20`, `30`, `40`). Das ist ganz normal und sie müssen etwas probieren, um das zu schaffen. Es ist etwas knifflig, die Zeilen mit dem richtigen Wert beginnen zu lassen (im Beispiel `20`, `30`, `40`). Das ist ganz normal und sie müssen etwas probieren, um das zu schaffen.
<a data-flickr-embed="true" href="https://www.flickr.com/photos/jasoneppink/4964471335" title="Spoiler Alert"><img src="https://farm5.staticflickr.com/4110/4964471335_1f86a923f3_n.jpg" width="320" height="213" alt="Spoiler Alert"></a><script async src="//embedr.flickr.com/assets/client-code.js" charset="utf-8"></script> <a data-flickr-embed="true" href="https://www.flickr.com/photos/jasoneppink/4964471335" title="Spoiler Alert"><img src="https://farm5.staticflickr.com/4110/4964471335_1f86a923f3_n.jpg" width="320" height="213" alt="Spoiler Alert"></a><script async src="//embedr.flickr.com/assets/client-code.js" charset="utf-8"></script>
Probieren Sie verschiedene Werte für den Rest durch, dann sollte es klappen. Probieren Sie verschiedene Werte für den Rest durch, dann sollte es klappen.
Da Python Unicode unterstützt können mit der `chr`-Funktion alle Zeichen aus dem Unicode-Vorrat ausgegeben werden. Probieren Sie es einmal mit Zahlen größer als 127 aus: Da Python Unicode unterstützt können mit der `chr`-Funktion alle Zeichen aus dem Unicode-Vorrat ausgegeben werden. Probieren Sie es einmal mit Zahlen größer als 127 aus:
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ``` python
print(chr(2000)) print(chr(2000))
print(chr(4000)) print(chr(4000))
print(chr(8000)) print(chr(8000))
print(chr(16000)) print(chr(16000))
print(chr(32000)) print(chr(32000))
print(chr(64000)) print(chr(64000))
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
Und wenn Sie bis hierher gekommen sind: geben Sie eine Tabelle von Zeichen aus einem anderen Schriftsystem Ihrer Wahl aus, indem Sie Ihre Funktion `zeichentabelle` mit anderen Start- und Endwerten aufrufen: Und wenn Sie bis hierher gekommen sind: geben Sie eine Tabelle von Zeichen aus einem anderen Schriftsystem Ihrer Wahl aus, indem Sie Ihre Funktion `zeichentabelle` mit anderen Start- und Endwerten aufrufen:
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ``` python
``` ```
%% 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)
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
![CC-BY-NC](https://scm.cms.hu-berlin.de/ibi/python/-/raw/master/img/cc-by-nc.png) ![CC-BY-NC](https://scm.cms.hu-berlin.de/ibi/python/-/raw/master/img/cc-by-nc.png)
Dieses Notebook ist als freies Werk unter der Lizenz [Creative Commons Attribution-NonCommercial 3.0 Unported](http://creativecommons.org/licenses/by-nc/3.0/) verfügbar. Sie dürfen die Inhalte kopieren, verteilen und verändern, solange Sie die Urheber nennen und sie nicht für kommerzielle Zwecke nutzen. Dieses Notebook ist als freies Werk unter der Lizenz [Creative Commons Attribution-NonCommercial 3.0 Unported](http://creativecommons.org/licenses/by-nc/3.0/) verfügbar. Sie dürfen die Inhalte kopieren, verteilen und verändern, solange Sie die Urheber nennen und sie nicht für kommerzielle Zwecke nutzen.
......
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<h1>Table of Contents<span class="tocSkip"></span></h1>
<div class="toc"><ul class="toc-item"><li><span><a href="#Aufgabe-1" data-toc-modified-id="Aufgabe-1-1"><span class="toc-item-num">&nbsp;&nbsp;</span>Aufgabe 1</a></span></li><li><span><a href="#Aufgabe-2" data-toc-modified-id="Aufgabe-2-2"><span class="toc-item-num">&nbsp;&nbsp;</span>Aufgabe 2</a></span></li><li><span><a href="#Aufgabe-3" data-toc-modified-id="Aufgabe-3-3"><span class="toc-item-num">&nbsp;&nbsp;</span>Aufgabe 3</a></span></li></ul></div>
%% Cell type:markdown id: tags:
# 4. Hausaufgabe # 4. Hausaufgabe
### Bitte lesen Sie sich die nachfolgenden Hinweise zur Hausaufgabe gut durch. ### Bitte lesen Sie sich die nachfolgenden Hinweise zur Hausaufgabe gut durch.
Geben Sie diese Hausaufgabe gemeinsam als Pair Programming Gruppe ab. Füllen Sie dazu dieses Notebook aus und speichern Sie es ab (Disketten-Icon oben links). Laden Sie dann die Datei unter `Hausaufgabe 4` in Moodle hoch. 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 als Pair Programming Gruppe ab. Füllen Sie dazu dieses Notebook aus und speichern Sie es ab (Disketten-Icon oben links). Laden Sie dann die Datei unter `Hausaufgabe 4` in Moodle hoch. 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.
**Tipps und Anmerkungen**: **Tipps und Anmerkungen**:
- Es reicht, wenn ein Gruppenmitglied die Hausaufgabe einreicht. Passen Sie auf, dass Sie in Moodle auf Abgabe drücken, damit es nicht nur ein Entwurf ist. - Es reicht, wenn ein Gruppenmitglied die Hausaufgabe einreicht. Passen Sie auf, dass Sie in Moodle auf Abgabe drücken, damit es nicht nur ein Entwurf ist.
- Nutzen Sie http://pythontutor.com, um ihren Code nachvollziehen zu können und Fehler zu finden! - Nutzen Sie http://pythontutor.com, um ihren Code nachvollziehen zu können und Fehler zu finden!
- Fügen Sie außerdem **kurze Kommentare** zu ihrem Code hinzu, mit denen Sie erklären, was die Funktion macht. Dies kann man durch zwei Varianten machen: - Fügen Sie außerdem **kurze Kommentare** zu ihrem Code hinzu, mit denen Sie erklären, was die Funktion macht. Dies kann man durch zwei Varianten machen:
- inline-Kommentare (Code kommentieren): `#` - inline-Kommentare (Code kommentieren): `#`
- Docstrings (Beschreibung der Funktion): `''' '''` - Docstrings (Beschreibung der Funktion): `''' '''`
- für Kommentare in Markdown-Textboxen im Jupyter-Notebook: ([Syntax-Beispiele](https://de.wikipedia.org/wiki/Markdown#Auszeichnungsbeispiele)) - für Kommentare in Markdown-Textboxen im Jupyter-Notebook: ([Syntax-Beispiele](https://de.wikipedia.org/wiki/Markdown#Auszeichnungsbeispiele))
- Bitte ändern Sie den Dateinamen ihrer Hausaufgabe zu: **hausaufgabe4_nachnamePartnerIn1_nachnamePartnerIn2.ipynb** - Bitte ändern Sie den Dateinamen ihrer Hausaufgabe zu: **hausaufgabe4_nachnamePartnerIn1_nachnamePartnerIn2.ipynb**
- z.B. `hausaufgabe4_hachmeier_jaeschke.ipynb` - z.B. `hausaufgabe4_hachmeier_jaeschke.ipynb`
- Das können Sie einfach machen, indem Sie **jetzt** oben links auf `hausaufgabe4` klicken und den neuen Namen eingeben. - Das können Sie einfach machen, indem Sie **jetzt** oben links auf `hausaufgabe4` klicken und den neuen Namen eingeben.
- Falls Sie **generative KI** in der Hausaufgabe genutzt haben wie bspw. ChatGPT: Dokumentieren Sie Ihre Nutzung. Geben Sie **alle** Eingaben an, die Sie in der jeweiligen Aufgabe verwendet haben und beschreiben Sie, welche Änderungen Sie vor Abgabe zur Anpassung an die jeweilige Aufgabe vornehmen mussten. Testen Sie Ihre Implementierung hier besonders gründlich und kommentieren Sie **jede Codezeile** sinnvoll. Bitte beachten Sie, dass sie vollständig für den generierten Code verantwortlich sind. - Falls Sie **generative KI** in der Hausaufgabe genutzt haben wie bspw. ChatGPT: Dokumentieren Sie Ihre Nutzung. Geben Sie **alle** Eingaben an, die Sie in der jeweiligen Aufgabe verwendet haben und beschreiben Sie, welche Änderungen Sie vor Abgabe zur Anpassung an die jeweilige Aufgabe vornehmen mussten. Testen Sie Ihre Implementierung hier besonders gründlich und kommentieren Sie **jede Codezeile** sinnvoll. Bitte beachten Sie, dass sie vollständig für den generierten Code verantwortlich sind.
- 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.
- Bei (Verständnis-)Fragen können Sie mich **frühzeitig** per E-Mail oder während der Sitzungen erreichen. - Bei (Verständnis-)Fragen können Sie mich **frühzeitig** per E-Mail oder während der Sitzungen erreichen.
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
Implementieren Sie die folgenden Funktionen und rufen Sie ihre Funktionen mit verschiedenen Argumenten auf, um sie auf Funktionalität zu testen. Implementieren Sie die folgenden Funktionen und rufen Sie ihre Funktionen mit verschiedenen Argumenten auf, um sie auf Funktionalität zu testen.
### 1a ### 1a
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. 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.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ``` python
def is_lower_first_char(s): def is_lower_first_char(s):
pass pass
is_lower_first_char("Test") is_lower_first_char("Test")
is_lower_first_char("test") is_lower_first_char("test")
is_lower_first_char("tEST") is_lower_first_char("tEST")
is_lower_first_char("TESt") is_lower_first_char("TESt")
is_lower_first_char("TesT") is_lower_first_char("TesT")
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
### 1b ### 1b
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. 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.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ``` python
def is_lower_first_last_char(s): def is_lower_first_last_char(s):
pass pass
is_lower_first_last_char("Test") is_lower_first_last_char("Test")
is_lower_first_last_char("test") is_lower_first_last_char("test")
is_lower_first_last_char("tEST") is_lower_first_last_char("tEST")
is_lower_first_last_char("TESt") is_lower_first_last_char("TESt")
is_lower_first_last_char("TesT") is_lower_first_last_char("TesT")
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
### 1c ### 1c
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. 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.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ``` python
def is_number(s): def is_number(s):
pass pass
is_number("9847") is_number("9847")
is_number("9.312") is_number("9.312")
is_number("T238ws") is_number("T238ws")
is_number("+4917600011100") is_number("+4917600011100")
is_number("0049176-00011100") is_number("0049176-00011100")
is_number("004917600011100") is_number("004917600011100")
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
### 1d ### 1d
Schreiben Sie jeweils eine Funktion, die als Parameter eine Zeichenkette erwartet und alle Ziffern innerhalb einer Zeichenkette ausgibt. Schreiben Sie jeweils eine Funktion, die als Parameter eine Zeichenkette erwartet und alle Ziffern innerhalb einer Zeichenkette ausgibt.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ``` python
def return_digits(s): def return_digits(s):
pass pass
return_digits("123123") return_digits("123123")
return_digits("9847") return_digits("9847")
return_digits("9.312") return_digits("9.312")
return_digits("T238ws") return_digits("T238ws")
return_digits("Die Hausaufgabenabgabe ist am 13.Februar 2022.") return_digits("Die Hausaufgabenabgabe ist am 13.Februar 2022.")
return_digits("Und zwar vor 00:00.") return_digits("Und zwar vor 00:00.")
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
### 1e ### 1e
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. 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.
Hinweis: Falls das Wort *USA* gefunden werden soll, sollen auch *usa, Usa, uSa*, usw. gefunden werden. Hinweis: Falls das Wort *USA* gefunden werden soll, sollen auch *usa, Usa, uSa*, usw. gefunden werden.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ``` python
def count_occ(s, w): def count_occ(s, w):
pass pass
count_occ("Yippie yippie Yeah YiPPIE Yeah, Krawall und Remmi Demmi! Yippi YIPI Yeah YIPPIE Yeah, Krawall und Remmi Demmi!", "yippie") count_occ("Yippie yippie Yeah YiPPIE Yeah, Krawall und Remmi Demmi! Yippi YIPI Yeah YIPPIE Yeah, Krawall und Remmi Demmi!", "yippie")
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Aufgabe 2 ## Aufgabe 2
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. 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.
- Alle Leerzeichen am Anfang und Ende der Zeichenkette sollen gelöscht werden - Alle Leerzeichen am Anfang und Ende der Zeichenkette sollen gelöscht werden
- Alle Minus-Zeichen ("-") sollen durch Unterstriche ("_") ersetzt werden - Alle Minus-Zeichen ("-") sollen durch Unterstriche ("_") ersetzt werden
- Der gesamte Text soll nur noch aus Kleinbuchstaben bestehen - Der gesamte Text soll nur noch aus Kleinbuchstaben bestehen
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ``` python
def process_text(s): def process_text(s):
pass pass
process_text(" The function Return-Digits(S) returns all digits of a string. BELIEVE ME. ... ") process_text(" The function Return-Digits(S) returns all digits of a string. BELIEVE ME. ... ")
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Aufgabe 3 ## Aufgabe 3
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. 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.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ``` python
def del_elements(l, d): def del_elements(l, d):
pass pass
del_elements([1,3,5,7,9,11,13,15,17,19,21,23,25,27,29], [9,15,21,25]) del_elements([1,3,5,7,9,11,13,15,17,19,21,23,25,27,29], [9,15,21,25])
``` ```
%% 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)
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
![CC-BY-NC](https://scm.cms.hu-berlin.de/ibi/python/-/raw/master/img/cc-by-nc.png) ![CC-BY-NC](https://scm.cms.hu-berlin.de/ibi/python/-/raw/master/img/cc-by-nc.png)
Dieses Notebook ist als freies Werk unter der Lizenz [Creative Commons Attribution-NonCommercial 3.0 Unported](http://creativecommons.org/licenses/by-nc/3.0/) verfügbar. Sie dürfen die Inhalte kopieren, verteilen und verändern, solange Sie die Urheber nennen und sie nicht für kommerzielle Zwecke nutzen. Dieses Notebook ist als freies Werk unter der Lizenz [Creative Commons Attribution-NonCommercial 3.0 Unported](http://creativecommons.org/licenses/by-nc/3.0/) verfügbar. Sie dürfen die Inhalte kopieren, verteilen und verändern, solange Sie die Urheber nennen und sie nicht für kommerzielle Zwecke nutzen.
......
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
# Seminar Problemorientierte Programmierung # Seminar Problemorientierte Programmierung
Falls Sie im Python Programmierkurs sind und dies ihr erstes geöffnetes Jupyter Notebook ist: Falls Sie im Python Programmierkurs sind und dies ihr erstes geöffnetes Jupyter Notebook ist:
**Herzlichen Glückwunsch! Sie haben die erste Hürde gemeistert. :)** **Herzlichen Glückwunsch! Sie haben die erste Hürde gemeistert. :)**
Diese Notebooks sind im Wesentlichen eine Übersetzung der 2. Ausgabe des Buches [Think Python](http://greenteapress.com/wp/think-python-2e/) von Allen B. Downey. Diese Notebooks sind im Wesentlichen eine Übersetzung der 3. Ausgabe des Buches [Think Python](https://greenteapress.com/wp/think-python-3rd-edition/) von Allen B. Downey.
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<h1>Table of Contents<span class="tocSkip"></span></h1>
<div class="toc"><ul class="toc-item"><li><span><a href="#Lernziele-und-Ablauf-diese-Seminars" data-toc-modified-id="Lernziele-und-Ablauf-diese-Seminars-1"><span class="toc-item-num">1&nbsp;&nbsp;</span>Lernziele und Ablauf diese Seminars</a></span></li><li><span><a href="#Tipps" data-toc-modified-id="Tipps-2"><span class="toc-item-num">2&nbsp;&nbsp;</span>Tipps</a></span></li><li><span><a href="#Wiederkehrende-Abschnitte" data-toc-modified-id="Wiederkehrende-Abschnitte-3"><span class="toc-item-num">3&nbsp;&nbsp;</span>Wiederkehrende Abschnitte</a></span></li><li><span><a href="#Hinweise-zur-Benutzung-von-Jupyter" data-toc-modified-id="Hinweise-zur-Benutzung-von-Jupyter-4"><span class="toc-item-num">4&nbsp;&nbsp;</span>Hinweise zur Benutzung von Jupyter</a></span><ul class="toc-item"><li><span><a href="#Jupyter-Notebook-Grundlagen-und-Informationen" data-toc-modified-id="Jupyter-Notebook-Grundlagen-und-Informationen-4.1"><span class="toc-item-num">4.1&nbsp;&nbsp;</span>Jupyter Notebook Grundlagen und Informationen</a></span></li><li><span><a href="#Standardbrowser" data-toc-modified-id="Standardbrowser-4.2"><span class="toc-item-num">4.2&nbsp;&nbsp;</span>Standardbrowser</a></span><ul class="toc-item"><li><span><a href="#Anleitungen" data-toc-modified-id="Anleitungen-4.2.1"><span class="toc-item-num">4.2.1&nbsp;&nbsp;</span>Anleitungen</a></span></li></ul></li><li><span><a href="#Shortcuts" data-toc-modified-id="Shortcuts-4.3"><span class="toc-item-num">4.3&nbsp;&nbsp;</span>Shortcuts</a></span><ul class="toc-item"><li><span><a href="#Beispiel:-Markdown-Zelle-vs.-Code-Zelle" data-toc-modified-id="Beispiel:-Markdown-Zelle-vs.-Code-Zelle-4.3.1"><span class="toc-item-num">4.3.1&nbsp;&nbsp;</span>Beispiel: Markdown Zelle vs. Code Zelle</a></span></li></ul></li></ul></li><li><span><a href="#Exkurs:-Was-mir-an-Python-gefällt:" data-toc-modified-id="Exkurs:-Was-mir-an-Python-gefällt:-5"><span class="toc-item-num">5&nbsp;&nbsp;</span>Exkurs: Was mir an Python gefällt:</a></span></li></ul></div>
%% Cell type:markdown id: tags:
## Lernziele und Ablauf diese Seminars ## Lernziele und Ablauf diese Seminars
Unser Lernziel ist, dass Sie Programmieren lernen (mit Python :-)). Bis dahin ist es ein weiter Weg. Der beste Tipp ist: üben, üben, üben. Unser Lernziel ist, programmieren zu lernen (mit Python :-)). Bis dahin ist es ein weiter Weg. Der beste Tipp ist: üben, üben, üben.
Das Seminar wird wie folgt ablaufen: Das Seminar wird wie folgt ablaufen:
1. Sie arbeiten als Pair-Programming-Team diese Jupyter-Notebooks durch. 1. Sie arbeiten als Pair-Programming-Team diese Jupyter-Notebooks durch.
- Währenddessen bin ich für Sie da, um Fragen zu beantworten und Probleme zu lösen - Währenddessen bin ich für Sie da, um Fragen zu beantworten und Probleme zu lösen
- Nutzen Sie gerne auch das [gemeinsame Etherpad](https://etherpad.gwdg.de/p/Pro2P), um Probleme, Fragen oder fehlerhaften Code zu posten. - Nutzen Sie gerne auch das [gemeinsame Etherpad](https://etherpad.gwdg.de/p/Pro2P), um Probleme, Fragen oder fehlerhaften Code zu posten.
2. Alle ca. 15 Minuten unterbrechen wir das Programmieren und Sie wechseln die Rollen (NavigatorIn <--> FahrerIn) 2. Alle ca. 15 Minuten unterbrechen wir das Programmieren und Sie wechseln die Rollen (NavigatorIn <--> FahrerIn)
3. Die Schritte 1. und 2. wiederholen wir bis zum Ende des Seminars 3. Die Schritte 1. und 2. wiederholen wir bis zum Ende des Seminars
4. Zuhause arbeiten Sie gemeinsam das durch, was Sie im Seminar nicht geschafft haben. Dies gilt besonders für die Aufgaben 4. Zuhause arbeiten Sie gemeinsam das durch, was Sie im Seminar nicht geschafft haben. Dies gilt besonders für die Aufgaben
- Wir werden im Seminar entscheiden, bis zu welchem Notebook Sie kommen sollten. - Wir werden im Seminar entscheiden, bis zu welchem Notebook Sie kommen sollten.
## Tipps ## Tipps
- Arbeiten Sie die Notebooks selbständig im Team durch und probieren Sie möglichst viel aus. Seien Sie kreativ, neugierig und manchmal auch destruktiv. Denn auch durch Fehler lernen Sie. - Arbeiten Sie die Notebooks selbständig im Team durch und probieren Sie möglichst viel aus. Seien Sie kreativ, neugierig und manchmal auch destruktiv. Denn auch durch Fehler lernen Sie.
- Sie können alles in Ihrem Notebook bearbeiten ... nutzen Sie diese Möglichkeit. Ergänzen Sie also Text, löschen Sie, was Sie überflüssig finden, fügen Sie Ihre eigenen Notizen oder Programme hinzu. Dieses Notebook kann Ihr "Portfolio" werden: eine Demonstration dessen, was Sie schon können. - Sie können alles in Ihrem Notebook bearbeiten ... nutzen Sie diese Möglichkeit. Ergänzen Sie also Text, löschen Sie, was Sie überflüssig finden, fügen Sie Ihre eigenen Notizen oder Programme hinzu. Dieses Notebook kann Ihr "Portfolio" werden: eine Demonstration dessen, was Sie schon können.
- Denken Sie daran, alle Code-Blöcke auszuführen. "Unbekannter" Code führt in Jupyter häufig zu leicht vermeidbaren Fehlern. - Denken Sie daran, alle Code-Blöcke auszuführen. "Unbekannter" Code führt in Jupyter häufig zu leicht vermeidbaren Fehlern.
- Falls Sie mal nicht weiterkommen: helfen Sie sich gegenseitig und versuchen Sie verschiedene Dinge. Schreiben Sie Ihr Problem z.B. einfach mal ganz genau hier im Notebook auf. Oft hilft das Aufschreiben eines Problems schon bei der Lösung eines Problems. - Falls Sie mal nicht weiterkommen: helfen Sie sich gegenseitig und versuchen Sie verschiedene Dinge. Schreiben Sie Ihr Problem z.B. einfach mal ganz genau hier im Notebook auf. Oft hilft das Aufschreiben eines Problems schon bei der Lösung eines Problems.
## Wiederkehrende Abschnitte ## Wiederkehrende Abschnitte
- **Exkurse** sind Material, welches Sie sich nur anschauen brauchen, falls es Sie interessiert. Bitte schauen Sie sich die Exkurse eher zu Hause an, als während des Seminars, damit Sie vorwärts kommen. Die Inhalte der Exkurse sind nicht notwendig, um vorwärts zu kommen, aber hilfreich, um mehr zu lernen. - **Exkurse** sind Material, welches Sie sich nur anschauen brauchen, falls es Sie interessiert. Bitte schauen Sie sich die Exkurse eher zu Hause an, als während des Seminars, damit Sie vorwärts kommen. Die Inhalte der Exkurse sind nicht notwendig, um vorwärts zu kommen, aber hilfreich, um mehr zu lernen.
- **Debugging-Abschnitte** erklären, wie Sie Fehler finden und beheben können. - **Debugging-Abschnitte** erklären, wie Sie Fehler finden und beheben können.
- **Glossar-Abschnitte** listen die Begriffe auf, die im Kapitel vermittelt wurden. Es ist eine gute Übung für zu Hause, jeden Begriff dort noch einmal in eigenen Worten zu definieren. - **Glossar-Abschnitte** listen die Begriffe auf, die im Kapitel vermittelt wurden. Es ist eine gute Übung für zu Hause, jeden Begriff dort noch einmal in eigenen Worten zu definieren.
- Schließlich gibt es **Übungen**, diese sollten Sie unbedingt durchführen und erst fortfahren, wenn Sie die Aufgaben lösen konnten und verstanden haben. - Schließlich gibt es **Übungen**, diese sollten Sie unbedingt durchführen und erst fortfahren, wenn Sie die Aufgaben lösen konnten und verstanden haben.
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Hinweise zur Benutzung von Jupyter ## Hinweise zur Benutzung von Jupyter
### Jupyter Notebook Grundlagen und Informationen ### Jupyter Notebook Grundlagen und Informationen
- open-source, browserbasiertes Tool für verschiedene Programmiersprachen (wir benutzen Python) - open-source, browserbasiertes Tool für verschiedene Programmiersprachen (wir benutzen Python)
- **Vorteil**: Code, Visualisierungen und Text / Erklärungen in einem Dokument - **Vorteil**: Code, Visualisierungen und Text / Erklärungen in einem Dokument
- Notebook besteht aus Blöcken bzw. Zellen - Notebook besteht aus Blöcken bzw. Zellen
- Unter der Zelle wird der Rückgabewert des letzten Statements ausgegeben - Unter der Zelle wird der Rückgabewert des letzten Statements ausgegeben
- Quellcode kann auf mehrere Blöcke aufgeteilt werden (Variablen behalten ihre Gültigkeit/Sichtbarkeit) - Quellcode kann auf mehrere Blöcke aufgeteilt werden (Variablen behalten ihre Gültigkeit/Sichtbarkeit)
- Es gibt zwei Arten von Blöcken: "Code" ist für Python-Code, "Markdown" ist für Texte, die Sie mit Hilfe der [Markdown-Syntax](https://de.wikipedia.org/wiki/Markdown#Auszeichnungsbeispiele) formatieren können. - Es gibt zwei Arten von Blöcken: "Code" ist für Python-Code, "Markdown" ist für Texte, die Sie mit Hilfe der [Markdown-Syntax](https://de.wikipedia.org/wiki/Markdown#Auszeichnungsbeispiele) formatieren können.
- Sie können auf Text doppelt klicken, um sich den Markdown-Quellcode anzuzeigen. Probieren Sie es mit diesem Text aus. - Sie können auf Text doppelt klicken, um sich den Markdown-Quellcode anzuzeigen. Probieren Sie es mit diesem Text aus.
- durch die Tastenkombination "Strg" und "Enter" oder durch Drücken von dem "Run" Button oben im Menü kommen Sie wieder in den Lesemodus - durch die Tastenkombination "Strg" und "Enter" oder durch Drücken von dem "Run" Button oben im Menü kommen Sie wieder in den Lesemodus
- Wenn Sie mal etwas "kaputtgespielt" haben, hilft es evtl., im "Kernel"-Menü den "Restart"-Eintrag auszuwählen. - Wenn Sie mal etwas "kaputtgespielt" haben, hilft es evtl., im "Kernel"-Menü den "Restart"-Eintrag auszuwählen.
### Standardbrowser ### Standardbrowser
Bitte verwenden Sie **nicht** Safari oder Internet Explorer. Auch mit Windows Edge gab es in der Vergangenheit Probleme. Wir empfehlen die Verwendung von Firefox, aber auch Google Chrome lief in der Vergangenheit problemlos. Wenn Sie unsicher sind, was ihr aktueller Standardbrowser ist, folgen Sie einfach der folgenden Anleitung zum Ändern des Standardbrowsers und gehen Sie sicher, dass der richtige Standardbrowser ausgewählt ist. Bitte verwenden Sie **nicht** Safari oder Internet Explorer. Auch mit Windows Edge gab es in der Vergangenheit Probleme. Wir empfehlen die Verwendung von Firefox, aber auch Google Chrome lief in der Vergangenheit problemlos. Wenn Sie unsicher sind, was ihr aktueller Standardbrowser ist, folgen Sie einfach der folgenden Anleitung zum Ändern des Standardbrowsers und gehen Sie sicher, dass der richtige Standardbrowser ausgewählt ist.
#### Anleitungen #### Anleitungen
**Änderung des Standardbrowsers in...** **Änderung des Standardbrowsers in...**
*macOS:* *macOS:*
1. Öffnen sie die Systemeinstellungen. 1. Öffnen sie die Systemeinstellungen.
2. Klicken Sie auf „Allgemein“. 2. Klicken Sie auf „Allgemein“.
3. Wählen Sie unter „Standard-Webbrowser“ den gewünschten Browser aus. 3. Wählen Sie unter „Standard-Webbrowser“ den gewünschten Browser aus.
*Ubuntu Linux:* *Ubuntu Linux:*
1. Öffnen Sie die System Settings. 1. Öffnen Sie die System Settings.
2. Klicken Sie auf „Applications“. 2. Klicken Sie auf „Applications“.
3. Wählen Sie in der linken Spalte „Default Applications“ aus. 3. Wählen Sie in der linken Spalte „Default Applications“ aus.
4. Klicken Sie in der Spalte rechts davon auf „Web Browser“. 4. Klicken Sie in der Spalte rechts davon auf „Web Browser“.
5. Wählen Sie „in the following browser:“ aus. 5. Wählen Sie „in the following browser:“ aus.
6. Wählen Sie den gewünschten Browser aus. 6. Wählen Sie den gewünschten Browser aus.
*Windows:* *Windows:*
1. Öffnen Sie die Systemsteuerung. 1. Öffnen Sie die Systemsteuerung.
2. Klicken Sie auf „Standardprogramme“. 2. Klicken Sie auf „Standardprogramme“.
3. Klicken Sie auf „Standardprogramme festlegen“. 3. Klicken Sie auf „Standardprogramme festlegen“.
4. Klicken Sie in der Liste auf den gewünschten Browser. 4. Klicken Sie in der Liste auf den gewünschten Browser.
5. Klicken Sie dann auf „Dieses Programm als Standard festlegen“. 5. Klicken Sie dann auf „Dieses Programm als Standard festlegen“.
### Shortcuts ### Shortcuts
**Bitte probieren Sie alle unten stehenden Befehle und verstehen Sie, was gemacht wird. Das ist die Basis, die Sie für das Arbeiten mit Jupyter Notebooks brauchen.** **Bitte probieren Sie alle unten stehenden Befehle und verstehen Sie, was gemacht wird. Das ist die Basis, die Sie für das Arbeiten mit Jupyter Notebooks brauchen.**
Übersicht: *Menü Help -> Keyboard Shortcuts* Übersicht: *Menü Help -> Keyboard Shortcuts*
Wichtigste Shortcuts: Wichtigste Shortcuts:
- *Enter*: Editiermodus für selektierte Zelle (grün umrandet) - *Enter*: Editiermodus für selektierte Zelle (grün umrandet)
- *Esc*: Editiermodus verlassen/Kommandomodus (blau umrandet) - *Esc*: Editiermodus verlassen/Kommandomodus (blau umrandet)
- *Strg + Enter*: Selektierte Zelle ausführen - *Strg + Enter*: Selektierte Zelle ausführen
- *Shift + Enter*: Selektierte Zelle ausführen und in nächste Zelle springen - *Shift + Enter*: Selektierte Zelle ausführen und in nächste Zelle springen
Im Editiermodus: Im Editiermodus:
- *Tab*: Autocomplete oder Einrücken - *Tab*: Autocomplete oder Einrücken
- *Shift + Tab*: Einrücken rückwärts - *Shift + Tab*: Einrücken rückwärts
Im Kommando-/Lesemodus: Im Kommando-/Lesemodus:
- *B*: Zelle darunter einfügen - *B*: Zelle darunter einfügen
- *A*: Zelle darüber einfügen - *A*: Zelle darüber einfügen
- *DD*: Zelle löschen - *DD*: Zelle löschen
- *M*: Zelltyp Markdown (für formatierte beschreibende Texte, zB diese Zelle) - *M*: Zelltyp Markdown (für formatierte beschreibende Texte, zB diese Zelle)
- *Y*: Zelltyp Code (Default) - *Y*: Zelltyp Code (Default)
- *Strg + Shift + k*: Inhaltsverzeichnis einblenden/ausblenden
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
#### Beispiel: Markdown Zelle vs. Code Zelle #### Beispiel: Markdown Zelle vs. Code Zelle
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
Dies ist eine **Markdown Zelle**. Hier kann jeglicher Text geschrieben werden. Durch Strg+Enter wird er in den Lesemodus gebracht, durch ein einfach Enter (oder Doppelklick) in den Editiermodus. Dies ist eine **Markdown Zelle**. Hier kann jeglicher Text geschrieben werden. Durch Strg+Enter wird er in den Lesemodus gebracht, durch ein einfach Enter (oder Doppelklick) in den Editiermodus.
Hier werden keine Rechnungen ausgeführt, siehe: Hier werden keine Rechnungen ausgeführt, siehe:
5+3 5+3
In diesen Feldern werden Erklärungen, Aufgabenstellungen und schriftliche Antworten von euch stehen. In diesen Feldern werden Erklärungen, Aufgabenstellungen und schriftliche Antworten von euch stehen.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ``` python
# Das ist eine **Code Zelle**, bei Strg+Enter wird die folgende Rechnung ausgeführt und darunter angezeigt # Das ist eine **Code Zelle**, bei Strg+Enter wird die folgende Rechnung ausgeführt und darunter angezeigt
# Mit Enter kommt man in den Editiermodus, mit Strg+Enter wird der Code ausgeführt. # Mit Enter kommt man in den Editiermodus, mit Strg+Enter wird der Code ausgeführt.
# Der Text kann hier nur stehen, da eine Raute am Anfang der Zeile steht. # Der Text kann hier nur stehen, da eine Raute am Anfang der Zeile steht.
# Dadurch werden diese Zeilen nicht ausgeführt. # Dadurch werden diese Zeilen nicht ausgeführt.
31+11 31+11
# In diesen Zellen wird der Python Code geschrieben, manchmal müssen Sie ihn schreiben, # In diesen Zellen wird der Python Code geschrieben, manchmal müssen Sie ihn schreiben,
# manchmal steht der Code schon dort und muss von Ihnen nur ausgeführt werden. # manchmal steht der Code schon dort und muss von Ihnen nur ausgeführt werden.
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
# Code für *Think Python*
Am Anfang eines Notebooks sehen Sie üblicherweise eine Zelle mit einem Code wie diesem:
%% Cell type:code id: tags:
``` python
from os.path import basename, exists
def download(url):
filename = basename(url)
if not exists(filename):
from urllib.request import urlretrieve
local, _ = urlretrieve(url, filename)
print("Downloaded " + str(local))
return filename
download('https://raw.githubusercontent.com/AllenDowney/ThinkPython/v3/thinkpython.py')
import thinkpython
```
%% Cell type:markdown id: tags:
Sie müssen nicht wissen, wie dieser Code funktioniert, aber wenn Sie am Ende des Kurses angelangt sind, wird das meiste davon einen Sinn ergeben. Wie Sie sich vielleicht denken können, wird eine Datei heruntergeladen - genauer gesagt, `thinkpython.py`. Diese Datei enthält Python-Code, der speziell für dieses Buch bereitgestellt wurde.
Die letzte Zeile *importiert* diesen Code, was bedeutet, dass wir den Code im Notebook verwenden können.
In anderen Kapiteln werden Sie Code sehen, der `diagram.py` herunterlädt, mit dem die Diagramme im Buch erstellt werden, sowie `jupyturtle.py`, das in mehreren Kapiteln zur Erstellung von [*Turtle-Grafiken*](https://docs.python.org/3/library/turtle.html) verwendet wird.
An einigen Stellen werden Sie eine Zelle wie diese sehen, die mit `%%expect` beginnt.
%% Cell type:code id: tags:
``` python
%%expect SyntaxError
abs 42
```
%% Cell type:markdown id: tags:
`%%expect` ist nicht Teil von Python - es ist ein [*magischer Befehl*](https://ipython.readthedocs.io/en/stable/interactive/magics.html) von Jupyter, der anzeigt, dass wir erwarten, dass die Zelle einen Fehler produziert. Wenn Sie diesen Befehl sehen, bedeutet das, dass der Fehler beabsichtigt ist. Das tun wir um auf typische Fehler hinzuweisen.
%% Cell type:markdown id: tags:
## Exkurs: Was mir an Python gefällt: ## Exkurs: Was mir an Python gefällt:
In dieser Rubrik, die normalerweise am Anfang eines Kapitels steht, möchte ich Ihnen zeigen, wofür ich Python nutze und warum ich es mag. Sie werden vielleicht noch nicht verstehen, was ich genau mache, aber Sie sehen damit schon einmal die Möglichkeiten von Python und können später darauf zurückgreifen. Da dies ein Exkurs ist, können Sie diese Rubrik gerne auch erst einmal überspringen. In dieser Rubrik, die normalerweise am Anfang eines Kapitels steht, möchte ich Ihnen zeigen, wofür ich Python nutze und warum ich es mag. Sie werden vielleicht noch nicht verstehen, was ich genau mache, aber Sie sehen damit schon einmal die Möglichkeiten von Python und können später darauf zurückgreifen. Da dies ein Exkurs ist, können Sie diese Rubrik gerne auch erst einmal überspringen.
**Hier müssen Sie den Code NIE verändern. Einfach Ausführen durch: *Strg+Enter* oder im Menü unter *> Run*.** **Hier müssen Sie den Code NIE verändern. Einfach Ausführen durch: *Strg+Enter* oder im Menü unter *> Run*.**
*Sollten Sie den Code doch einmal versehentlich verändert haben, sodass der Exkurs nicht mehr korrekt funktioniert, können Sie das Jupyter-Notebook erneut in Gitlab herunterladen* *Sollten Sie den Code doch einmal versehentlich verändert haben, sodass der Exkurs nicht mehr korrekt funktioniert, können Sie das Jupyter-Notebook erneut in Gitlab herunterladen*
Ich finde toll, dass ich mit Python ganz einfach Zufallsexperimente durchtesten kann. Das hilft mir, Stochastik besser zu verstehen. Z.B. das Würfeln mit zwei Würfeln: Ich finde toll, dass ich mit Python ganz einfach Zufallsexperimente durchtesten kann. Das hilft mir, Stochastik besser zu verstehen. Z.B. das Würfeln mit zwei Würfeln:
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ``` python
import random # Zufallszahlen, siehe https://docs.python.org/3/library/random.html import random # Zufallszahlen, siehe https://docs.python.org/3/library/random.html
# Werte initialisieren, größter möglicher Wert bei zwei Würfeln: 6+6=12 # Werte initialisieren, größter möglicher Wert bei zwei Würfeln: 6+6=12
haeufigkeiten = [0 for i in range(13)] haeufigkeiten = [0 for i in range(13)]
wuerfe = 1000 wuerfe = 1000
for i in range(wuerfe): for i in range(wuerfe):
# Würfelsumme für zwei Würfel zählen # Würfelsumme für zwei Würfel zählen
haeufigkeiten[random.randrange(1,7) + random.randrange(1,7)] += 1 haeufigkeiten[random.randrange(1,7) + random.randrange(1,7)] += 1
# Ergebnis als Tabelle ausgeben # Ergebnis als Tabelle ausgeben
print("Wir würfeln wiederholt mit zwei sechsseitigen Würfeln und addieren die Augenzahlen zusammen:") print("Wir würfeln wiederholt mit zwei sechsseitigen Würfeln und addieren die Augenzahlen zusammen:")
print("Summe Augenzahlen:", "\t".join([str(i) for i in range(2,13)]), sep='\t') print("Summe Augenzahlen:", "\t".join([str(i) for i in range(2,13)]), sep='\t')
print("Anzahl der Würfe:", "\t".join([str(i) for i in haeufigkeiten[2:]]), sep='\t') print("Anzahl der Würfe:", "\t".join([str(i) for i in haeufigkeiten[2:]]), sep='\t')
print("Wahrscheinlichkeit:", "\t".join(["{:2.3f}".format(i/wuerfe) for i in haeufigkeiten[2:]]), sep='\t') print("Wahrscheinlichkeit:", "\t".join(["{:2.3f}".format(i/wuerfe) for i in haeufigkeiten[2:]]), sep='\t')
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
![RFC 1149.5 specifies 4 as the standard IEEE-vetted random number.](https://imgs.xkcd.com/comics/random_number.png) ![RFC 1149.5 specifies 4 as the standard IEEE-vetted random number.](https://imgs.xkcd.com/comics/random_number.png)
([Random Number](https://xkcd.com/221/), Randall Munroe) ([Random Number](https://xkcd.com/221/), Randall Munroe)
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
![CC-BY-NC](https://scm.cms.hu-berlin.de/ibi/python/-/raw/master/img/cc-by-nc.png) <img src="https://scm.cms.hu-berlin.de/ibi/python/-/raw/master/img/by-nc-sa.png" alt="CC BY-NC-SA" style="width: 150px;"/>
Der Text dieses Notebooks ist als freies Werk unter der Lizenz [CC BY-NC-SA 4.0 ](https://creativecommons.org/licenses/by-nc-sa/4.0/) verfügbar.
Der Code dieses Notebooks ist als freies Werk unter der Lizenz [MIT License](https://mit-license.org/) verfügbar.
Dieses Notebook ist als freies Werk unter der Lizenz [Creative Commons Attribution-NonCommercial 3.0 Unported](http://creativecommons.org/licenses/by-nc/3.0/) verfügbar. Sie dürfen die Inhalte kopieren, verteilen und verändern, solange Sie die Urheber nennen und sie nicht für kommerzielle Zwecke nutzen. Es handelt sich um übersetzte und leicht veränderte Notebooks von [Allen B. Downey](https://allendowney.com) aus [Think Python: 3rd Edition](https://allendowney.github.io/ThinkPython/index.html).
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.