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 (148)
Showing
with 13742 additions and 7337 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.
...@@ -52,18 +51,18 @@ Urheber nennen und sie nicht für kommerzielle Zwecke nutzen. ...@@ -52,18 +51,18 @@ Urheber nennen und sie nicht für kommerzielle Zwecke nutzen.
erhalten. Wenn niemand helfen kann, helfen wir Ihnen. erhalten. Wenn niemand helfen kann, helfen wir Ihnen.
*** Windows *** Windows
- [[https://www.anaconda.com/distribution/]] - [[https://www.anaconda.com/download]]
- [[http://technivore.org/posts/2016/02/27/windows-jupyter-three-ways.html]] - [[https://technivore.org/2016/02/27/python-jupyter-windows/]]
*** Linux *** Linux
- Je nach Distribution das passende Paket installieren, z.B. in Debian mittels ~apt-get install python3-notebook~. - 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. - 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 Python-Version 3.6 ist hier zu finden: [[https://www.anaconda.com/download/#linux]] - Die aktuelle Anaconda-Distribution ist hier zu finden: [[https://www.anaconda.com/download/#linux]]
- Die Python-Version 3.5 hier: [[https://docs.anaconda.com/anaconda/faq#how-do-i-get-anaconda-with-python-3-5]] - Ä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]] - [[https://docs.anaconda.com/anaconda/install/linux][Hilfestellungen zur Installation von Conda]]
*** Mac *** Mac
- Ananconda für Mac, wählen Sie Python 3.6 aus: [[https://www.anaconda.com/download/#macos]] - 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]] - Mac OS X Installations-Hilfe: [[https://docs.anaconda.com/anaconda/install/mac-os#macos-graphical-install]]
** Hinweise zu GitLab ** Hinweise zu GitLab
......
img/by-nc-sa.png

21.9 KiB

%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<h1><center> Allgemein </center></h1> <h1><center> Allgemein </center></h1>
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
- Bitte tragt euch in **beide Moodle Kurse** ein. Ankündigungen werden dort veröffentlicht! Wer sich nicht anmeldet und nicht regelmäßig ins Forum schaut, hat Pech gehabt. - Bitte tragt euch in **beide Moodle Kurse** ein. Ankündigungen werden dort veröffentlicht! Wer sich nicht anmeldet und nicht regelmäßig ins Forum schaut, hat Pech gehabt.
- Man kann einstellen, dass man Emails bei neuen Forumbeiträgen bekommt, um keine Neuigkeiten zu verpassen. - Man kann einstellen, dass man Emails bei neuen Forumbeiträgen bekommt, um keine Neuigkeiten zu verpassen.
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
- **Pair-Programming** bitte einhalten: **"nicht gleichzeitig"** programmieren, sondern **abwechselnd aktiv** sein. Das ist für alle Beteiligten ein Vorteil! - **Pair-Programming** bitte einhalten: **"nicht gleichzeitig"** programmieren, sondern **abwechselnd aktiv** sein. Das ist für alle Beteiligten ein Vorteil!
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
- **Latex**: Tutorium oder Übung. Im Seminar benutzen wir nur Jupyter-Notebooks - **Latex**: Tutorium oder Übung. Im Seminar benutzen wir nur Jupyter-Notebooks
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
- **WICHTIG** bei Ankündigungen am Ende der Stunde: Bitte Jupyter Notebooks durcharbeiten oder versuchen. Ich verstehe, dass man nicht immer alle Übungen alleine schafft, aber zumindest die Theorie kann man mit seinem Partner durcharbeiten. - **WICHTIG** bei Ankündigungen am Ende der Stunde: Bitte Jupyter Notebooks durcharbeiten oder versuchen. Ich verstehe, dass man nicht immer alle Übungen alleine schafft, aber zumindest die Theorie kann man mit seinem Partner durcharbeiten.
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
- **HILFE** bei Aufgaben: - **HILFE** bei Aufgaben:
- Email - Email
- Tutorium - Tutorium
- vorbeikommen (Raum 12) - vorbeikommen (Raum 111)
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
- Alternativer Python-Kurs für Interessierte: https://automatetheboringstuff.com/ - Alternativer Python-Kurs für Interessierte: https://automatetheboringstuff.com/
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Python Tutor ## Python Tutor
Eine gute Hilfe ist die Webseite: http://www.pythontutor.com. Eine gute Hilfe ist die Webseite: http://www.pythontutor.com.
Dort könnt ihr euren Python Code hochladen und Schritt für Schritt durchführen. Dort könnt ihr euren Python Code hochladen und Schritt für Schritt durchführen.
Probiert es aus *(Achtung: Sie müssen die Funktion auch dort aufrufen)*. Probiert es aus *(Achtung: Sie müssen die Funktion auch dort aufrufen)*.
- Kurze Anleitung: - Kurze Anleitung:
- Nehmt einen Browser eurer Wahl und ruft http://www.pythontutor.com auf. - Nehmt einen Browser eurer Wahl und ruft http://www.pythontutor.com auf.
- Klickt auf *Visualize your code and get live help now* - Klickt auf *Visualize your code and get live help now*
- Copy-Paste euren Code in das Textfenster - Copy-Paste euren Code in das Textfenster
- Drückt auf Visualize Execution (jetzt solltet ihr auf eine neue Seite gelangt sein) - Drückt auf Visualize Execution (jetzt solltet ihr auf eine neue Seite gelangt sein)
- Mit den Buttons (First,Back,Forward,Last) könnt ihr jetzt jeden Schritt nachvollziehen, den python macht, wenn ihr den Code im Jupyter-Notebook aufruft. - Mit den Buttons (First,Back,Forward,Last) könnt ihr jetzt jeden Schritt nachvollziehen, den python macht, wenn ihr den Code im Jupyter-Notebook aufruft.
- Der Vorteil ist natürlich, dass ihr nun Schritt für Schritt nachvollziehen könnt, was euer Code macht. - Der Vorteil ist natürlich, dass ihr nun Schritt für Schritt nachvollziehen könnt, was euer Code macht.
- Es gibt eine print box, wo alles ausgegeben wird, was durch print() auf eurem Display auch ausgegeben werden würde - Es gibt eine print box, wo alles ausgegeben wird, was durch print() auf eurem Display auch ausgegeben werden würde
- Darunter werden Variablen, Funktionen und Methoden angezeigt. - Darunter werden Variablen, Funktionen und Methoden angezeigt.
Besonders hilfreich beim Thema **REKURSION**. Besonders hilfreich beim Thema **REKURSION**.
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<h1><center> Zu den Jupyter-Notebooks </center></h1> <h1><center> Zu den Jupyter-Notebooks </center></h1>
### was mir an python gefällt: ### was mir an python gefällt:
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
- Im Exkurs **"was mir an python gefällt"** muss der Code nicht geändert werden. Es reicht, den Code auszuführen mit **"Strg+Enter"** und das Ergebnis zu verstehen. Schaut euch den Code an und versucht zu verstehen, was gemacht wird. Einige Anweisungen kennt ihr bereits, andere widerum sind neu. - Im Exkurs **"was mir an python gefällt"** muss der Code nicht geändert werden. Es reicht, den Code auszuführen mit **"Strg+Enter"** und das Ergebnis zu verstehen. Schaut euch den Code an und versucht zu verstehen, was gemacht wird. Einige Anweisungen kennt ihr bereits, andere widerum sind neu.
- Dieser Exkurs soll zeigen, zu was python alles fähig ist und für was ihr Python in Zukunft benutzen könnt :) - Dieser Exkurs soll zeigen, zu was python alles fähig ist und für was ihr Python in Zukunft benutzen könnt :)
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
### Jupyter-Notebooks - Tipps ### Jupyter-Notebooks - Tipps
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
- **Markdownblöcke** (das sind normalerweise die Textblöcke) kann man mit **"Strg + enter"** wieder in den Lesemodus bringen - **Markdownblöcke** (das sind normalerweise die Textblöcke) kann man mit **"Strg + enter"** wieder in den Lesemodus bringen
- **Codeblöcke** (das sind normalerweise die Blöcke, indem der Pythoncode steht) kann man mit **"Strg + enter"** ausführen - **Codeblöcke** (das sind normalerweise die Blöcke, indem der Pythoncode steht) kann man mit **"Strg + enter"** ausführen
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
- **Download**: Linksklick auf das Notebook (z.B. seminar03.ipynb) -> Rechtsklick auf Feld "Open Raw" -> Ziel speichern unter - **Download**: Linksklick auf das Notebook (z.B. seminar03.ipynb) -> Rechtsklick auf Feld "Open Raw" -> Ziel speichern unter
- Download von Notebooks mit Firefox! - Download von Notebooks mit Firefox!
- Öffnen von Jupyter-Notebook geht auch mit Internet-Explorer - Öffnen von Jupyter-Notebook geht auch mit Internet-Explorer
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
- Falls ihr einen Codeblock ausführt und **ein Stern erscheint: "In [ * ]" **, bedeutet das, dass der Code gerade ausgeführt wird. - Falls ihr einen Codeblock ausführt und **ein Stern erscheint: "In [ * ]" **, bedeutet das, dass der Code gerade ausgeführt wird.
- Manchmal bleibt das Notebook aber auch einfach hängen, dann benutzt folgende Möglichkeit: **Menüleiste-> Kernel-> restart and clear output**. Damit wird das Notebook komplett neu geladen, allerdings müsst ihr die vorherigen Codeblöcke auch neu ausführen. - Manchmal bleibt das Notebook aber auch einfach hängen, dann benutzt folgende Möglichkeit: **Menüleiste-> Kernel-> restart and clear output**. Damit wird das Notebook komplett neu geladen, allerdings müsst ihr die vorherigen Codeblöcke auch neu ausführen.
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
- Einrücken durch die **"Tabulatortaste" (tab)**, um die richtige Formatierung einfach zu bekommen (bei Definitionen von Funktionen, for- oder while-Schleifen, if-Bedingungen, etc.) - Einrücken durch die **"Tabulatortaste" (tab)**, um die richtige Formatierung einfach zu bekommen (bei Definitionen von Funktionen, for- oder while-Schleifen, if-Bedingungen, etc.)
- Falsches Einrücken ergibt häufig den Fehler: **IndentationError** - Falsches Einrücken ergibt häufig den Fehler: **IndentationError**
- Beispiel: - Beispiel:
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ```
def example(): def example():
i=0 i=0
while i <= 5: while i <= 5:
if i<1: if i<1:
print("Mit der tab-Taste kann man immer 'eins weiter' einrücken.") print("Mit der tab-Taste kann man immer 'eins weiter' einrücken.")
elif i==5: elif i==5:
print("Mit 'tab' und 'shift' gleichzeitig rückt man 'eins' wieder nach hinten.") print("Mit 'tab' und 'shift' gleichzeitig rückt man 'eins' wieder nach hinten.")
i=i+1 i=i+1
example() example()
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
### Browser-Einstellungen für Jupyter-Notebook ### Browser-Einstellungen für Jupyter-Notebook
Jupyter-Notebook wird immer in dem Browser geöffnet, der auf dem Computer als Standardbrowser festgelegt ist. Jupyter-Notebook wird immer in dem Browser geöffnet, der auf dem Computer als Standardbrowser festgelegt ist.
Im PC-Pool ist das zur Zeit der Internet-Explorer und wir können das leider nicht ändern. Im PC-Pool ist das zur Zeit der Internet-Explorer und wir können das leider nicht ändern.
Dadurch funktionieren manche Shortcuts leider nicht. Dadurch funktionieren manche Shortcuts leider nicht.
Auf euren PC's zu Hause könnt ihr es aber einfach ändern: Auf euren PC's zu Hause könnt ihr es aber einfach ändern:
(Wir empfehlen Firefox als Standardbrowser) (Wir empfehlen Firefox als Standardbrowser)
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“.
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<h1><center> Beispielcode</center></h1> <h1><center> Beispielcode</center></h1>
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
### Kommentare ### Kommentare
- Kommentare in Codeblöcken kann man mit Hilfe von # schreiben - Kommentare in Codeblöcken kann man mit Hilfe von # schreiben
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ```
# We are inside a Code block. # We are inside a Code block.
# But with the help of # we can still write whatever we want to document our code. This is really helpful. # But with the help of # we can still write whatever we want to document our code. This is really helpful.
# Shortcut: Str+/ (comment and uncomment) # Shortcut: Str+/ (comment and uncomment)
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
- Zusätzlich gibt es Docstrings (kurz für Documentation strings). Die Syntax sind drei Gänsefüßchen am Anfang und am Ende der Zeichenkette. Damit könnt ihr eure Funktionen und Methoden gut beschreiben, Zeilenumbrüche funktionieren. - Zusätzlich gibt es Docstrings (kurz für Documentation strings). Die Syntax sind drei Gänsefüßchen am Anfang und am Ende der Zeichenkette. Damit könnt ihr eure Funktionen und Methoden gut beschreiben, Zeilenumbrüche funktionieren.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ```
def function(): def function():
""" """
Do nothing, but document it. Do nothing, but document it.
No, really, it doesn't do anything. No, really, it doesn't do anything.
""" """
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Zahlen - float ## Zahlen - float
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
- Gleitkommazahlen (floats) immer mit **Punkt** statt **Komma* angeben -> 29.99 statt 29,99 - Gleitkommazahlen (floats) immer mit **Punkt** statt **Komma* angeben -> 29.99 statt 29,99
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ```
#Gleitkommazahl durch Punkt getrennt -> RICHTIG #Gleitkommazahl durch Punkt getrennt -> RICHTIG
preis=29.99 preis=29.99
print(preis) print(preis)
print(type(preis)) print(type(preis))
# python erkennt die Zahl und gibt die Zahl wieder. # python erkennt die Zahl und gibt die Zahl wieder.
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ```
# Gleitkommazahl durch Komma getrennt -> FALSCH # Gleitkommazahl durch Komma getrennt -> FALSCH
preis=29,99 preis=29,99
print(preis) print(preis)
type(preis) type(preis)
# Python erkennt zwei Zahlen, die es in einem Tupel speichert. # Python erkennt zwei Zahlen, die es in einem Tupel speichert.
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
### Print - Funktion ### Print - Funktion
- Die Print-Funktion "print()" kann mehrere Argumente entgegennehmen. Das können ganz verschiedene Datentypen sein. Die verschiedenen Argumente müssen jeweils durch Kommata getrennt werden. - Die Print-Funktion "print()" kann mehrere Argumente entgegennehmen. Das können ganz verschiedene Datentypen sein. Die verschiedenen Argumente müssen jeweils durch Kommata getrennt werden.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ```
# Beispiele: # Beispiele:
# Der print-Befehl ist eine überaus nützliche Funktion in python. # Der print-Befehl ist eine überaus nützliche Funktion in python.
# Wir können uns damit an jeder Stelle unseres Codes Zwischenergebnisse, # Wir können uns damit an jeder Stelle unseres Codes Zwischenergebnisse,
# Ergebnisse, Variablen, etc. ausgeben lassen. # Ergebnisse, Variablen, etc. ausgeben lassen.
#Zeichenketten: #Zeichenketten:
print("\n \n Jetzt kommen wir zu den Zeichenketten \n") print("\n \n Jetzt kommen wir zu den Zeichenketten \n")
print("Hallo! Schön, dass du es hierher geschafft hast :)") print("Hallo! Schön, dass du es hierher geschafft hast :)")
#Zahlen: #Zahlen:
print("\n \n Jetzt kommen wir zu den Zahlen \n") print("\n \n Jetzt kommen wir zu den Zahlen \n")
print(10) print(10)
print(10,20,30) print(10,20,30)
#Variablen: #Variablen:
print("\n \n Jetzt kommen wir zu den Variablen \n") print("\n \n Jetzt kommen wir zu den Variablen \n")
a=10 a=10
print(a) print(a)
#Verkapselungen: #Verkapselungen:
print("\n \n Jetzt kommen wir zu den Verkapselungen \n") print("\n \n Jetzt kommen wir zu den Verkapselungen \n")
print("Die Lösung lautet:", 100, "Hier kann noch mehr Text stehen") print("Die Lösung lautet:", 100, "Hier kann noch mehr Text stehen")
print("Zeichenketten kann man auch mit dem + Operator verbinden:"+" Das kann man hier sehen.") print("Zeichenketten kann man auch mit dem + Operator verbinden:"+" Das kann man hier sehen.")
print("Zahlen dagegen werden dadurch addiert und die Summe wird ausgegeben: ", 5+4) print("Zahlen dagegen werden dadurch addiert und die Summe wird ausgegeben: ", 5+4)
a=10 a=10
b=20 b=20
c="Hier könnte alles stehen." c="Hier könnte alles stehen."
print("Wir können auch Variablen dazunehmen:",a,b,c) print("Wir können auch Variablen dazunehmen:",a,b,c)
# Jetzt kommen komplizierte Beispiele: # Jetzt kommen komplizierte Beispiele:
print("\n \n Jetzt kommen wir zu komplizierte Beispiele \n") print("\n \n Jetzt kommen wir zu komplizierte Beispiele \n")
print("Durch verschiedene Zeichen kann man den Output der Print-Funktion 'verschönern'. \n") print("Durch verschiedene Zeichen kann man den Output der Print-Funktion 'verschönern'. \n")
print('"\\n" : erzeugt einen Zeilenabsatz \n' ) print('"\\n" : erzeugt einen Zeilenabsatz \n' )
print("Beispiel: \n", "Hello \n , \n World \n ! ") print("Beispiel: \n", "Hello \n , \n World \n ! ")
print('"\\t" : rückt den anschließenden Abstand um einen festen Abstand vor \n' ) print('"\\t" : rückt den anschließenden Abstand um einen festen Abstand vor \n' )
print("Beispiel: \t", "Hello \t , \t World \t ! ") print("Beispiel: \t", "Hello \t , \t World \t ! ")
print("\n") print("\n")
print('Bis jetzt konnten wir diese Anweisung in einer Zeichenkette ausühren.Man kann der print Funktion auch einen zusätzlichen Befehl übergeben: "sep=\\n" oder "sep=\\t"') print('Bis jetzt konnten wir diese Anweisung in einer Zeichenkette ausühren.Man kann der print Funktion auch einen zusätzlichen Befehl übergeben: "sep=\\n" oder "sep=\\t"')
print("Dieser Befehl definiert den Abstand zwischen verschiedenen Anweisungen innerhalb der print-Funktion") print("Dieser Befehl definiert den Abstand zwischen verschiedenen Anweisungen innerhalb der print-Funktion")
print("BeispieL: ","Jetzt", "werden", "wir", "zwischen", "jeder", "Anweisung", "einen", "Abstand", "definieren", sep="\t") print("BeispieL: ","Jetzt", "werden", "wir", "zwischen", "jeder", "Anweisung", "einen", "Abstand", "definieren", sep="\t")
print("BeispieL: ","Jetzt", "werden", "wir", "zwischen", "jeder", "Anweisung", "einen", "Abstand", "definieren", sep="\n") print("BeispieL: ","Jetzt", "werden", "wir", "zwischen", "jeder", "Anweisung", "einen", "Abstand", "definieren", sep="\n")
#Macht euch den Unterschied zwischen \t und \n innerhalb einer Zeichenkette und sep="\n" bzw. sep="\t" klar. #Macht euch den Unterschied zwischen \t und \n innerhalb einer Zeichenkette und sep="\n" bzw. sep="\t" klar.
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
### Code Beispiele ### Code Beispiele
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ```
40/1.61 40/1.61
#Hier rechnen wir 40km in Meilen um. Das Ergebnis, welches Python ausgibt, bitte nicht für weitere Rechnungen verwenden. #Hier rechnen wir 40km in Meilen um. Das Ergebnis, welches Python ausgibt, bitte nicht für weitere Rechnungen verwenden.
# Stattdessen können wir einfach den Term in Klammern benutzen (40/1.61) oder die Rechnung in einer Variable speichern (z.B. Meilen= 40/1.61) # Stattdessen können wir einfach den Term in Klammern benutzen (40/1.61) oder die Rechnung in einer Variable speichern (z.B. Meilen= 40/1.61)
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ```
#example #example
#Ein Mann hat eine 40km Fahrradtour in 2h absolivert. #Ein Mann hat eine 40km Fahrradtour in 2h absolivert.
#1. Wieviele Sekunden pro Meter ist er im Durchschnitt gefahren? #1. Wieviele Sekunden pro Meter ist er im Durchschnitt gefahren?
#2. Mit wieviel Meter pro Minute war er im Durchschnitt unterwegs? #2. Mit wieviel Meter pro Minute war er im Durchschnitt unterwegs?
#3. Mit wieviel Meilen pro Stunde war er im Durchschnitt unterwegs? #3. Mit wieviel Meilen pro Stunde war er im Durchschnitt unterwegs?
#solution: #solution:
#Zeit in verschiedenen Einheiten #Zeit in verschiedenen Einheiten
Stunden=2 Stunden=2
Minuten=Stunde*60 Minuten=Stunde*60
Sekunden=Minute*60 Sekunden=Minute*60
#Strecken in verschiedenen Einheiten #Strecken in verschiedenen Einheiten
Kilometer=10 Kilometer=10
Meter=40*1000 Meter=40*1000
Meilen=40/1.61 Meilen=40/1.61
print("In einer print()-Funktion kann man","mehrere Zeichenketten und Variablen", " durch Kommata trennen und zusammen ausgeben") print("In einer print()-Funktion kann man","mehrere Zeichenketten und Variablen", " durch Kommata trennen und zusammen ausgeben")
print("Sekunden pro Meter :", Sekunden/Meter) print("Sekunden pro Meter :", Sekunden/Meter)
print("Meter pro Mintue :", Meter/Minuten) print("Meter pro Mintue :", Meter/Minuten)
print("Meilen pro Stunde :", Meilen/Stunden, "Perfekt") print("Meilen pro Stunde :", Meilen/Stunden, "Perfekt")
print("Meilen pro Stunde :", (40/1.61)/Stunden, "Okay") print("Meilen pro Stunde :", (40/1.61)/Stunden, "Okay")
print("Meilen pro Stunde :", 24.844720496894407/Stunden, "Bitte nicht gerundete Zahlen übernehmen") print("Meilen pro Stunde :", 24.844720496894407/Stunden, "Bitte nicht gerundete Zahlen übernehmen")
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ```
print("Division von integers \n") print("Division von integers \n")
#Teilen von Ganzzahlen (integers oder int) mit "/" (gibt den genauen Wert zurück, typ=float) #Teilen von Ganzzahlen (integers oder int) mit "/" (gibt den genauen Wert zurück, typ=float)
print("Hier dividieren wir mit Hilfe von /: ",2/60,3/2,8/3, sep='\t') print("Hier dividieren wir mit Hilfe von /: ",2/60,3/2,8/3, sep='\t')
#Teilen von Ganzzahlen (integers oder int) mit "//" (gibt den abgerundeten Wert wieder, typ=int) #Teilen von Ganzzahlen (integers oder int) mit "//" (gibt den abgerundeten Wert wieder, typ=int)
print("Hier dividieren wir mit Hilfe von //: ",2//60,3//2,8//3, sep='\t') print("Hier dividieren wir mit Hilfe von //: ",2//60,3//2,8//3, sep='\t')
print("\n Division von float und integers \n") print("\n Division von float und integers \n")
#Teilen von Float und Ganzzahlen (integers oder int) mit "/" (gibt den genauen Wert zurück, typ=float) #Teilen von Float und Ganzzahlen (integers oder int) mit "/" (gibt den genauen Wert zurück, typ=float)
print("Hier dividieren wir mit Hilfe von /: ",2/60.0,3.0/2,8.4/3,sep='\t') print("Hier dividieren wir mit Hilfe von /: ",2/60.0,3.0/2,8.4/3,sep='\t')
#Teilen von Float und Ganzzahlen (integers oder int) mit "//" (gibt den abgerundeten Wert wieder, typ=float) #Teilen von Float und Ganzzahlen (integers oder int) mit "//" (gibt den abgerundeten Wert wieder, typ=float)
print("Hier dividieren wir mit Hilfe von //: ",2//60.0,3.0//2,8.4//3,sep='\t') print("Hier dividieren wir mit Hilfe von //: ",2//60.0,3.0//2,8.4//3,sep='\t')
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Importieren von Modulen und Bibliotheken ## Importieren von Modulen und Bibliotheken
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
- Stellen Datentypen oder Funktionen für alle Python-Programme bereit - Stellen Datentypen oder Funktionen für alle Python-Programme bereit
- Syntax: `import module` - Syntax: `import module`
- Konvention: Steht **immer am Anfang des Codes** - Konvention: Steht **immer am Anfang des Codes**
- Beispiel: - Beispiel:
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ```
import math import math
import turtle import turtle
import csv import csv
#hier steht Code #hier steht Code
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Funktionen ## Funktionen
Funktion funktionieren in Python wie mathematische Funktionen aus der Schule: Funktion funktionieren in Python wie mathematische Funktionen aus der Schule:
Stellt euch die Funktion f(x,y)=x*y vor. In Python definieren wir sie wie folgt: Stellt euch die Funktion f(x,y)=x*y vor. In Python definieren wir sie wie folgt:
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ```
def f(x,y): def f(x,y):
return x*y return x*y
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
Jetzt haben wir die Funktion zwar definiert, aber sie gibt noch kein Ergebnis zurück. Das passiert nur, wenn wir die Funktion aufrufen. Jetzt haben wir die Funktion zwar definiert, aber sie gibt noch kein Ergebnis zurück. Das passiert nur, wenn wir die Funktion aufrufen.
Um die Funktion aufzurufen, müssen wir die Parameter x und y explizit angeben, z.B. x=5 und y=3. Um die Funktion aufzurufen, müssen wir die Parameter x und y explizit angeben, z.B. x=5 und y=3.
In der Schule haben wir früher Folgendes geschrieben: f(5,3)=5*3=15. In der Schule haben wir früher Folgendes geschrieben: f(5,3)=5*3=15.
In Python machen wir nichts anderes, nur das Berechnen überlassen wir python: In Python machen wir nichts anderes, nur das Berechnen überlassen wir python:
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ```
def f(x,y): def f(x,y):
return x*y return x*y
print("Wenn eine Funktion einen return-Rückgabewert hat, muss man die Funktion durch print() aufrufen, um das Ergebnis angezeigt zu bekommen. \n") print("Wenn eine Funktion einen return-Rückgabewert hat, muss man die Funktion durch print() aufrufen, um das Ergebnis angezeigt zu bekommen. \n")
f(5,3) f(5,3)
print("Wie man sieht, wird nichts auf das Display ausgegeben. Also verschachteln wir unser Funktionsaufruf f(5,3) in einen print()-Aufruf. \n") print("Wie man sieht, wird nichts auf das Display ausgegeben. Also verschachteln wir unser Funktionsaufruf f(5,3) in einen print()-Aufruf. \n")
print("Es gibt verschiedene Wege:") print("Es gibt verschiedene Wege:")
print(f(5,3)) print(f(5,3))
print("\nAlternative 1:") print("\nAlternative 1:")
print(f(x=5,y=3)) print(f(x=5,y=3))
print("\nAlternative 2:") print("\nAlternative 2:")
variable_x=5 variable_x=5
variable_y=3 variable_y=3
print(f(variable_x, variable_y)) print(f(variable_x, variable_y))
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ```
def beispiel(x): def beispiel(x):
print(x) print(x)
print("Falls die Funktion kein return hat, sondern nur print-Anweisungen, dann reicht es, die Funktion aufzufen.") print("Falls die Funktion kein return hat, sondern nur print-Anweisungen, dann reicht es, die Funktion aufzufen.")
print("print() innerhalb der Funktion gibt x aus. \n") print("print() innerhalb der Funktion gibt x aus. \n")
beispiel("Das ist ein Funktionsaufruf und diese Zeichenkette ist unser Parameter x") beispiel("Das ist ein Funktionsaufruf und diese Zeichenkette ist unser Parameter x")
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
**Fazit**: Um eine Funktion aufzurufen und ein Ergebnis herauszubekommen, reicht es nicht, die Funktion zu definieren. Sie muss anschließend **aufgerufen** werden. Die **Parameter müssen explizit** angegeben werden. **Fazit**: Um eine Funktion aufzurufen und ein Ergebnis herauszubekommen, reicht es nicht, die Funktion zu definieren. Sie muss anschließend **aufgerufen** werden. Die **Parameter müssen explizit** angegeben werden.
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Turtle Modul ## Turtle Modul
- Dokumentation mit allen turtle-Methoden: https://docs.python.org/3/library/turtle.html - Dokumentation mit allen turtle-Methoden: https://docs.python.org/3/library/turtle.html
- Im Idealfall sollte in jedem Codeblock die folgenden Anweisungen stehen: - Im Idealfall sollte in jedem Codeblock die folgenden Anweisungen stehen:
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ```
#Zuerst wird das Modul turtle importiert #Zuerst wird das Modul turtle importiert
import turtle import turtle
#hier steht euer Code #hier steht euer Code
# Um ein Arbeiten mit turtle und Jupyter-Notebook zu ermöglichen, müssen wir diese beiden Befehle am Ende des Blocks schreiben # Um ein Arbeiten mit turtle und Jupyter-Notebook zu ermöglichen, müssen wir diese beiden Befehle am Ende des Blocks schreiben
turtle.mainloop() turtle.mainloop()
turtle.bye() turtle.bye()
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ```
#Zuerst wird das Modul turtle importiert #Zuerst wird das Modul turtle importiert
import turtle import turtle
#Hier lernen wir die Funktionen up(), down() und fd() kennen #Hier lernen wir die Funktionen up(), down() und fd() kennen
otto=turtle.Turtle() otto=turtle.Turtle()
def line(t): def line(t):
t.fd(50) t.fd(50)
t.up() t.up()
t.fd(50) t.fd(50)
t.down() t.down()
t.fd(50) t.fd(50)
t.fd(50) t.fd(50)
t.up() t.up()
t.fd(50) t.fd(50)
t.fd(50) t.fd(50)
t.down() t.down()
t.fd(50) t.fd(50)
# Um ein Arbeiten mit turtle und Jupyter-Notebook zu ermöglichen, müssen wir diese beiden Befehle am Ende des Blocks schreiben # Um ein Arbeiten mit turtle und Jupyter-Notebook zu ermöglichen, müssen wir diese beiden Befehle am Ende des Blocks schreiben
line(otto) line(otto)
turtle.mainloop() turtle.mainloop()
turtle.bye() turtle.bye()
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
Kommentare -> commit -> nicht zu bdeuten Kommentare -> commit -> nicht zu bdeuten
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ```
import turtle import turtle
otto=turtle.Turtle() # definiert ein turtle-Objekt, wird der Variablen otto zugewiesen otto=turtle.Turtle() # definiert ein turtle-Objekt, wird der Variablen otto zugewiesen
anna=turtle.Turtle() # definiert ein turtle-Objekt, wird der Variablen anna zugewiesen anna=turtle.Turtle() # definiert ein turtle-Objekt, wird der Variablen anna zugewiesen
telmo=turtle.Turtle() # definiert ein turtle-Objekt, wird der Variablen telmo zugewiesen telmo=turtle.Turtle() # definiert ein turtle-Objekt, wird der Variablen telmo zugewiesen
#Hier lernen wir die Funktionen shape(), color(), fd() und lt() kennen #Hier lernen wir die Funktionen shape(), color(), fd() und lt() kennen
def square(t): def square(t):
t.shape('turtle') #wir geben der turtle t die Form einer Schildkröte t.shape('turtle') #wir geben der turtle t die Form einer Schildkröte
t.color("purple","red") #wir färben den zurückgelegten Weg lila (erstes Argument), die Schildkröte rot (zweites Argument) t.color("purple","red") #wir färben den zurückgelegten Weg lila (erstes Argument), die Schildkröte rot (zweites Argument)
for k in range(4): #schleife (4 Aufrufe): unsere turtle läuft in jedem Aufruf zuerst gerade aus und wendet sich dann um 90° nach links. for k in range(4): #schleife (4 Aufrufe): unsere turtle läuft in jedem Aufruf zuerst gerade aus und wendet sich dann um 90° nach links.
t.fd(100) t.fd(100)
t.lt(90) t.lt(90)
square(otto) #wir rufen square mit der turtle namens otto auf. Wir könnten aber genauso anna oder telmo nehmen square(otto) #wir rufen square mit der turtle namens otto auf. Wir könnten aber genauso anna oder telmo nehmen
turtle.mainloop() turtle.mainloop()
turtle.bye() turtle.bye()
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ```
import turtle import turtle
otto=turtle.Turtle() # definiert ein turtle-Objekt, wird der Variablen otto zugewiesen otto=turtle.Turtle() # definiert ein turtle-Objekt, wird der Variablen otto zugewiesen
anna=turtle.Turtle() # definiert ein turtle-Objekt, wird der Variablen anna zugewiesen anna=turtle.Turtle() # definiert ein turtle-Objekt, wird der Variablen anna zugewiesen
telmo=turtle.Turtle() # definiert ein turtle-Objekt, wird der Variablen telmo zugewiesen telmo=turtle.Turtle() # definiert ein turtle-Objekt, wird der Variablen telmo zugewiesen
#Hier lernen wir die Funktionen color(),begin_fill(), end_fill(), fd() und lt() kennen #Hier lernen wir die Funktionen color(),begin_fill(), end_fill(), fd() und lt() kennen
def square(t): def square(t):
t.color("purple") #Falls nur ein Argument in color()--> Schildkröte und Weg haben dieselbe Farbe. Wir färben die Schildkröte und die Fläche, die wir einfärben wollen, lila t.color("purple") #Falls nur ein Argument in color()--> Schildkröte und Weg haben dieselbe Farbe. Wir färben die Schildkröte und die Fläche, die wir einfärben wollen, lila
t.begin_fill() # wir beginnen die Fläche, die unsere turtle läuft, zu färben t.begin_fill() # wir beginnen die Fläche, die unsere turtle läuft, zu färben
for k in range(4): #schleife (4 Aufrufe): unsere turtle läuft in jedem Aufruf zuerst gerade aus und wendet sich dann um 90° nach links. for k in range(4): #schleife (4 Aufrufe): unsere turtle läuft in jedem Aufruf zuerst gerade aus und wendet sich dann um 90° nach links.
t.fd(100) t.fd(100)
t.lt(90) t.lt(90)
t.end_fill() # wir beenden das Einfärben der Fläche t.end_fill() # wir beenden das Einfärben der Fläche
square(anna) #wir rufen square mit der turtle namens anna auf. Wir könnten aber genauso otto oder telmo nehmen square(anna) #wir rufen square mit der turtle namens anna auf. Wir könnten aber genauso otto oder telmo nehmen
turtle.mainloop() turtle.mainloop()
turtle.bye() turtle.bye()
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ```
# Diese Funktion können wir nutzen, um unsere Schildkröte mit zufälligen Farben zu färben. # Diese Funktion können wir nutzen, um unsere Schildkröte mit zufälligen Farben zu färben.
# Wir können die Funktion nutzen, indem wir sie in unseren Codeblock einfügen und dann an passender Stelle aufrufen. # Wir können die Funktion nutzen, indem wir sie in unseren Codeblock einfügen und dann an passender Stelle aufrufen.
# Im nächsten Codeblock ist ein Beispiel gegeben. # Im nächsten Codeblock ist ein Beispiel gegeben.
# Varianten: setcolor(t,1) : Schildkröte und Zeichnung in derselben zufälligen Farbe # Varianten: setcolor(t,1) : Schildkröte und Zeichnung in derselben zufälligen Farbe
# Varianten: setcolor(t,2) : Schildkröte und Zeichnung in zwei unterschiedlichen zufälligen Farben # Varianten: setcolor(t,2) : Schildkröte und Zeichnung in zwei unterschiedlichen zufälligen Farben
from random import randint from random import randint
def setcolor(t,n): def setcolor(t,n):
turtle.colormode(255) # um RGB-Farben anzuwenden, muss man vorher diesen Colormode aktivieren turtle.colormode(255) # um RGB-Farben anzuwenden, muss man vorher diesen Colormode aktivieren
if n==1: if n==1:
t.color(randint(0,255),randint(0,255),randint(0,255)) #generiert eine zufällige Farbe für die turtle t.color(randint(0,255),randint(0,255),randint(0,255)) #generiert eine zufällige Farbe für die turtle
if n==2: if n==2:
t.color((randint(0,255),randint(0,255),randint(0,255)),(randint(0,255),randint(0,255),randint(0,255))) #generiert eine zufällige Farbe für die turtle t.color((randint(0,255),randint(0,255),randint(0,255)),(randint(0,255),randint(0,255),randint(0,255))) #generiert eine zufällige Farbe für die turtle
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ```
import turtle import turtle
from random import randint from random import randint
otto=turtle.Turtle() # definiert ein turtle-Objekt, wird der Variablen otto zugewiesen otto=turtle.Turtle() # definiert ein turtle-Objekt, wird der Variablen otto zugewiesen
anna=turtle.Turtle() # definiert ein turtle-Objekt, wird der Variablen anna zugewiesen anna=turtle.Turtle() # definiert ein turtle-Objekt, wird der Variablen anna zugewiesen
telmo=turtle.Turtle() # definiert ein turtle-Objekt, wird der Variablen telmo zugewiesen telmo=turtle.Turtle() # definiert ein turtle-Objekt, wird der Variablen telmo zugewiesen
#Hier lernen wir die Funktionen shape(), stamp(), color(), colormode() und fd() kennen #Hier lernen wir die Funktionen shape(), stamp(), color(), colormode() und fd() kennen
# Fkt setcolor wurde hier eingefügt # Fkt setcolor wurde hier eingefügt
def setcolor(t,n): def setcolor(t,n):
turtle.colormode(255) # um RGB-Farben anzuwenden, muss man vorher diesen Colormode aktivieren turtle.colormode(255) # um RGB-Farben anzuwenden, muss man vorher diesen Colormode aktivieren
if n==1: if n==1:
t.color(randint(0,255),randint(0,255),randint(0,255)) #generiert eine zufällige Farbe für die turtle t.color(randint(0,255),randint(0,255),randint(0,255)) #generiert eine zufällige Farbe für die turtle
if n==2: if n==2:
t.color((randint(0,255),randint(0,255),randint(0,255)),(randint(0,255),randint(0,255),randint(0,255))) #generiert eine zufällige Farbe für die turtle t.color((randint(0,255),randint(0,255),randint(0,255)),(randint(0,255),randint(0,255),randint(0,255))) #generiert eine zufällige Farbe für die turtle
def line(t): #Diese Funktion malt eine einfache Linie (in verschiedenen Farben und mit Stempeln jede 100 Einheiten) def line(t): #Diese Funktion malt eine einfache Linie (in verschiedenen Farben und mit Stempeln jede 100 Einheiten)
setcolor(t,1) #Hier rufen wir setcolor mit unserer turtle auf und setzen n=1, um die Linie und die Schildkröte in derselben Farbe zu färben setcolor(t,1) #Hier rufen wir setcolor mit unserer turtle auf und setzen n=1, um die Linie und die Schildkröte in derselben Farbe zu färben
t.shape('turtle') t.shape('turtle')
t.stamp() #wir machen einen Stempel an dieser Stelle von unserem turtle t.stamp() #wir machen einen Stempel an dieser Stelle von unserem turtle
t.fd(100) t.fd(100)
setcolor(t,1) #nächster Aufruf von setcolor setcolor(t,1) #nächster Aufruf von setcolor
setcolor(t,1) # wir können setcolor beliebig oft und an beliebiger Stelle aufrufen setcolor(t,1) # wir können setcolor beliebig oft und an beliebiger Stelle aufrufen
t.stamp() #wir machen einen Stempel an dieser Stelle von unserem turtle t.stamp() #wir machen einen Stempel an dieser Stelle von unserem turtle
t.fd(100) t.fd(100)
setcolor(t,2) setcolor(t,2)
t.stamp() #wir machen einen Stempel an dieser Stelle von unserem turtle t.stamp() #wir machen einen Stempel an dieser Stelle von unserem turtle
t.fd(100) t.fd(100)
setcolor(t,2) setcolor(t,2)
t.stamp() #wir machen einen Stempel an dieser Stelle von unserem turtle t.stamp() #wir machen einen Stempel an dieser Stelle von unserem turtle
t.fd(100) t.fd(100)
setcolor(t,2) setcolor(t,2)
line(telmo) #wir rufen line mit der turtle namens telmo auf. Wir könnten aber genauso anna oder otto nehmen line(telmo) #wir rufen line mit der turtle namens telmo auf. Wir könnten aber genauso anna oder otto nehmen
turtle.mainloop() turtle.mainloop()
turtle.bye() turtle.bye()
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` ```
import turtle import turtle
otto=turtle.Turtle() # definiert ein turtle-Objekt, wird der Variablen otto zugewiesen otto=turtle.Turtle() # definiert ein turtle-Objekt, wird der Variablen otto zugewiesen
anna=turtle.Turtle() # definiert ein turtle-Objekt, wird der Variablen anna zugewiesen anna=turtle.Turtle() # definiert ein turtle-Objekt, wird der Variablen anna zugewiesen
telmo=turtle.Turtle() # definiert ein turtle-Objekt, wird der Variablen telmo zugewiesen telmo=turtle.Turtle() # definiert ein turtle-Objekt, wird der Variablen telmo zugewiesen
#Hier lernen wir die Funktionen circle() und shapesize() kennen #Hier lernen wir die Funktionen circle() und shapesize() kennen
def circle(t,r): def circle(t,r):
t.shape('turtle') t.shape('turtle')
t.shapesize(10) # wir ändern die Größe unserer turtle t.shapesize(10) # wir ändern die Größe unserer turtle
t.circle(r) #wir malen einen Kreis mit Radius r t.circle(r) #wir malen einen Kreis mit Radius r
circle(telmo,100) #wir rufen line mit der turtle namens telmo auf. Wir könnten aber genauso anna oder otto nehmen circle(telmo,100) #wir rufen line mit der turtle namens telmo auf. Wir könnten aber genauso anna oder otto nehmen
turtle.mainloop() turtle.mainloop()
turtle.bye() turtle.bye()
``` ```
%% 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.
......
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">1&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">2&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">3&nbsp;&nbsp;</span>Aufgabe 3</a></span></li></ul></div>
%% Cell type:markdown id: tags:
# 1. Hausaufgabe # 1. Hausaufgabe
### Lesen Sie sich die nachfolgenden Hinweise gut durch und folgen Sie den Anweisungen, um Missverständnisse zu vermeiden. ### Bitte lesen Sie sich die nachfolgenden Hinweise zur Hausaufgabe gut durch.
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 (#), um ihr Programm zu kommentieren. 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:
- inline-Kommentare (Code kommentieren): `#`
- 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_schwab_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.
- Bei (Verständnis-)Fragen können Sie mich **frühzeitig** und nicht am Abend des Abgabetages per E-Mail oder während der Sitzungen erreichen. - 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.
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:
# 3. Hausaufgabe # 3. Hausaufgabe
Geben Sie diese Hausaufgabe gemeinsam mit Ihrem/r Partner/in ab. Füllen Sie dazu dieses Notebook aus und speichern Sie es ab (Disketten-Icon oben links). Laden Sie dann die Datei (`hausaufgabe3.ipynb`) in Moodle hoch. Verwenden Sie Kommentare im Python-Quellcode und Markdown-Textboxen im Jupyter-Notebook ([Syntax-Beispiele](https://de.wikipedia.org/wiki/Markdown#Auszeichnungsbeispiele)) um ihr Programm zu kommentieren. Für diese Hausaufgabe sollten Sie das 4. bis 6. Kapitel durchgearbeitet haben, da Rekursion, Verzweigungen und Funktionen mit Rückgabewert benötigt werden. ### 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 bitte Ihrem **Notebook einen Namen**, sodass es Ihnen und Ihrem Partner zugeordnet werden kann (z.B. *hausaufgabe2_nachname1_nachname2.ipynb*) **Tipps und Anmerkungen**:
* 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: - 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!
- 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))
- Bitte ändern Sie den Dateinamen ihrer Hausaufgabe zu: **hausaufgabe3_nachnamePartnerIn1_nachnamePartnerIn2.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.
- 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.
Wir wünschen viel Erfolg beim Lösen der Aufgaben!
%% Cell type:markdown id: tags:
Wir wünschen viel Erfolg beim Lösen der Aufgaben!
%% 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:
# 4. Hausaufgabe # 4. Hausaufgabe
Geben Sie diese Hausaufgabe gemeinsam mit Ihrem/r Partner/in ab. Füllen Sie dazu dieses Notebook aus und speichern Sie es ab (Disketten-Icon oben links). Laden Sie dann die Datei (`hausaufgabe4.ipynb`) in Moodle hoch. Verwenden Sie Kommentare im Python-Quellcode und Markdown-Textboxen im Jupyter-Notebook ([Syntax-Beispiele](https://de.wikipedia.org/wiki/Markdown#Auszeichnungsbeispiele)) um ihr Programm zu kommentieren. Für diese Hausaufgabe sollten Sie alles bis zum 10. Kapitel durchgearbeitet haben, da Iteration, Rekursion, Verzweigungen und Funktionen mit Rückgabewert benötigt werden. ### 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 bitte Ihrem Notebook einen Namen, sodass es Ihnen und Ihrem Partner zugeordnet werden kann (z.B. nachname1_nachname2_hausaufgabe2.ipynb) **Tipps und Anmerkungen**:
* Fügen Sie außerdem **Kommentare** zu ihrem Code hinzu, mit denen Sie erklären, was die Funktion macht. Dies kann man durch zwei Varianten machen: - 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!
- 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): `''' '''`
- 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. - 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**
- 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.
- 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.
- 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 ``` 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 ``` 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).
......
%% Cell type:markdown id: tags:
# Seminar Problemorientierte Programmierung
Falls Sie im Python Programmierkurs sind und dies ihr erstes geöffnetes Jupyter Notebook ist:
<font color='green'>**Herzlichen Glückwunsch! Sie haben die erste Hürde gemeistert. :)**</font>
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.
%% 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
Unser Lernziel ist, dass Sie Programmieren lernen (mit Python :-)). Bis dahin ist es ein weiter Weg. Der beste Tipp ist: üben, üben, üben.
Dieses Semester wird wie folgt ablaufen, ich erkläre den Prozess in den ersten Präsenzsitzungen noch einmal ausführlich:
1. Suchen Sich sich einen Partner. Das hat Zeit bis Ende Oktober. Für die Fernstudierenden ist dies keine Pflicht.
2. Sie arbeiten als Pair-Programming-Team die Jupyter-Notebooks durch.
- Planen Sie einen oder zwei **regelmäßige** Termine pro Woche ein, an denen Sie mit ihrem Partner die Aufgaben durcharbeiten.
- remote Pair-Programming Möglichkeiten werden Ihnen am Anfang des Semesters vorgestellt.
- Wechseln Sie sich alle 15 Minuten ab bzw. wechseln Sie Ihre Rollen (siehe Pair-Programming: Navigator_in <--> Fahrer_in).
3. Jede Woche gebe ich bekannt, bis zu welcher Aufgabe Sie kommen sollen. Das ist von Woche zu Woche unterschiedlich, da Sie mit den Notebooks unterschiedlich viel Zeit brauchen.
## 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.
- 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.
- Falls Sie mal nicht weiterkommen: helfen Sie sich gegenseitig und versuchen Sie verschiedene Dinge. Schreiben Sie Ihr Problem z.B. einfach mal ganz genau im entsprechenden Notebook auf. Oft hilft das Aufschreiben eines Problems schon bei der Lösung eines Problems.
## 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. (Hier müssen Sie nichts verändern, es reicht, die Zelle auszuführen).
- **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.
- 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:
## Hinweise zur Benutzung von Jupyter
### Jupyter Notebook Grundlagen und Informationen
- open-source, browserbasiertes Tool für verschiedene Programmiersprachen (wir benutzen Python)
- **Vorteil**: Code, Visualisierungen und Text / Erklärungen in einem Dokument
- Notebook besteht aus Blöcken bzw. Zellen
- 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)
- 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.
- 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.
### 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.
#### Anleitungen
**Änderung des Standardbrowsers in...**
*macOS:*
1. Öffnen sie die Systemeinstellungen.
2. Klicken Sie auf „Allgemein“.
3. Wählen Sie unter „Standard-Webbrowser“ den gewünschten Browser aus.
*Ubuntu Linux:*
1. Öffnen Sie die System Settings.
2. Klicken Sie auf „Applications“.
3. Wählen Sie in der linken Spalte „Default Applications“ aus.
4. Klicken Sie in der Spalte rechts davon auf „Web Browser“.
5. Wählen Sie „in the following browser:“ aus.
6. Wählen Sie den gewünschten Browser aus.
*Windows:*
1. Öffnen Sie die Systemsteuerung.
2. Klicken Sie auf „Standardprogramme“.
3. Klicken Sie auf „Standardprogramme festlegen“.
4. Klicken Sie in der Liste auf den gewünschten Browser.
5. Klicken Sie dann auf „Dieses Programm als Standard festlegen“.
### 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.**
Übersicht: *Menü Help -> Keyboard Shortcuts*
Wichtigste Shortcuts:
- *Enter*: Editiermodus für selektierte Zelle (grün umrandet)
- *Esc*: Editiermodus verlassen/Kommandomodus (blau umrandet)
- *Strg + Enter*: Selektierte Zelle ausführen
- *Shift + Enter*: Selektierte Zelle ausführen und in nächste Zelle springen
Im Editiermodus:
- *Tab*: Autocomplete oder Einrücken
- *Shift + Tab*: Einrücken rückwärts
Im Kommando-/Lesemodus:
- *B*: Zelle darunter einfügen
- *A*: Zelle darüber einfügen
- *DD*: Zelle löschen
- *M*: Zelltyp Markdown (für formatierte beschreibende Texte, zB diese Zelle)
- *Y*: Zelltyp Code (Default)
%% Cell type:markdown id: tags:
#### Beispiel: Markdown Zelle vs. Code Zelle
%% 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.
Hier werden keine Rechnungen ausgeführt, siehe:
5+3
In diesen Feldern werden Erklärungen, Aufgabenstellungen und schriftliche Antworten von euch stehen.
%% Cell type:code id: tags:
``` python
# 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.
# Der Text kann hier nur stehen, da eine Raute am Anfang der Zeile steht.
# Dadurch werden diese Zeilen nicht ausgeführt.
31+11
# 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.
```
%% Cell type:markdown id: tags:
## 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.
**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*
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:
``` python
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
haeufigkeiten = [0 for i in range(13)]
wuerfe = 1000
for i in range(wuerfe):
# Würfelsumme für zwei Würfel zählen
haeufigkeiten[random.randrange(1,7) + random.randrange(1,7)] += 1
# Ergebnis als Tabelle ausgeben
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("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')
```
%% 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)
([Random Number](https://xkcd.com/221/), Randall Munroe)
%% Cell type:markdown id: tags:
![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.
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.