Initial push.

This commit is contained in:
2022-02-22 13:46:01 +01:00
parent af08e66355
commit 5232cc93c7
44 changed files with 6628 additions and 0 deletions
+132
View File
@@ -0,0 +1,132 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"pycharm": {
"name": "#%% md\n"
},
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Software Entwicklung \n",
"\n",
"## Kapitel 1: Einführung \n",
"\n",
"### 1.1 Skriptsprache \n",
"\n",
"Python ist eine Skriptsprache, deren Befehle nicht von einem *Compiler* \n",
"vor der Programmausführung in Maschinencode \n",
"für den jeweiligen Prozessor übersetzt werden, \n",
"sondern die von einem *Interpreter* zur Programmlaufzeit ausgeführt werden.\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"pycharm": {
"name": "#%% md\n"
},
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"#### 1.1.1 Kommandozeileninterpreter\n",
"\n",
"Ein solcher Interpreter kann z.B. durch einen Kommandozeilenbefehl gestartet werden, \n",
"bei dem der auszuführende Python-Code als Dateiname angegeben wird. Ein solcher \n",
"Kommandozeileninterpreter ist für viele Systeme \n",
"bei __[Python.org](https://www.python.org/downloads/)__ kostenfrei erhältlich.\n",
"\n",
"Unter Linux und MacOS lautet der Kommandozeilenbefehl meist <code>python3</code>, \n",
"unter Windows schlicht <code>python</code>. Die Datei, die die Python-Befehle enthält, \n",
"besitzt i.d.R. die Extension <code>.py</code>.\n",
"\n",
"Beispiel: Der folgende Kommandozeilenbefehl startet einen Python-Interpreter und \n",
"führt die Befehle aus, die in der Datei <code>programm.py</code> enthalten sind:\n",
"\n",
"```\n",
"C:/> python programm.py\n",
"```\n",
"Der Interpreter beendet sich, sobald alle Befehle ausgeführt wurden."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"#### 1.1.2 Entwicklungsumgebung Visual Studio Code\n",
"\n",
"Das Entwickeln mit einem Kommandozeilen-Interpreter und einem Editor zum Erstellen der \n",
"Programmdateien ist möglich, für einen Anfänger aber recht umständlich. Daher bietet\n",
"es sich an, eine *Entwicklungsumgebung* zu nutzen, die z.B. Python-Befehle auf korrekte \n",
"Syntax überprüft und Fehler frühzeitig anzeigt.\n",
"\n",
"Microsoft *Visual Studio Code* ist eine solche Entwicklungsumgebung, die für alle relevanten\n",
"Betriebssysteme (Windows, Linux, Mac OS) __[hier](https://code.visualstudio.com/)__ heruntergeladen \n",
"werden kann. \n",
"\n",
"Visual Studio Code ist dabei nicht auf eine bestimmte Programmiersprache beschränkt, sondern kann \n",
"durch *Extensions* so erweitert werden, dass z.B. eine Syntaxprüfung für Python durchgeführt wird.\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"#### 1.1.3 Jupyter Notebook\n",
"\n",
"Ein *Jupyter Notebook* ist ein Hilfsmittel zur Erläuterung der Sprache Python. \n",
"Ein solches Notebook kann sowohl erklärenden Text als auch Python-Befehle enthalten.\n",
"\n",
"Für die Anzeige eines Notebooks wird der Browser verwendet, in dem die Python-Befehle \n",
"interaktiv ausgeführt und ggf. auch verändert werden können. Die Unterlagen zur \n",
"Veranstaltung *Software Entwicklung* werden als Notebooks bereitgestellt; dieser Text,\n",
"den Sie gerade lesen, ist bereits Bestandteil eines solchen Notebooks.\n"
]
}
],
"metadata": {
"celltoolbar": "Slideshow",
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.9"
},
"pycharm": {
"stem_cell": {
"cell_type": "raw",
"metadata": {
"collapsed": false
},
"source": []
}
}
},
"nbformat": 4,
"nbformat_minor": 1
}
+197
View File
@@ -0,0 +1,197 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Software Entwicklung \n",
"\n",
"## Kapitel 1: Einführung \n",
"\n",
"### 1.2 Built-In Functions\n",
"\n",
"Jeder Python-Interpreter \"versteht\" eine Reihe von *Built-In Functions*. \n",
"Das sind Bausteine, aus denen dann komplizierte Programme zusammengesetzt werden\n",
"können. Der Aufruf einer Built-In Funktion (und jeder anderen Funktion) liefert \n",
"grundsätzlich einen Rückgabewert. Darüber hinaus kann eine Built-In Funktion\n",
"auch Seiteneffekte ausführen (z.B. eine Datei beschreiben, eine Eingabe \n",
"entgegennehmen etc.).\n",
"\n",
"Im Laufe der Veranstaltung werden wir einige der Built-In Functions kennenlernen. "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"#### 1.2.1 Ausgabe\n",
"\n",
"Eine ganz elementare Built-In Function ist\n",
"\n",
"```Python\n",
"print()\n",
"```\n",
"Sie wird hauptsächlich wegen ihres Seiteneffekts aufgerufen, den übergeben Parameter \n",
"auf der Konsole auszugeben und danach einen Zeilenwechsel durchzuführen."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"pycharm": {
"is_executing": false,
"name": "#%%\n"
}
},
"outputs": [],
"source": [
"print(17)\n",
"print(\"Hello World!!\")"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Die Funktion <code>print</code> kann jede Art von Parameter entgegennehmen (Zeichenkette, \n",
"Ganzzahl, Gleitkommazahl,...). Natürlich besitzt die Funktion auch einen Rückgabewert, \n",
"der ebenfalls ausgegeben werden kann:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"pycharm": {
"is_executing": false,
"name": "#%%\n"
}
},
"outputs": [],
"source": [
"print(print(17))\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Der Wert <code>None</code> steht in Python für *nichts*. \n",
"Es ist etwas anderes als die Zahl 0 oder ein Leerstring. \n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"#### 1.2.2 Ausgabe mehrerer Werte\n",
"\n",
"Die Anzahl der Parameter der Funktion <code>print</code> ist nicht beschränkt. \n",
"Wird mehr als ein Parameter angegeben, so erfolgt die Ausgabe nacheinander ohne\n",
"Zeilenumbruch."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"pycharm": {
"is_executing": false,
"name": "#%%\n"
}
},
"outputs": [],
"source": [
"print(17, 4)\n",
"print()\n",
"print(\"Hello\", \"World\", \"!\", 17, 4)\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"#### 1.2.3 Eingabe\n",
"\n",
"Analog zur Ausgabe gibt es auch eine Funktion zur Eingabe eines Werts: \n",
"\n",
"```Python\n",
"input(\"<prompt>\")\n",
"```\n",
"Der Seiteneffekt dieser Funktion ist zunächst die Ausgabe des Parameters und \n",
"anschließend das Einlesen einer Tastatureingabe bis zum Zeilenwechsel.\n",
"\n",
"Der Rückgabewert der Funktion sind die eingegebenen Zeichen als Zeichenkette."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"pycharm": {
"is_executing": false,
"name": "#%%\n"
},
"scrolled": false
},
"outputs": [],
"source": [
"input(\"Wie ist Ihr Name?\")\n"
]
}
],
"metadata": {
"celltoolbar": "Slideshow",
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.9"
},
"pycharm": {
"stem_cell": {
"cell_type": "raw",
"metadata": {
"collapsed": false
},
"source": []
}
}
},
"nbformat": 4,
"nbformat_minor": 1
}
+218
View File
@@ -0,0 +1,218 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"collapsed": true,
"pycharm": {
"name": "#%% md\n"
},
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Software Entwicklung \n",
"\n",
"## Kapitel 1: Einführung \n",
"\n",
"### 1.3 Variable\n",
"\n",
"Wie in jeder anderen Programmiersprache dienen *Variablen* dazu, Werte (z.B. Rückgabewerte von \n",
"Funktionsaufrufen) zu benennen und zu speichern. Die Zuweisung erfolgt mit einem einfachen\n",
"Gleichheitszeichen <code>=</code>. Durch die Vergabe eines Namens kann anschließend gezielt \n",
"auf den Wert zugegriffen werden."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"#### 1.3.1 Variablennamen\n",
"\n",
"Variablennamen setzen sich aus Buchstaben, Unterstrichen und Ziffern zusammen, wobei Ziffern \n",
"nicht am Amfang des Namens stehen dürfen. Groß- und Kleinschreibung werden vom \n",
"Python-Interpreter unterschieden, d.h. die Bezeichner <code>Abc</code> und <code>abc</code>\n",
"verweisen auf unterschiedliche Werte.\n",
"\n",
"Die *Schlüsselwörter* der Programmiersprache Python, die wir noch kennenlernen werden, sind\n",
"als Variablennamen natürlich nicht zugelassen. "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"pycharm": {
"is_executing": false,
"name": "#%%\n"
}
},
"outputs": [],
"source": [
"var = input(\"Wie heißen Sie?\")\n",
"print(var)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"#### 1.3.2 Konventionen\n",
"\n",
"Nicht alles, was der Python-Interpreter zulässt, ist auch übliche Praxis. Python-Entwickler \n",
"haben sich auf einige Konventionen geeinigt, die das Lesen und Verstehen von fremden \n",
"Programmcode erleichtern:\n",
"\n",
"- Variablennamen sollten keine Großbuchstaben enthalten, also nur Kleinbuchstaben und\n",
" Unterstriche\n",
"- Längere Variablennamen werden durch Unterstriche lesbar gemacht, z.B. \n",
" <code>calculation_result</code>\n",
" "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"#### 1.3.3 Vereinbarung\n",
"\n",
"Variablen müssen in Python nicht deklariert werden. Sie entstehen mit der ersten Zuweisung.\n",
"Anschließend kann auch lesend auf die Variable zugegriffen werden.\n",
"\n",
"Der Zugriff auf eine Variable, die (noch) nicht existiert führt zu einer Fehlermeldung und\n",
"dem Abbruch des Programms.\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [],
"source": [
"print(not_yet_defined)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"#### 1.3.4 Typisierung\n",
"\n",
"Werte besitzen in Python einen Typ (Ganzzahl, Fließkommazahl, String), Variablen jedoch nicht.\n",
"Somit kann eine Variable im Laufe einer Programmausführung mal einen String, mal eine Zahl\n",
"enthalten, ohne dass der Interpreter sich daran stört.\n",
"\n",
"Der Typ eines in einer Variablen enthaltenen Wertes kann mit der Built-In Function \n",
"\n",
"```Python\n",
"type()\n",
"```\n",
"\n",
"ermittelt werden."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [],
"source": [
"print(type(\"Hello\"))"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Seit Python 3.6 können Variable mit *Type Annotations* versehen werden, die aber zunächst \n",
"lediglich den menschlichen Leser von Pythoncode in einer standardisierten \n",
"Form darauf hinweisen, dass diese Variable nur Werte eines bestimmten Typs aufnehmen soll.\n",
"Der Python-Interpreter wird den Code auch bei einem Verstoß ohne Widerspruch ausführen. "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [],
"source": [
"ganze_zahl : float\n",
"ganze_zahl = 4\n",
"print(ganze_zahl)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Allerdings existieren Tools zur statischen Codeanalyse, die diese Hinweise auswerten. Für \n",
"*Visual Studio Code* gibt es z.B. die Extension *Pyright*, die eine entsprechende \n",
"Prüfung nachrüstet.\n"
]
}
],
"metadata": {
"celltoolbar": "Slideshow",
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.9"
},
"pycharm": {
"stem_cell": {
"cell_type": "raw",
"metadata": {
"collapsed": false
},
"source": []
}
}
},
"nbformat": 4,
"nbformat_minor": 1
}
File diff suppressed because it is too large Load Diff
+22
View File
@@ -0,0 +1,22 @@
body.rise-enabled div.inner_cell>div.input_area {
font-size: 150%;
}
body.rise-enabled div.output_subarea.output_text.output_result {
font-size: 150%;
}
body.rise-enabled div.output_subarea.output_text.output_stream.output_stdout {
font-size: 150%;
}
body.rise-enabled div.output_subarea.output_html.rendered_html.output_result {
font-size: 150%;
}
body.rise-enabled td {
font-size: 120%;
}
body.rise-enabled th {
font-size: 120%;
}