Skip to content
Snippets Groups Projects
seminar03.ipynb 40 KiB
Newer Older
  • Learn to ignore specific revisions
  •     "8. Jetzt haben Sie genug Leerzeichen ... aber die müssen ja noch vor die Zeichenkette `s`.\n",
        "9. Sie können Zeichenketten mittels `+` verknüpfen.\n",
        "10. `' ' * 65 + 'monty'` wäre die Zeichenkette, die Sie für 'monty' bräuchten ... aber wie können Sie das allgemein formulieren, so dass es auch für den Parameter `s` (mit beliebiger Länge!) funktioniert?\n",
        "11. Schließlich müssen Sie das Ergebnis noch ausgeben ... nungut, dafür gibt's die `print`-Funktion.\n",
        "12. Alles geschafft? Geben Sie hier ihre fertige Funktion ein:"
       ]
      },
      {
       "cell_type": "code",
       "execution_count": null,
       "metadata": {},
       "outputs": [],
       "source": [
        "def right_justify(s):\n",
        "    # Anzahl Leerzeichen berechnen\n",
        "    anzahl_leerzeichen = \n",
        "    # Zeichenkette erzeugen\n",
        "    ergebnis =\n",
        "    # und ausgeben\n",
        "    print()"
       ]
      },
      {
       "cell_type": "markdown",
       "metadata": {},
       "source": [
        "Macht ihre Funktion auch wirklich, was sie soll? Ein paar Ideen zum Testen:\n",
        "- Zählen Sie die Leerzeichen bis zum Wort. Das ist schwierig, da Leerzeichen schwer zu sehen sind. Also tauschen Sie doch das Leerzeichen durch ein anderes Zeichen, z.B. einen Punkt aus.\n",
        "- Jetzt sind es bei kurzen Wörtern recht viele Punkte ... als Abhilfe könnten Sie statt in der 70. Spalte alles rechtsbündig in der 10. Spalte ausgeben, also 70 zu 10 ändern. Dann lässt es sich leichter zählen.\n",
        "\n",
        "Wenn Ihre Funktion so richtig funktioniert, dann sollte sie auch mit Leerzeichen und Spalte 70 korrekt funktionieren. Das ist auch Debugging und Testen - es ist wichtig, um Fehler zu finden und hilft Ihnen, mit Ihrem Programm vertrauter zu werden.\n",
        "\n",
        "Abschlussfrage: was passiert, wenn Sie die Funktion mit einer Zeichenkette aufrufen, die länger als 70 Zeichen ist? Probieren Sie es aus:"
       ]
      },
      {
       "cell_type": "code",
       "execution_count": null,
       "metadata": {},
       "outputs": [],
       "source": [
        "right_justify('Abschlussfrage: was passiert, wenn Sie die Funktion mit einer Zeichenkette aufrufen, die länger als 70 Zeichen ist?')"
       ]
      },
      {
       "cell_type": "markdown",
       "metadata": {},
       "source": [
        "#### Aufgabe 2\n",
        "\n",
        "Ein Funktionsobjekt ist ein Wert, den wir einer Variable zuweisen können oder auch einer Funktion als Argument übergeben können. Zum Beispiel ist `do_twice` eine funktion, die ein Funktionsobjekt als Argument erwartet und die Funktion dann zweimal aufruft:"
       ]
      },
      {
       "cell_type": "code",
       "execution_count": null,
       "metadata": {},
       "outputs": [],
       "source": [
        "def do_twice(f):\n",
        "    f()\n",
        "    f()"
       ]
      },
      {
       "cell_type": "markdown",
       "metadata": {},
       "source": [
        "Im Folgenden ein Beispiel, in dem die Funktion `do_twice` genutzt wird, um die Funktion `print_spam` zweimal aufzurufen:\n",
        "\n",
        "```python\n",
        "def print_spam():\n",
        "    print('spam')\n",
        "\n",
        "do_twice(print_spam)\n",
        "```"
       ]
      },
      {
       "cell_type": "markdown",
       "metadata": {},
       "source": [
        "(Tipp vorab: Mit der Tastenkombination `SHIFT STRG -` können Sie so eine Box hier teilen - also `SHIFT` und `STRG` gleichzeitig gedrückt halten und dann die Minustaste drücken. So können Sie die Ihren Code direkt hinter jeder der folgenden Teilaufgaben einfügen.) "
       ]
      },
      {
       "cell_type": "markdown",
       "metadata": {},
       "source": [
        "1. Geben Sie dieses Beispiel in eine Code-Box ein und testen Sie es.\n",
        "2. Ändern Sie `do_twice`, so dass \n",
        "  - es zwei Argumente erwartet: ein Funktionsobjekt und einen Wert und\n",
        "  - die übergebene funktion zweimal aufruft und ihr den Wert als Argument übergibt.\n",
        "3. Rufen Sie mit der geänderten Funktion `do_twice` die Funktion `print_twice` (die wir weiter vorne definiert hatten) auf und übergeben Sie ein Wort Ihrer Wahl als Argument.\n",
        "4. Definieren Sie eine Funktion `do_four`, die ein Funktionsobjekt und einen Wert erwartet und die übergebene Funktion viermal aufruft und ihr dabei den Wert als Parameter übergibt. Die Funktion `do_four` sollte dabei aus nur zwei Zeilen im Rumpf bestehen, nicht aus vier!\n",
        "\n",
        ".\n",
        "\n",
        ".\n",
        "\n",
        "Die Lösung finden Sie hier: http://thinkpython2.com/code/do_four.py"
       ]
      },
      {
       "cell_type": "markdown",
       "metadata": {},
       "source": [
        "#### Aufgabe 3\n",
        "\n",
        "Lösen Sie die folgende Aufgabe: http://greenteapress.com/thinkpython2/html/thinkpython2004.html#hevea_default261"
       ]
      },
      {
       "cell_type": "markdown",
       "metadata": {},
       "source": [
        "#### Bonusaufgabe\n",
        "\n",
        "aus der Vorbereitung zur Vorlesung"
       ]
      },
      {
       "cell_type": "markdown",
       "metadata": {},
       "source": [
    
    Prof. Dr. Robert Jäschke's avatar
    Prof. Dr. Robert Jäschke committed
        "![Speichern](https://amor.cms.hu-berlin.de/~jaeschkr/teaching/spp/floppy.png) Speichern Sie dieses Notebook, so dass Ihre Änderungen nicht verlorengehen (nicht auf einem Pool-Rechner). Rufen Sie dazu im Menü \"File\" den Punkt \"Download as\"->\"Notebook\" auf und nutzen Sie beispielsweise einen USB-Stick, E-Mail, Google Drive, Dropbox oder Ihre [HU-Box](https://box.hu-berlin.de/).  "
    
       ]
      },
      {
       "cell_type": "markdown",
       "metadata": {},
       "source": [
        "![Smiley](https://upload.wikimedia.org/wikipedia/commons/thumb/3/33/Smiling_smiley_yellow_simple.svg/240px-Smiling_smiley_yellow_simple.svg.png)\n",
        "\n",
        "Herzlichen Glückwunsch! Sie haben das 3. Kapitel geschafft. Weiter geht es in [5: Bedingungen und Rekursion](seminar05.ipynb)."
       ]
      }
     ],
     "metadata": {
      "language_info": {
       "name": "python",
       "pygments_lexer": "ipython3"
      }
     },
     "nbformat": 4,
     "nbformat_minor": 2
    }