Initial push.
This commit is contained in:
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
@@ -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%;
|
||||
}
|
||||
Reference in New Issue
Block a user