123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220 |
- {
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "# Software Entwicklung \n",
- "\n",
- "## Kapitel 5: Module und Pakete\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "### 5.3 Beispiel für eine Turtle-Grafik\n",
- "\n",
- "Unsere Aufgabe ist es, ein Programm zu erstellen, das den \"Baum des Pytagoras\" ausgibt.\n",
- "\n",
- "![Baum des Pytagoras](../img/BaumPytagoras.png \"Baum des Pytagoras\")\n",
- "\n",
- "Dazu erzeugen wir uns zunächst ein Ausgabefeld der Größe 400x400 und zeigen es an."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "name": "#%%\n"
- },
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "outputs": [],
- "source": [
- "from ipyturtle import Turtle\n",
- "turtle = Turtle(width=400, height=400)\n",
- "turtle"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "Dann ist es ganz hilfreich, eine Funktion zu definieren, die an der aktuellen Stiftposition\n",
- "ein Quadrat vorgegebener Größe zeichnet."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "def quadrat(seite):\n",
- " for _ in range(4):\n",
- " turtle.forward(seite)\n",
- " turtle.right(90)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "Die Verästelung des Baums erfolgt ja immer in Form eines rechtwinkligen Dreiecks. Wir bereiten\n",
- "eine Funktion vor, mit deren Hilfe sich aus der Größe des Hauptastes die Größe der Teiläste\n",
- "berechnen lässt."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "import math\n",
- "\n",
- "def teilast(hauptast):\n",
- " return math.sqrt(hauptast * hauptast / 2)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "Nun können wir eine rekursive Funktion definieren, die den Baum zeichnet."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "def baum(seite):\n",
- " if seite < 10:\n",
- " return\n",
- " # Stamm\n",
- " quadrat(seite)\n",
- " ast = teilast(seite)\n",
- " # linker Ast\n",
- " turtle.penup()\n",
- " turtle.forward(seite)\n",
- " turtle.left(45)\n",
- " turtle.pendown()\n",
- " baum(ast)\n",
- " # rechter Ast\n",
- " turtle.penup()\n",
- " turtle.right(90)\n",
- " turtle.forward(ast)\n",
- " turtle.pendown()\n",
- " baum(ast)\n",
- " #zurück zum Ausgangspunkt beim Stamm\n",
- " turtle.penup()\n",
- " turtle.back(ast)\n",
- " turtle.left(45)\n",
- " turtle.back(seite)\n",
- " turtle.pendown()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "Jetzt können wir den Stift an den unteren Rand bewegen und den Baum zeichnen."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "turtle.reset()\n",
- "turtle.penup()\n",
- "turtle.back(180)\n",
- "turtle.left(90)\n",
- "turtle.forward(50)\n",
- "turtle.right(90)\n",
- "turtle.pendown()\n",
- "baum(70)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "pycharm": {
- "name": "#%% md\n"
- }
- },
- "source": [
- "Schön, oder?\n"
- ]
- }
- ],
- "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"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 1
- }
|