{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "# Software Entwicklung \n",
    "\n",
    "## Kapitel 3: Listen und Tupel"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### 3.4 Traversieren \n",
    "\n",
    "Häufig müssen Listen von vorne bis hinten durchlaufen werden, um mit den Elementen der Liste Berechnungen \n",
    "durchzuführen oder Aktionen auszuführen. Dieses Traversieren der Liste kann bereits mit den bekannten \n",
    "Sprachmitteln erledigt werden:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "liste = [3, 7, 4, 9]\n",
    "index = 0\n",
    "while index < len(liste):\n",
    "    print(liste[index])\n",
    "    index = index + 1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "Allerdings bietet Python eine eigene Schleifenkonstruktion für das Traversieren einer Sequenz (wie z.B. einer Liste).\n",
    "Dabei ist nach dem Schlüsselwort <code>for</code> eine Variable anzugeben (hier <code>element</code> genannt),\n",
    "die sukzessive alle Werte annimmt, die in der Liste enthalten sind. Eine Variable für den Index ist nicht mehr nötig.\n",
    " "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "liste = [3, 7, 4, 9]\n",
    "for element in liste:\n",
    "    print(element)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "Neben Listen können z.B. auch Strings mit Hilfe von <code>for</code> durchlaufen werden."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "s = \"Hello!\"\n",
    "for char in s:\n",
    "    print(char)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "Die bekannten Schlüsselworte <code>break</code> und <code>continue</code> können auch bei einer \n",
    "<code>for</code>-Schleife verwendet werden."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "text = input(\"Text:\")\n",
    "vokale = ['A', 'E', 'O', 'U', 'I', 'a', 'e', 'o', 'u', 'i']\n",
    "ergebnis = \"\"\n",
    "\n",
    "for char in text:\n",
    "    if char in vokale:\n",
    "        continue\n",
    "    ergebnis = ergebnis + char\n",
    "\n",
    "print(ergebnis)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### 3.5 Range\n",
    "\n",
    "Möchte man mit einer <code>for</code>-Schleife über einen Zahlenbereich iterieren,\n",
    "so kann mit Hilfe der Built-In-Funktion <code>range</code> eine passende Sequenz \n",
    "erzeugt werden. Der Zahlenbereich startet - sofern nichts anderes angegeben wurde - bei 0\n",
    "und endet so, dass die übergebene Grenze gerade nicht erreicht wird."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "bereich = range(1000)\n",
    "print(bereich)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "Ein *Range* ist keine Liste, da man sich den Speicherplatz für viele einzelne \n",
    "Elemente sparen kann, wenn man die Unter- und Obergrenze kennt. Möchte man eine\n",
    "Sequenz wie *Range* doch in eine Liste umwandeln, so kann die Built-In-Funktion \n",
    "<code>list</code> verwendet werden."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "bereich = range(50)\n",
    "print(list(bereich))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "Ein *Range* kann auch mit Angabe der Untergrenze, der Obergrenze und der Sprungweite angelegt werden."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "unten = 10\n",
    "oben = 20\n",
    "sprung = 2\n",
    "bereich = range(unten, oben, sprung)\n",
    "print(list(bereich))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "Ein *Range* kann von einer <code>for</code>-Schleife durchlaufen werden, ohne dass er zuvor in eine \n",
    "Liste umgewandelt wird."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "for index in range(5):\n",
    "    print(index)"
   ]
  }
 ],
 "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
}
