Newer
Older
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Seminar Problemorientierte Programmierung\n",
"\n",

Miriam Brauer
committed
"## Kapitel 3: Funktionen\n",
"[Chapter 3: Functions](http://greenteapress.com/thinkpython2/html/thinkpython2004.html)\n",
"\n",
"**Funktionen** bezeichnen eine benannte Folge von Anweisungen. Wenn wir eine Funktion definieren, dann geben wir der Funktion einen Namen und fügen die Folge von Anweisungen, die die Funktion ausführen sollen, hinzu. Später können wir die Funktion mit ihrem Namen **aufrufen**. \n",
"\n",
"### Ihre Lernziele\n",
"\n",
"Beschreiben Sie in 2-3 Stichpunkten kurz was Sie im Seminar heute lernen wollen. Klicken Sie dazu doppelt auf diesen Text und bearbeiten Sie dann den Text:\n",
"\n",
"- \n",
"- \n",
"- \n",
"\n",
"\n",

Miriam Brauer
committed
"### Exkurs: Was mir an Python gefällt\n",
"\n",
"Es ist sehr leicht, Ergebnisse mit Hilfe eines Plots darzustellen und auch mathematische Funktionen können professionell geplottet werden:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import matplotlib.pyplot as pyplot\n",
"\n",
"# sin(x) und cos(x) zwischen 0 und 2pi\n",
"x = [xx/10 for xx in range(0,int(2*math.pi*10))]\n",
"sinx = [math.sin(xx) for xx in x]\n",
"cosx = [math.cos(xx) for xx in x]\n",
"pyplot.plot(x, sinx, label='sin(x)')\n",
"pyplot.plot(x, cosx, label='cos(x)')\n",
"pyplot.grid(linestyle=\"dashed\")\n",
"pyplot.legend()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [

Miriam Brauer
committed
" \n",
"Warum ist es sinnvoll, ein Programm in Funktionen aufzuteilen?\n",

Miriam Brauer
committed
"Hier einige Beispiele: \n",

Miriam Brauer
committed
"- **Lesbarkeit** - Mit einer Funktion können wir eine Gruppe von Anweisungen benennen und so beschreiben was die Gruppe macht.\n",
"- **Fehlersuche** - Lange Programme in Funktionen aufzuteilen ermöglicht es, das Programm funktionsweise zu debuggen und später zusammen zu setzen.\n",
"- **Testbarkeit** - Analog zur Fehlersuche kann jede Funktion einzeln getestet werden.\n",

Miriam Brauer
committed
"- **kürzerer Programmcode** - Durch Funktionen können Wiederholungen im Quellcode reduziert oder eliminiert werden.\n",
"- **Wartbarkeit** - Dadurch, dass sich Quellcode nicht (bzw. kaum) wiederholt, können Änderungen an nur einer Stelle vorgenommen werden und die Effekte sind im gesamten Programm zu sehen.\n",
"- **Wiederverwendbarkeit** - Eine gut funktionierende Funktion kann in vielen Programmen sinnvoll verwendet werden."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [

Miriam Brauer
committed
"### 3.1 Funktionsaufrufe\n",
"Wir haben schon einige Funktionsaufrufe gesehen:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"type(42)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Der Name der Funktion ist `type`, der Ausdruck innerhalb der Klammern ist das **Argument** der Funktion. Das Ergebnis dieser Funktion ist der Typ des Arguments.\n",
"\n",
"Üblicherweise sagen wir, dass eine Funktion ein Argument \"erwartet\" und ein Ergebnis \"zurückgibt\". Dieses Ergebnis wird auch **Rückgabewert** genannt. \n",
"\n",

Miriam Brauer
committed
"Python stellt einige Funktionen bereit, um Werte von einem Datentyp zu einem anderen umzuwandeln. Beispielsweise erwartet die `int`-Funktion einen Wert als Argument, den sie dann in eine ganze Zahl umwandelt — \n",
"falls möglich (andernfalls beschwert sie sich und gibt einen Fehler aus):"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"int('32')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"int('wassolldas?')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Mit Hilfe der `int`-Funktion können wir zum Beispiel Gleitkommazahlen in ganze Zahlen umwandeln. Allerdings wird dabei der Teil hinter dem Dezimalpunkt abgeschnitten und nicht gerundet:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"int(32.7)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Analog dazu können wir mit der `float`-Funktion ganze Zahlen und Zeichenketten in Gleitkommazahlen umwandeln:"
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"float(6)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"float('32.2')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Und schließlich wandelt die `str`-Funktion Zahlen in Zeichenketten um: "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"str(42)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"str(3.1415923)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Anfangs hatten Sie Gänsefüßchen als \"Markierung\" für Zeichenketten kennengelernt. In Python ist es auch möglich Zeichenketten mit 'einfachen Hochkommata' einzuschließen. Das ermöglicht uns z.B. Sätze mit wörtlicher Rede darzustellen, so zum Beispiel den Satz: 'Da sagte er: \"Heute wird es regnen\" und ging ab.'; umgekehrt können wir mit Gänsefüßchen Sätze wie \"Das wär's gewesen.\" einschließen. \n",

Miriam Brauer
committed
"Probieren Sie beides aus, indem Sie die beiden Sätze jeweils einer Variablen zuweisen und dann mit der `print`-Anweisung ausgeben:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [

Miriam Brauer
committed
"### 3.2 Mathematische Funktionen\n",
Loading
Loading full blame...