319 lines
7.2 KiB
Plaintext
319 lines
7.2 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"slideshow": {
|
|
"slide_type": "slide"
|
|
}
|
|
},
|
|
"source": [
|
|
"# Software Entwicklung \n",
|
|
"\n",
|
|
"## Kapitel 2: Kontrollfluss\n",
|
|
"\n",
|
|
"Unter dem *Kontrollfluss* eines Programms versteht man die Reihenfolge der Abarbeitung der\n",
|
|
"Programmbefehle."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"slideshow": {
|
|
"slide_type": "slide"
|
|
}
|
|
},
|
|
"source": [
|
|
"### 2.1 Sequenz \n",
|
|
"Die einfachste Form eines Kontrollflusses ist die lineare sequenzielle Ausführung der Befehle\n",
|
|
"in der Reihenfolge, wie sie auch im Programmcode stehen. Dies ist das \"normale\"\n",
|
|
"Verhalten eines Python-Programms. Ein Zeilenumbruch schließt die Anweisung ab.\n",
|
|
"\n",
|
|
"![Sequenz](../img/Sequenz.png \"Sequenz\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"pycharm": {
|
|
"name": "#%%\n"
|
|
},
|
|
"slideshow": {
|
|
"slide_type": "subslide"
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"print(\"Anweisung 1\")\n",
|
|
"print(\"Anweisung 2\")\n",
|
|
"print(\"Anweisung 3\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"slideshow": {
|
|
"slide_type": "slide"
|
|
}
|
|
},
|
|
"source": [
|
|
"### 2.2 Bedingte Anweisung \n",
|
|
"Gelegentlich ist es notwendig, die Abarbeitungsreihenfolge zu variieren. Im einfachsten\n",
|
|
"Fall sind eine oder mehrere Anweisungen nur auszuführen, wenn eine *Bedingung* erfüllt ist.\n",
|
|
"\n",
|
|
"![Bedingte Anweisung](../img/Bedingung.png \"Bedingte Anweisung\") "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"slideshow": {
|
|
"slide_type": "slide"
|
|
}
|
|
},
|
|
"source": [
|
|
"Eine bedingte Anweisung wird in Python mit dem Schlüsselwort <code>if</code> eingeleitet. Danach folgt ein\n",
|
|
"Ausdruck, der zu einem booleschen Wert evaluiert. Das kann z.B. ein Vergleich sein\n",
|
|
"oder auch eine Variable mit einem Boolean-Wert."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"pycharm": {
|
|
"name": "#%%\n"
|
|
},
|
|
"slideshow": {
|
|
"slide_type": "-"
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"a = 3\n",
|
|
"b = 2\n",
|
|
"c = (a < b)\n",
|
|
"print(\"Anweisung\", c)\n",
|
|
"if c:\n",
|
|
" print(\"Optionale Anweisung\")\n",
|
|
" print(\"Optionale Anweisung\")\n",
|
|
"print(\"Anweisung\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"slideshow": {
|
|
"slide_type": "slide"
|
|
}
|
|
},
|
|
"source": [
|
|
"Die optionale Anweisung folgt nach einem Doppelpunkt. Soll mehr als eine Anweisung optional ausgeführt werden,\n",
|
|
"so müssen diese eingrückt ab der nachfolgenden Zeile aufgeführt werden. Leerzeichen haben in Python also eine\n",
|
|
"Bedeutung!"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"pycharm": {
|
|
"is_executing": false,
|
|
"name": "#%%\n"
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"a = 3\n",
|
|
"b = 2\n",
|
|
"print(\"Anweisung 1\")\n",
|
|
"if a <= b:\n",
|
|
" print(\"Anweisung 2\")\n",
|
|
" if a == b:\n",
|
|
" print(\"Anweisung 3\")\n",
|
|
" print(\"Anweisung 4\")\n",
|
|
"print(\"Anweisung 5\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"slideshow": {
|
|
"slide_type": "slide"
|
|
}
|
|
},
|
|
"source": [
|
|
"### 2.3 Verzweigung \n",
|
|
"\n",
|
|
"Soll nicht nur bei der Erfüllung eine Bedingung optionaler Code ausgeführt werden, sondern auch bei der \n",
|
|
"Nichterfüllung, so spricht man von einer *Verzweigung*.\n",
|
|
"\n",
|
|
"![Verzweigung](../img/Verzweigung.png \"Verzweigung\") "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"slideshow": {
|
|
"slide_type": "slide"
|
|
}
|
|
},
|
|
"source": [
|
|
"Die Alternative, die ausgeführt wird, wenn die Bedingung nicht zutrifft, wird mit dem Schlüsselwort \n",
|
|
"<code>else</code> ergänzt. Auch hier folgt ein Doppelpunkt und die auszuführenden Anweisungen\n",
|
|
"werden eingerückt."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"pycharm": {
|
|
"name": "#%%\n"
|
|
},
|
|
"slideshow": {
|
|
"slide_type": "-"
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"a = 3\n",
|
|
"b = 5\n",
|
|
"print(\"Anweisung\")\n",
|
|
"if a < b:\n",
|
|
" print(\"Optionale Anweisung 1\")\n",
|
|
"else:\n",
|
|
" print(\"Optionale Anweisung 2\")\n",
|
|
"print(\"Anweisung\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"slideshow": {
|
|
"slide_type": "slide"
|
|
}
|
|
},
|
|
"source": [
|
|
"### 2.4 Mehrfachverzweigung \n",
|
|
"\n",
|
|
"Existieren mehr als zwei Alternativen, spricht man von einer *Mehrfachverzweigung*.\n",
|
|
"\n",
|
|
"![Mehrfachverzweigung](../img/Mehrfach.png \"Mehrfachverzweigung\") "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"slideshow": {
|
|
"slide_type": "slide"
|
|
}
|
|
},
|
|
"source": [
|
|
"Sollen mehrere Bedingungen überprüft werden, so können diese mit einer oder mehreren <code>elif</code>-Blöcken \n",
|
|
"ergänzt werden. Ein evtl. vorhandener <code>else</code>-Block wird ausgeführt, wenn keine der Alternativen \n",
|
|
"zum Zug gekommen ist."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"pycharm": {
|
|
"is_executing": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"a = 5\n",
|
|
"b = 2\n",
|
|
"print(\"Anweisung\")\n",
|
|
"if a < b:\n",
|
|
" print(\"Optionale Anweisung 1\")\n",
|
|
"elif a > b:\n",
|
|
" print(\"Optionale Anweisung 2\")\n",
|
|
"else:\n",
|
|
" print(\"Optionale Anweisung 3\") \n",
|
|
"print(\"Anweisung\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"slideshow": {
|
|
"slide_type": "slide"
|
|
}
|
|
},
|
|
"source": [
|
|
"### 2.5 If-Ausdruck\n",
|
|
"\n",
|
|
"Bei einem *If-Ausdruck* ist das Ergebnis von einer Bedingung abhängig. "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"pycharm": {
|
|
"is_executing": false,
|
|
"name": "#%%\n"
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"a = 3\n",
|
|
"b = 2\n",
|
|
"\n",
|
|
"min = a if a < b else b\n",
|
|
"print(min)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"pycharm": {
|
|
"name": "#%% md\n"
|
|
}
|
|
},
|
|
"source": [
|
|
"Die Anweisung unmittelbar vor dem <code>if</code> wird nur ausgeführt, wenn die Bedingung erfüllt ist. Die Anweisung \n",
|
|
"nach dem <code>else</code> wird ausgeführt, falls die Bedingung nicht erfüllt ist. Der <code>else</code>-Zweig\n",
|
|
"ist bei diesem Konstrukt verpflichtend. Insgesamt entspricht das Ergebnis des Ausdrucks dem Wert der ausgeführten Operation.\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
|
|
}
|