261 lines
6.1 KiB
Plaintext
261 lines
6.1 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"pycharm": {
|
|
"name": "#%% md\n"
|
|
},
|
|
"slideshow": {
|
|
"slide_type": "slide"
|
|
}
|
|
},
|
|
"source": [
|
|
"# Software Entwicklung \n",
|
|
"\n",
|
|
"## Kapitel 2: Kontrollfluss"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"pycharm": {
|
|
"name": "#%% md\n"
|
|
},
|
|
"slideshow": {
|
|
"slide_type": "slide"
|
|
}
|
|
},
|
|
"source": [
|
|
"### 2.6 Schleife \n",
|
|
"\n",
|
|
"Häufig möchte man eine oder mehrere Anweisungen wiederholen, solange eine *Laufbedingung* erfüllt ist.\n",
|
|
"Ein solcher Kontrollfluss wird auch als *Schleife* bezeichnet. Sofern die Bedingung geprüft wird, bevor\n",
|
|
"die zu wiederholende Anweisung ausgeführt wird, spricht man von einer *kopfgesteuerten Schleife*.\n",
|
|
"Wird erst nach der Ausführung überprüft, ob eine Wiederholung stattfinden soll, so handelt es\n",
|
|
"sich um eine *fußgesteuerte Schleife*.\n",
|
|
"\n",
|
|
"![kopfgesteuerte Schleife](../img/SchleifeKopf.png \"Kopfgesteuerte Schleife\") "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"pycharm": {
|
|
"name": "#%% md\n"
|
|
},
|
|
"slideshow": {
|
|
"slide_type": "slide"
|
|
}
|
|
},
|
|
"source": [
|
|
"Mit dem Schlüsselwort <code>while</code> wird in Python eine kopfgesteuerte Schleife begonnen. Die Laufbedingung\n",
|
|
"folgt unmittelbar danach abgeschlossen mit einem Doppelpunkt. Die zu wiederholenden Anweisungen werden\n",
|
|
"wieder als eingerückter Block angegeben. Diesen Block nennt man auch *Schleifenrumpf*."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"pycharm": {
|
|
"is_executing": false,
|
|
"name": "#%%\n"
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"a = 1\n",
|
|
"\n",
|
|
"while a < 10:\n",
|
|
" print(a)\n",
|
|
" a = a + 1\n",
|
|
" \n",
|
|
"print(\"Fertig\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"slideshow": {
|
|
"slide_type": "slide"
|
|
}
|
|
},
|
|
"source": [
|
|
"Eine Schleife kann jederzeit abgebrochen werden, wenn im Schleifenrumpf das Schlüsselwort <code>break</code> \n",
|
|
"auftaucht. Die Schleife wird dann sofort verlassen und die Ausführung mit dem nächsten Befehl nach dem Schleifenrumpf\n",
|
|
"fortgesetzt. Aufgrund der besseren Lesbarkeit sollte <code>break</code> eher sparsam eingesetzt werden."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"pycharm": {
|
|
"is_executing": false,
|
|
"name": "#%%\n"
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"a = 1\n",
|
|
"\n",
|
|
"while a < 10:\n",
|
|
" print(a)\n",
|
|
" if a == 5:\n",
|
|
" break\n",
|
|
" a = a + 1\n",
|
|
"\n",
|
|
"print(\"Fertig\", a)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"slideshow": {
|
|
"slide_type": "slide"
|
|
}
|
|
},
|
|
"source": [
|
|
"In Python gibt es zunächst einmal nur kopfgesteuerte Schleifen, jedoch können fußgesteuerte Schleifen\n",
|
|
"recht einfach nachgebaut werden. Auch hier gilt wieder der Verweis auf eine bessere Lesbarkeit durch einen sparsamen Einsatz von <code>break</code>. Endlosschleifen sollten generell vermieden werden."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"pycharm": {
|
|
"is_executing": false,
|
|
"name": "#%%\n"
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"a = 1\n",
|
|
"\n",
|
|
"while True:\n",
|
|
" print(a)\n",
|
|
" a = a + 1\n",
|
|
" if a >= 6:\n",
|
|
" break\n",
|
|
"\n",
|
|
"print(\"Fertig\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"slideshow": {
|
|
"slide_type": "slide"
|
|
}
|
|
},
|
|
"source": [
|
|
"Neben dem vollständigen Schleifenabbruch mit <code>break</code> kann mittels <code>continue</code> auch nur der \n",
|
|
"aktuelle Schleifendurchlauf abgebrochen werden. Aufgrund besserer Lesbarkeit sollte man sich aber immer die Frage stellen, ob sich ein <code>continue</code> nicht auch vermeiden lässt, z.B. durch entsprechende bedingte Ausführungen."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"pycharm": {
|
|
"is_executing": false,
|
|
"name": "#%%\n"
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"a = 0\n",
|
|
"\n",
|
|
"while a < 10:\n",
|
|
" a = a + 1\n",
|
|
" if a % 2 != 0:\n",
|
|
" continue\n",
|
|
" print(a)\n",
|
|
"\n",
|
|
"print(\"Fertig\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"slideshow": {
|
|
"slide_type": "slide"
|
|
}
|
|
},
|
|
"source": [
|
|
"Eine eher selten anzutreffende Variante ist die Verwendung eines optionalen <code>else</code> nach einer \n",
|
|
"<code>while</code>-Schleife. Der <code>else</code>-Zweig wird dann ausgeführt, wenn die Laufbedingung \n",
|
|
"nicht erfüllt ist *und* die Schleife nicht mit <code>break</code> verlassen wird. "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"pycharm": {
|
|
"is_executing": false,
|
|
"name": "#%%\n"
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"a = 5\n",
|
|
"\n",
|
|
"while a > 0:\n",
|
|
" print(a)\n",
|
|
" if a < -1:\n",
|
|
" break\n",
|
|
" a = a - 1\n",
|
|
"else:\n",
|
|
" print(\"Else!\")\n",
|
|
"\n",
|
|
"print(\"Fertig\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"slideshow": {
|
|
"slide_type": "slide"
|
|
}
|
|
},
|
|
"source": [
|
|
"Python bietet zudem eine <code>for</code>-Schleife an, mit der speziell Listen bzw. iterierbare Konstrukte durchlaufen werden können. Wir werden diese im Zusammenhang mit Listen in einem späteren Kapitel genauer betrachten."
|
|
]
|
|
}
|
|
],
|
|
"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
|
|
}
|