221 lines
4.4 KiB
Plaintext
221 lines
4.4 KiB
Plaintext
{
|
|
"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
|
|
}
|