Skip to content
Snippets Groups Projects
seminar03.ipynb 49.5 KiB
Newer Older
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Seminar Problemorientierte Programmierung\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",
    "## Exkurs: Was mir an Python gefällt\n",
    "\n",
    "In dieser Rubrik, die immer am Anfang eines Kapitels steht, möchte ich Ihnen zeigen, wofür ich Python nutze und warum ich es mag. Sie werden vielleicht noch nicht verstehen, was ich genau mache, aber Sie sehen damit schon einmal die Möglichkeiten von Python und können später darauf zurückgreifen. Da dies auch ein Exkurs ist, können Sie diese Rubrik gerne auch erst einmal überspringen.\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 math\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": [
    "## 3: Funktionen\n",
    "\n",
    "**Funktionen** bezeichnen eine benannte Folge von Anweisungen. Wenn wir eine Funktion definieren, dann geben wir den Namen der Funktion an und die Folge von Anweisungen. Später können wir die Funktion dann mit ihrem Namen **aufrufen**. \n",
    "\n",
    "### Warum?\n",
    "\n",
    "Warum ist es sinnvoll, ein Programm in Funktionen aufzuteilen?\n",
    "- **Lesbarkeit** - z.B. weil eine Folge von Anweisungen dann einen Namen trägt der beschreibt, was sie tun\n",
    "- **Fehlersuche** - z.B. weil Fehler innerhalb einer Funktion den Suchbereich einschränken \n",
    "- **kürzerer Programmkode** - z.B. weil sich Quellcode nicht wiederholt\n",
    "- **Wartbarkeit** - z.B. weil wir Änderungen nur an einer Stelle durchführen müssen\n",
Prof. Dr. Robert Jäschke's avatar
Prof. Dr. Robert Jäschke committed
    "- **Testbarkeit** - z.B. weil wir jede Funktion einzeln testen können\n",
    "- **Wiederverwendbarkeit** - z.B. weil eine gut funktionierende Funktion in vielen Programmen verwendet werden kann."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Funktionsaufrufe\n",
    "\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",
    "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 - 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 Fließkommazahlen in ganze Zahlen umwandeln:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "int(32.7)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Allerdings wird dabei der Teil hinter dem Dezimalpunkt abgeschnitten und nicht gerundet:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "int(-2.2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Analog dazu können wir mit der `float`-Funktion ganze Zahlen und Zeichenketten in Fließkommazahlen umwandeln:"
   ]
  },
  {
   "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": [
    "Hinweis: Anfangs hatten wir die Gänsefüßchen als \"Markierung\" für Zeichenketten kennengelernt. Es ist auch möglich, Zeichenketten mit einfachen Hochkommata (') einzuschließen - so wie das Python hier gemacht hat. Das ermöglicht uns z.B., Sätze mit indirekter Rede ('Da sagte er \"heute wird es regnen\" und ging ab.') als Zeichenkette auszudrücken. Umgekehrt können wir mit Hilfe der Gänsefüßchen Sätze wie \"Das wär's gewesen.\" einschließen. Probieren Sie beides aus, indem Sie die beiden Sätze jeweils einer Variablen zuweisen und dann mit der `print`-Anweisung ausgeben:"
   ]
  },
Loading
Loading full blame...