Skip to content
Snippets Groups Projects
Commit 81926be1 authored by andresm's avatar andresm
Browse files

Update Intro_pre.ipynb, Kontrollstrukturen_pre.ipynb,...

Update Intro_pre.ipynb, Kontrollstrukturen_pre.ipynb, add_material/ewpwicht_homework.png, add_material/ewpwicht_programming.png, add_material/ewpwicht.png, add_material/ewpwicht_video.png files
parent 0ce7291f
No related branches found
No related tags found
No related merge requests found
%% Cell type:markdown id: tags:
<img src="./add_material/headerCD.png">
# Einführung in wissenschaftliches Programmieren
Dozenten: Dr. Martin Bracke, Matthias Andres
Kontakt: ewp@mathematik.uni-kl.de
%% Cell type:code id: tags:
``` python
%autosave 0
```
%% Cell type:markdown id: tags:
## Wegweiser durch die Vorlesung
<img src="./add_material/ewpwicht.png" width="40px" align="left"> Dieses Symbol markiert wichtige Informationen.
%% Cell type:markdown id: tags:
<img src="./add_material/ewpwicht_programming.png" width="50px" align="left"> Wenn Ihr dieses Symbol seht, dürft Ihr selbst aktiv werden und einen kleinen Selbsttest lösen.
%% Cell type:markdown id: tags:
<img src="./add_material/ewpwicht_homework.png" width="50px" align="left">
Dieses Symbol markiert zusätzliche Inhalte wie z.B. Hintergrundinformationen. Diese sind natürlich interessant, aber es bietet sich an (gerade für die Programmieranfänger), diese Inhalte beim ersten Durchlesen erstmal zu überspringen.
%% Cell type:markdown id: tags:
<a href="https://vcm.uni-kl.de/Panopto/Pages/Viewer.aspx?id=6217dc46-aa1c-449e-bf57-ab9c013ca8f3"> <img src="./add_material/ewpwicht_video.png" width="100px" align="left"> </a> Hinter diesem Symbol verbirgt sich ein Link auf externes Videomaterial - Probier es mal aus und klicke auf das Symbol!
%% Cell type:markdown id: tags:
# Grundlagen in Python
In diesem Notebook lernen wir die ersten Grundlagen in Python kennen:
* Allgemeine Infos zu Python: Was ist das und wie verwende ich es?
* Allgemeine Syntax in Python
* Was ist eine Variable?
* Programmablaufpläne
Hinweis: Diese Vorlesung basiert unter anderem auf der Arbeit von J. R. Johansson. Einige Inhalte wurden zum Teil direkt übernommen bzw. für die Vorlesung angepasst. Wir verweisen auf
* https://github.com/jrjohansson/scientific-python-lectures
* https://creativecommons.org/licenses/by/3.0/
%% Cell type:markdown id: tags:
## Was ist Python?
Man unterscheidet zwischen **interpretierten** und **kompilierten** Programmiersprachen (http://www.mnn.ch/abc/html/Programm_3.html):
* Interpretiert (Python, Matlab, R, ...): Der Computer nimmt den Quellcode und geht Zeile für Zeile vor, in dem er jede Zeile übersetzt und ausführt. Diesen Vorgang nennt man interpretieren.
* Kompiliert (C, Fortran, Java, ...): Der Computer nimmt den Quellcode und übersetzt ihn als Ganzes (kompilieren). Dabei entsteht ein maschinenlesbarer Code. Dieser kann dann später ausgeführt werden.
Python ist eine interpretierte höhere Programmiersprache. In der Vorlesung verwenden wir **Python3**.
* Vorteile
* Die benötigte Zeit zur Entwicklung, Fehlersuche (Debugging) und Pflege des Codes ist vergleichsweise kurz.
* Durch den Design der Programmiersprache wird eine gute Programmierpraxis nahegelegt (Modularisierung, objektorientiertes Programmieren, Wiederverwendung von Code, Dokumentation)
* Es besteht eine Vielzahl an Bibliotheken für verschiedenste Anwendungsgebiete.
* Nachteile
* Die Zeit zur Ausführung eines in Python geschriebenen Programms kann (wesentlich) langsamer sein als ein äquivalentes Programm in einer kompilierten Programmiersprache (z.B. C oder Fortran).
%% Cell type:markdown id: tags:
## Wie installiere ich Python auf meinem Computer?
In dieser Vorlesung verwenden wir Python3.
Es gibt verschiedene Möglichkeiten, Python auf dem eigenen Computer zu installieren. Wir empfehlen die Installation mit Hilfe von Anaconda https://www.anaconda.com/ .
Hier findet Ihr eine kurze Anleitung zur Installation des Anaconda-Navigators unter Linux:
<a href="https://vcm.uni-kl.de/Panopto/Pages/Viewer.aspx?id=72591aef-fbd6-4496-976a-ab9c013e0aff"> <img src="./add_material/ewpwicht_video.png" width="100px" align="center"> </a>
%% Cell type:markdown id: tags:
## Wie führe ich Python Code aus?
Es gibt verschiedene Möglichkeiten, Python Code auszuführen.
### 1) Python Interpreter: Ausführung in der Kommandozeile
Der *Python Interpreter* ist ein Programm welches einen Python Code einliest und ausführt. Hier gibt es zwei Möglichkeiten:
Bei Eingabe von **python** (ggf. **python3**) in der Kommandozeile öffnet sich die sogenannte **Python Konsole** - alle Befehle, die man jetzt in diesem Fenster eingibt, werden vom Python Interpreter verarbeitet. Hier kann man nun einzelne Befehle nacheinander eingeben und durch drücken der Return-Taste direkt ausführen lassen. Dies bietet sich für kleinere Rechnungen oder zum Experimentieren an.
<img src="./add_material/ScreenshotPythonKonsole.png" width="800px"> *Ausführen eines Hello-World Programms in der Python Konsole.*
Längere Codes speichert man in der Regel in Textdateien mit der Endung **.py** ab. Diese nennen wir **Python Skripte**. Diese kann man mit Hilfe des Python Interpreters in der Kommandozeile ausführen. Hierzu muss entweder der vollständige Pfad zur Datei angegeben werden, sofern die Datei nicht im aktuellen Arbeitsverzeichnis der Kommandozeile liegt. Das aktuelle Arbeitsverzeichnis kann man sich mit Hilfe des Kommandos **pwd** in der Kommandozeile ausgeben lassen. Die Datei **hello_world.py** ist im beiliegenden Ordner **add_material** hinterlegt.
<img src="./add_material/ScreenshotPythonFromCommandLine.png" width="800px"> *Aufruf eines Hello-World Python Skripts in der Kommandozeile.*
Man kann externen Python Code auch von der Python Konsole aus ausführen. Ein entscheidender Unterschied hier ist, dass ggf. Ergebnisse aus vorherigen Rechnungen noch im Arbeitsspeicher hinterlegt sein können. Dies kann zu Fehlern bei der Entwicklung von Code führen (s. unten).
<img src="./add_material/ScreenshotPythonKonsoleExec.png" width="800px"> *Aufruf eines Hello-World Python Skript in der Python Konsole.*
### 2) IPython
IPython ist eine andere Version der Standard Python Konsole, die noch mehr Möglichkeiten der Interaktion bietet.
<img src="./add_material/ScreenshotIpythonKonsole.png" width="800px"> *Ausführen eines Hello-World Programms in der IPython Konsole.*
### 3) Integrierte Entwicklungsumgebung (IDE) (Alltag in den Übungen)
Eine Integrierte Entwicklungsumgebung ist eine Benutzeroberfläche, welche verschiedene Werkzeuge zur Entwicklung von Programmen bereitstellt, z.B. einen geeigneten Texteditor und eine Schnittstelle, um Code direkt auszuführen und die Ergebnisse weiterzuverarbeiten. Im späteren Verlauf der Vorlesung werden wir eine Möglichkeit kennenlernen, mit Hilfe einer IDE systematisch Fehler im Code zu finden (Debugging). Für Python gibt es viele verschiedene IDEs. Zum Einstieg, vor allem für den späteren Umstieg auf Matlab, eignet sich **Spyder** (https://www.anaconda.com/download/). In Spyder findet man voreingestellt ein Fenster mit einer IPython Konsole.
<img src="./add_material/ScreenshotSpyder.png">
### 4) IPython / Jupyter Notebooks (Alltag in der Vorlesung)
Notebooks (Endung **.ipynb**) werden über einen web browser als HTML bereitgestellt und bieten die Möglichkeit, sowohl Quelltext in einer IPythonumgebung auszuführen und die Ergebnisse anzeigen zu lassen als auch formatierten Text anzuzeigen. Dies eignet sich insbesondere für die Lehre und zur anschaulichen und interaktiven Präsentation von Ergebnissen. Durch die Verwendung von IPython kann dem Nutzer die Möglichkeit zur Interaktion geboten werden - er kann den vorliegenden Code selbst verändern und sich das Ergebnis direkt ausgeben lassen. Das Dokument, welches dieses Vorlesung beinhaltet, ist ebenfalls ein Notebook.
<img src="./add_material/ScreenshotNotebook.png">
%% Cell type:markdown id: tags:
## Allgemeine Syntax
* Das Zeichen # definiert den Rest der Zeile als **Kommentar**
* Code-Blöcke werden durch **Einrücken** definiert (PEP8 Standard: 4 Leerzeichen)
* Befehle, auf die ein eingerückter Befehlsblock folgt, enden immer auf **:**
* Ausgabe in der Konsole: **print()**
%% Cell type:code id: tags:
``` python
a = 3.0
b = 0 # Das ist ein Kommentar
# Das ist ein Kommentar
if (0.2 < a):
b = 1
print(a)
print("Winter is coming!")
```
%% Cell type:markdown id: tags:
## Was ist eine Variable?
Eine ausführliche Übersicht über Variablen findet man z.B. unter folgendem Link:
https://realpython.com/python-variables/
In Python stellen Variablen **symbolische Namen** dar, die auf eine bestimmte Stelle im Speicher verweisen. Was genau an dieser Stelle im Speicher vorzufinden ist, z.B. eine ganze Zahl, eine Zeichenkette, eine Funktion, eine selbstgeschriebene Klasse, etc., spielt hier keine Rolle.
<img src="./add_material/PythonMemory.png" width="200px">
Wir schauen uns das folgende Beispiel an:
%% Cell type:code id: tags:
``` python
n = 10
```
%% Cell type:markdown id: tags:
Bei der Ausführung der obigen Zeile, führt der Python Interpreter folgende Schritte durch:
* Erzeuge ein ganzzahliges Objekt im Speicher (wie auch immer das intern funktioniert).
* Gib diesem ganzzahligen Objekt den Wert 10.
* Erzeuge eine Referenz auf dieses Objekt im Speicher und nenne sie **n**.
Wir können nun mit Hilfe der Variablen auf den Inhalt des Speichers zugreifen. Je nach Datentyp bietet uns Python hier verschiedene Möglichkeiten, die wir im Laufe der Vorlesung kennen lernen werden. Wir werden im Kapitel **Datenstrukturen** noch näher auf verschiedene Objekttypen in Python eingehen. Existiert eine Zeichenkette (String) als Repräsentation für unser Objekt (bei Zahlen intuitiv, bei selbstgeschriebenen Objekten teilweise schwierig), können wir diese mit Hilfe des print Befehls auf dem Bildschirm ausgeben lassen.
%% Cell type:code id: tags:
``` python
print(n)
```
%% Cell type:markdown id: tags:
Für den Moment merken wir uns:
<img src="./add_material/ewpwicht.png" width="50px" align="left"> **In Python stellen wir uns Variablen als Namen vor, die an ein bestimmtest Objekt im Speicher 'angeheftet' sind.**
%% Cell type:markdown id: tags:
Das Gleichheitszeichen wird hier als Zuweisung verwendet, d.h. die Variable auf der linken Seite verweist nun auf das Objekt, das auf der rechten Seite erzeugt bzw. auf das auf der rechten Seite verwiesen wird. Dies mag am Anfang verwirrend sein, wenn man zum ersten Mal einen Ausdruck wie in der nächsten Zelle sieht:
%% Cell type:code id: tags:
``` python
n = n + 10
```
%% Cell type:markdown id: tags:
Zu Beginn der obigen Zeile verweist die Variable n auf ein Integer Objekt (d.h. eine ganze Zahl). Dann wird zunächst ein neues Integer Objekt im Speicher mit dem Wert n + 10 erzeugt. Anschließend wir die Variable n umdefiniert, sodass sie nun auf dieses neue Objekt verweist.
%% Cell type:code id: tags:
``` python
print(n)
```
%% Cell type:markdown id: tags:
## Programmablaufpläne
Ein Computerprogramm ist im wesentlichen eine Abfolge von Anweisungen, die vom Computer ausgeführt werden können (hier mit Hilfe des Python Interpreters).
Zum erfolgreichen Lösen eines Problems mit Hilfe einer Programmiersprache ist es neben dem Erlernen der Syntax (welche Vokabeln und Konzepte stellt mir eine Programmiersprache zur Verfügung, meine Lösungsstrategie zu formulieren) wichtig, sich vorab Gedanken über die Struktur eines Programms zu machen. Insbesondere ist es bei größeren Problemstellungen wichtig, diese in einzelne, kleinere Teilprobleme zu zerlegen. Hier helfen Programmablaufpläne. Die wichtigsten Bausteine listen wir hier auf:
* <img src="./add_material/Start.png" width="80px" align="left"> Jedes Programm besitzt einen Anfang. An dieser Stelle existieren keine Variablen im Arbeitsspeicher. Wir können nur auf Variablen zugreifen, die wir nach dem Start und vor dem aktuellen Zeitpunkt definiert haben. In Python ist der Start eines Programms durch den Aufruf eines Python Skripts mit Hilfe des Python Befehls in der Kommandozeile, oder durch den Start der Python Konsole definiert.
<img src="./add_material/ewpwicht.png" width="25px" > **Vorsicht**: In interaktiven Umgebungen wie der Python Konsole können wir Python Code ausführen und im Anschluss auf erzeugte Variablen zugreifen, um diese z.B. visuell darzustellen oder zu analysieren. Beim Ausführen mehrerer Codes wird dabei der Inhalt des Arbeitsspeichers nicht jedesmal zurückgesetzt. Ein häufiger Fehler ist es hier, in seinem Code auf Variablen zuzugreifen, die im Code selbst nicht definiert sind. Dieser Fehler fällt oft in derselben Session der Python Konsole nicht auf, da die Variable noch im Arbietsspeicher existiert. Startet man die Python Konsole allerdings neu (oder schickt seine Lösung den Übungsleitern), kann es sein, dass beim nächsten Ausführen das Programm plötzlich nicht mehr funktioniert.
* <img src="./add_material/Verzweigung.png" width="80px" > Logische Verzweigungen
* <img src="./add_material/Anweisung.png" width="80px"> Ausführbare Anweisung: Ein Befehl, für dessen Ausführung alle Grundlagen geschaffen sind (z.B. nötige Variablen wurden bereits definiert, etc.).
* <img src="./add_material/Stop.png" width="80px" > Ende des Programms: Es muss klar sein, wann das Programm (erfolgreich?) beendet ist.
Programmablaufpläne kann man z.B. mit Hilfe des yED Editors erstellen (auch als Onlineversion verfügbar: https://www.yworks.com/products/yed-live).
%% Cell type:markdown id: tags:
## Beispiel: Die Betragsfunktion
Wir betrachten die Funktion
$$ f:\mathbb{R} \rightarrow \mathbb{R}_{\geq 0}: x \mapsto |x|.$$
Alternativ können wir $f$ wie folgt definieren:
$$ f:\mathbb{R} \rightarrow \mathbb{R}_{\geq 0}: x \mapsto \begin{cases} x &, x\geq0 \\ -x &,x<0 \end{cases}.$$
Wir überführen diese abstrakte Formulierung in einzelne ausführbare Teilschritte.
<img src="./add_material/Betragsfunktion.png" width="250px">
In den kommenden Vorlesungen lernen wir die nötige Syntax kennen, um Programmablaufpläne in Pythonprogramme umzuwandeln. In der nächsten Zelle sehen wir beispielhaft den hier vorgestellten Programmablaufplan zur Betragsfunktion als Pythonprogramm umgesetzt. Man kann den Inhalt der Zelle ausführen, indem man sie durch Mausklick auswählt und anschließend STRG + ENTER drückt.
%% Cell type:code id: tags:
``` python
x = -7
if x >= 0:
print('f(x) = ', x)
else:
print('f(x) = ', -x)
```
%% Cell type:markdown id: tags:
<img src="./add_material/ewpwicht_programming.png" width="50px" align="left"> **Kurzer Selbsttest:**
Wir berechnen für ein gegebenes $n \in \mathbb{N}$ die Summe der Zahlen von 0 bis $n$:
\begin{align*}
x = 1 + 2 + \ldots + n = \sum_{k=0}^n k .
\end{align*}
Erstelle einen zugehörigen Programmablaufplan.
%% Cell type:markdown id: tags:
### Beispiel: verschachtelte Schleife
Schleifen sind Kontrollstrukturen, mit denen man den Programmablauf steuern kann. Diese werden in einem eigenen Notebook behandelt. Hier aber schon mal vorweg ein Beispiel, wie verschachtelte Schleifen in einem Programmablaufplan aussehen könnten.
<img src="./add_material/verschachtelteSchleifen.png" width="500px">
%% Cell type:markdown id: tags:
### Beispiel: Funktionen
Funktionen erlauben es, Programme in einzelne Teilprogramme zu gliedern. Diese werden in einem eigenen Notebook behandelt. Hier aber schon mal vorweg ein Beispiel, wie Funktionen in einem Programmablaufplan aussehen könnten.
<img src="./add_material/FunktionenPAP.png" width="500px">
%% Cell type:markdown id: tags:
## Links und weiterführendes Material
<img src="./add_material/ewpwicht_homework.png" width="50px" align="center">
* Python-Distribution (**Python 3**): https://www.anaconda.com/download/
* Editor für Flussdiagramme: https://www.yworks.com/yed-live/
* https://github.com/jrjohansson/scientific-python-lectures/blob/master/Lecture-0-Scientific-Computing-with-Python.ipynb **Vorsicht**: In der Vorlesung benutzen wir Python 3, in dieser Quelle wird jedoch Python 2 benutzt. Das Tutorial ist jedoch sehr übersichtlich und viele Inhalte sind weiterhin gültig.
* Unterschied Python 2.x und 3.x: https://sebastianraschka.com/Articles/2014_python_2_3_key_diff.html
***
%% Cell type:markdown id: tags:
## Hinweise zur Lizenz
Teile dieser Materialien basieren auf der Arbeit von Robert Johansson (https://github.com/jrjohansson/scientific-python-lectures), welche unter der Creative Commons Lizenz (https://creativecommons.org/licenses/by/3.0/) nutzbar ist.
Wir weisen hier darauf hin, dass Bildinhalte nicht verändert oder weitergegeben werden dürfen.
Die vollständigen Materialien sind insbesondere nur für den eigenen Gebrauch bestimmt und werden im Rahmen des Studiums an der TU Kaiserslautern bereitgestellt und dürfen nicht an Dritte weitergegeben werden.
This diff is collapsed.
add_material/ewpwicht.png

510 KiB

add_material/ewpwicht_homework.png

1.05 MiB

add_material/ewpwicht_programming.png

1.81 MiB

add_material/ewpwicht_video.png

525 KiB

0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment