"Welche Funktionen werden genutzt und was machen diese Funktionen?\n",
"Welche Funktionen werden genutzt und was machen diese Funktionen?\n",
"Entweder Sie nutzen Kommentare (mit Hilfe von der Raute #) im Code oder Sie schreiben die Antworten in eine extra Markdown Zeile.\n",
"Entweder Sie nutzen Kommentare (mit Hilfe von der Raute #) im Code oder Sie schreiben die Antworten in eine extra Markdown Zeile.\n",
"\n",
"\n",
"Falls Sie Kommentare nutzen, nehmen Sie mehrere Zeilen pro Anweisung, damit ihre Antwort in die Breite der Codezelle passt und man nicht hin- und herscrollen muss. (Sie finden heraus, was ich meine, wenn es passiert ;) )\n"
"Falls Sie Kommentare nutzen, nehmen Sie **mehrere Zeilen pro Anweisung, damit ihre Antwort in die Breite der Codezelle passt** und man nicht hin- und herscrollen muss. (Sie finden heraus, was ich meine, wenn es passiert ;) )\n"
]
]
},
},
{
{
...
@@ -48,6 +48,7 @@
...
@@ -48,6 +48,7 @@
"metadata": {},
"metadata": {},
"outputs": [],
"outputs": [],
"source": [
"source": [
"# Hier könnte Ihre Erklärung zur ersten Codezeile stehen.\n",
"print(2 + 3)\n",
"print(2 + 3)\n",
"print(2.2 + 3.3)\n",
"print(2.2 + 3.3)\n",
"print('2' + '3')\n",
"print('2' + '3')\n",
...
@@ -106,7 +107,8 @@
...
@@ -106,7 +107,8 @@
"outputs": [],
"outputs": [],
"source": [
"source": [
"def boxprint(zeichenkette):\n",
"def boxprint(zeichenkette):\n",
" '''Implementieren Sie hier ihre Funktion. Dieses Kommentar können Sie löschen.\n",
" '''Beschreibung der Funktion: Diese Funktion nimmt als Argument eine Zeichenkette entgegen und gibt \n",
" die Zeichenkette innerhalb einer Box aus.\n",
" ''' \n"
" ''' \n"
]
]
},
},
...
@@ -175,9 +177,9 @@
...
@@ -175,9 +177,9 @@
"metadata": {},
"metadata": {},
"outputs": [],
"outputs": [],
"source": [
"source": [
"def stegosay():\n",
"def stegosay(z):\n",
" '''Implementieren Sie hier ihre Funktion. Dieses Kommentar können Sie löschen. \n",
" '''Diese Funktion nimmt als Argument eine Zeichenkette entgegen und gibt \n",
" Das/Die Argument/e müssen Sie sich dieses Mal selbst überlegen.\n",
" die Zeichenkette als Denkblase eines Dinos wieder aus.\n",
" ''' \n",
" ''' \n",
"\n"
"\n"
]
]
...
...
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
<h1>Table of Contents<spanclass="tocSkip"></span></h1>
<h1>Table of Contents<spanclass="tocSkip"></span></h1>
Geben Sie diese Hausaufgabe gemeinsam mit Ihrem/r Partner/in ab. Füllen Sie dazu dieses Notebook aus und speichern Sie es ab (Disketten-Icon oben links). Laden Sie dann die Datei (hausaufgabe1.ipynb) in Moodle hoch. Verwenden Sie Kommentare im Python-Quellcode und Markdown-Textboxen im Jupyter-Notebook ([Syntax-Beispiele](https://de.wikipedia.org/wiki/Markdown#Auszeichnungsbeispiele)) um ihr Programm zu kommentieren.
Geben Sie diese Hausaufgabe gemeinsam mit Ihrem/r Partner/in ab. Füllen Sie dazu dieses Notebook aus und speichern Sie es ab (Disketten-Icon oben links). Laden Sie dann die Datei (hausaufgabe1.ipynb) in Moodle hoch. Verwenden Sie Kommentare im Python-Quellcode und Markdown-Textboxen im Jupyter-Notebook ([Syntax-Beispiele](https://de.wikipedia.org/wiki/Markdown#Auszeichnungsbeispiele)) um ihr Programm zu kommentieren.
Bitte ändern Sie den Dateinamen ihrer Hausaufgabe zu: **hausaufgabe1_nachnamePartner1_nachnamePartner2.ipynb**
Bitte ändern Sie den Dateinamen ihrer Hausaufgabe zu: **hausaufgabe1_nachnamePartner1_nachnamePartner2.ipynb**
z.B. hausaufgabe1_schwab_jaeschke.ipynb
z.B. hausaufgabe1_schwab_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.
Nutzen Sie das Wissen aus den bisher bearbeiteten Notebooks (1-3).
Nutzen Sie das Wissen aus den bisher bearbeiteten Notebooks (1-3).
Wir wünschen viel Erfolg beim Lösen der Aufgaben!
Wir wünschen viel Erfolg beim Lösen der Aufgaben!
**Tipp**: Nutzen Sie http://pythontutor.com, um ihren Code nachvollziehen zu können und Fehler zu finden!
**Tipp**: Nutzen Sie http://pythontutor.com, um ihren Code nachvollziehen zu können und Fehler zu finden!
%% 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?
Welche Funktionen werden genutzt und was machen diese Funktionen?
Entweder Sie nutzen Kommentare (mit Hilfe von der Raute #) im Code oder Sie schreiben die Antworten in eine extra Markdown Zeile.
Entweder Sie nutzen Kommentare (mit Hilfe von der Raute #) im Code oder Sie schreiben die Antworten in eine extra Markdown Zeile.
Falls Sie Kommentare nutzen, nehmen Sie mehrere Zeilen pro Anweisung, damit ihre Antwort in die Breite der Codezelle passt und man nicht hin- und herscrollen muss. (Sie finden heraus, was ich meine, wenn es passiert ;) )
Falls Sie Kommentare nutzen, nehmen Sie **mehrere Zeilen pro Anweisung, damit ihre Antwort in die Breite der Codezelle passt** und man nicht hin- und herscrollen muss. (Sie finden heraus, was ich meine, wenn es passiert ;) )
%% Cell type:code id: tags:
%% Cell type:code id: tags:
```
```
# Hier könnte Ihre Erklärung zur ersten Codezeile stehen.
print(2 + 3)
print(2 + 3)
print(2.2 + 3.3)
print(2.2 + 3.3)
print('2' + '3')
print('2' + '3')
print('2.2' + '3.3')
print('2.2' + '3.3')
print(str(2) + str(3))
print(str(2) + str(3))
print(str(2.2) + str(3.3))
print(str(2.2) + str(3.3))
print(int('2') + int('3'))
print(int('2') + int('3'))
print(int('2' + '3'))
print(int('2' + '3'))
print(float('2') + float('3'))
print(float('2') + float('3'))
print(float('2' + '3'))
print(float('2' + '3'))
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:
**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 manipulieren 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 manipulieren kann.
## Aufgabe 2
## Aufgabe 2
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:
```
```
def boxprint(zeichenkette):
def boxprint(zeichenkette):
'''Implementieren Sie hier ihre Funktion. Dieses Kommentar können Sie löschen.
'''Beschreibung der Funktion: Diese Funktion nimmt als Argument eine Zeichenkette entgegen und gibt
die Zeichenkette innerhalb einer Box aus.
'''
'''
```
```
%% Cell type:code id: tags:
%% Cell type:code id: tags:
```
```
# Testen Sie hier ihre Funktion; fügen Sie auch eigene Tests hinzu
# Testen Sie hier ihre Funktion; fügen Sie auch eigene Tests hinzu
boxprint("Hello World!")
boxprint("Hello World!")
boxprint("Dieser Text muss auch in die Box passen.")
boxprint("Dieser Text muss auch in die Box passen.")
boxprint("und dieser Text auch..................................................... !")
boxprint("und dieser Text auch..................................................... !")
```
```
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
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.
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.
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:
```
```
def stegosay():
def stegosay(z):
'''Implementieren Sie hier ihre Funktion. Dieses Kommentar können Sie löschen.
'''Diese Funktion nimmt als Argument eine Zeichenkette entgegen und gibt
Das/Die Argument/e müssen Sie sich dieses Mal selbst überlegen.
die Zeichenkette als Denkblase eines Dinos wieder aus.
'''
'''
```
```
%% Cell type:code id: tags:
%% Cell type:code id: tags:
```
```
# 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("Dieser Text muss auch in die Box passen.")
stegosay("Dieser Text muss auch in die Box passen.")
stegosay("und dieser Text auch..................................................... !")
stegosay("und dieser Text auch..................................................... !")
```
```
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
## Aufgabe 3
## Aufgabe 3
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:
- Sie können die Aufgabe auch ohne eine Schleife lösen, aber **schöner ist es mit 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 können die Aufgabe auch ohne eine Schleife lösen, aber **schöner ist es mit 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 mit einem Rasterabstand von 0.2 berechnet (d.h., für die Werte 0, 0.2, 0.4, 0.6, ..., 6.2).
- Sie müssen selbst entscheiden, wieviele Werte Sie im verlangten Intervall berechnen. Die Kurve oben wurde mit einem Rasterabstand von 0.2 berechnet (d.h., für die Werte 0, 0.2, 0.4, 0.6, ..., 6.2).
- Denken Sie daran, dass Sie mit der `int`-Funktion eine Gleitkommazahl in eine ganze Zahl umwandeln können (der Dezimalanteil wird abgeschnitten).
- Denken Sie daran, dass Sie mit der `int`-Funktion eine Gleitkommazahl in eine ganze Zahl umwandeln können (der Dezimalanteil wird abgeschnitten).
- 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.
%% Cell type:code id: tags:
%% Cell type:code id: tags:
```
```
def sinprint():
def sinprint():
'''Implementieren Sie hier ihre Funktion. Dieses Kommentar können Sie löschen.
'''Implementieren Sie hier ihre Funktion. Dieses Kommentar können Sie löschen.
Diese Funktion kann man ohne Argument implementieren. Wenn es für Sie einfacher ist,
Diese Funktion kann man ohne Argument implementieren. Wenn es für Sie einfacher ist,
können Sie gerne eins hinzufügen.
können Sie gerne eins hinzufügen.
'''
'''
```
```
%% Cell type:code id: tags:
%% Cell type:code id: tags:
```
```
# Bitte nutzen Sie diese Zelle, um Ihre Funktion zweimal mit verschiedenen Argumenten aufzurufen.
# Bitte nutzen Sie diese Zelle, um Ihre Funktion zweimal mit verschiedenen Argumenten aufzurufen.
```
```
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
Ä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:
```
```
def funcprint():
def funcprint():
'''Implementieren Sie hier ihre Funktion. Dieses Kommentar können Sie löschen.
'''Implementieren Sie hier ihre Funktion. Dieses Kommentar können Sie löschen.
Das/Die Argument/e müssen Sie sich dieses Mal selbst überlegen.
Das/Die Argument/e müssen Sie sich dieses Mal selbst überlegen.
'''
'''
```
```
%% Cell type:code id: tags:
%% Cell type:code id: tags:
```
```
# Bitte nutzen Sie diese Zelle, um Ihre Funktion zweimal mit verschiedenen Argumenten aufzurufen.
# Bitte nutzen Sie diese Zelle, um Ihre Funktion zweimal mit verschiedenen Argumenten aufzurufen.
```
```
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
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 Skalierung (Vergrößerung)
- die Skalierung (Vergrößerung)
- die Verschiebung des Nullpunkts
- die Verschiebung des Nullpunkts
Ändern Sie die Funktion `funcprint`, so dass alle diese Werte als Argumente übergeben werden können. Testen Sie die Funktion dann mit der Funktion `math.log` als Argument. Dafür müssen Sie den Anfangswert so ändern, dass 0 nicht enthalten ist (da der Logarithmus von 0 nicht definiert ist).
Ändern Sie die Funktion `funcprint`, so dass alle diese Werte als Argumente übergeben werden können. Testen Sie die Funktion dann mit der Funktion `math.log` als Argument. Dafür müssen Sie den Anfangswert so ändern, dass 0 nicht enthalten ist (da der Logarithmus von 0 nicht definiert ist).
%% Cell type:code id: tags:
%% Cell type:code id: tags:
```
```
def funcprint_advanced():
def funcprint_advanced():
'''Implementieren Sie hier ihre Funktion. Dieses Kommentar können Sie löschen.
'''Implementieren Sie hier ihre Funktion. Dieses Kommentar können Sie löschen.
Das/Die Argument/e müssen Sie sich dieses Mal selbst überlegen.
Das/Die Argument/e müssen Sie sich dieses Mal selbst überlegen.
'''
'''
```
```
%% Cell type:code id: tags:
%% Cell type:code id: tags:
```
```
# Bitte nutzen Sie diese Zelle, um Ihre Funktion zweimal mit verschiedenen Argumenten aufzurufen.
# Bitte nutzen Sie diese Zelle, um Ihre Funktion zweimal mit verschiedenen Argumenten aufzurufen.