You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

052a Uebung Turtle.ipynb 4.4KB

2 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. {
  2. "cells": [
  3. {
  4. "cell_type": "markdown",
  5. "metadata": {
  6. "slideshow": {
  7. "slide_type": "slide"
  8. }
  9. },
  10. "source": [
  11. "# Software Entwicklung \n",
  12. "\n",
  13. "## Kapitel 5: Module und Pakete\n"
  14. ]
  15. },
  16. {
  17. "cell_type": "markdown",
  18. "metadata": {
  19. "slideshow": {
  20. "slide_type": "slide"
  21. }
  22. },
  23. "source": [
  24. "### 5.3 Beispiel für eine Turtle-Grafik\n",
  25. "\n",
  26. "Unsere Aufgabe ist es, ein Programm zu erstellen, das den \"Baum des Pytagoras\" ausgibt.\n",
  27. "\n",
  28. "![Baum des Pytagoras](../img/BaumPytagoras.png \"Baum des Pytagoras\")\n",
  29. "\n",
  30. "Dazu erzeugen wir uns zunächst ein Ausgabefeld der Größe 400x400 und zeigen es an."
  31. ]
  32. },
  33. {
  34. "cell_type": "code",
  35. "execution_count": null,
  36. "metadata": {
  37. "pycharm": {
  38. "name": "#%%\n"
  39. },
  40. "slideshow": {
  41. "slide_type": "slide"
  42. }
  43. },
  44. "outputs": [],
  45. "source": [
  46. "from ipyturtle import Turtle\n",
  47. "turtle = Turtle(width=400, height=400)\n",
  48. "turtle"
  49. ]
  50. },
  51. {
  52. "cell_type": "markdown",
  53. "metadata": {
  54. "slideshow": {
  55. "slide_type": "slide"
  56. }
  57. },
  58. "source": [
  59. "Dann ist es ganz hilfreich, eine Funktion zu definieren, die an der aktuellen Stiftposition\n",
  60. "ein Quadrat vorgegebener Größe zeichnet."
  61. ]
  62. },
  63. {
  64. "cell_type": "code",
  65. "execution_count": null,
  66. "metadata": {
  67. "pycharm": {
  68. "name": "#%%\n"
  69. }
  70. },
  71. "outputs": [],
  72. "source": [
  73. "def quadrat(seite):\n",
  74. " for _ in range(4):\n",
  75. " turtle.forward(seite)\n",
  76. " turtle.right(90)"
  77. ]
  78. },
  79. {
  80. "cell_type": "markdown",
  81. "metadata": {
  82. "slideshow": {
  83. "slide_type": "slide"
  84. }
  85. },
  86. "source": [
  87. "Die Verästelung des Baums erfolgt ja immer in Form eines rechtwinkligen Dreiecks. Wir bereiten\n",
  88. "eine Funktion vor, mit deren Hilfe sich aus der Größe des Hauptastes die Größe der Teiläste\n",
  89. "berechnen lässt."
  90. ]
  91. },
  92. {
  93. "cell_type": "code",
  94. "execution_count": null,
  95. "metadata": {
  96. "pycharm": {
  97. "name": "#%%\n"
  98. }
  99. },
  100. "outputs": [],
  101. "source": [
  102. "import math\n",
  103. "\n",
  104. "def teilast(hauptast):\n",
  105. " return math.sqrt(hauptast * hauptast / 2)"
  106. ]
  107. },
  108. {
  109. "cell_type": "markdown",
  110. "metadata": {
  111. "slideshow": {
  112. "slide_type": "slide"
  113. }
  114. },
  115. "source": [
  116. "Nun können wir eine rekursive Funktion definieren, die den Baum zeichnet."
  117. ]
  118. },
  119. {
  120. "cell_type": "code",
  121. "execution_count": null,
  122. "metadata": {
  123. "pycharm": {
  124. "name": "#%%\n"
  125. }
  126. },
  127. "outputs": [],
  128. "source": [
  129. "def baum(seite):\n",
  130. " if seite < 10:\n",
  131. " return\n",
  132. " # Stamm\n",
  133. " quadrat(seite)\n",
  134. " ast = teilast(seite)\n",
  135. " # linker Ast\n",
  136. " turtle.penup()\n",
  137. " turtle.forward(seite)\n",
  138. " turtle.left(45)\n",
  139. " turtle.pendown()\n",
  140. " baum(ast)\n",
  141. " # rechter Ast\n",
  142. " turtle.penup()\n",
  143. " turtle.right(90)\n",
  144. " turtle.forward(ast)\n",
  145. " turtle.pendown()\n",
  146. " baum(ast)\n",
  147. " #zurück zum Ausgangspunkt beim Stamm\n",
  148. " turtle.penup()\n",
  149. " turtle.back(ast)\n",
  150. " turtle.left(45)\n",
  151. " turtle.back(seite)\n",
  152. " turtle.pendown()"
  153. ]
  154. },
  155. {
  156. "cell_type": "markdown",
  157. "metadata": {
  158. "slideshow": {
  159. "slide_type": "slide"
  160. }
  161. },
  162. "source": [
  163. "Jetzt können wir den Stift an den unteren Rand bewegen und den Baum zeichnen."
  164. ]
  165. },
  166. {
  167. "cell_type": "code",
  168. "execution_count": null,
  169. "metadata": {
  170. "pycharm": {
  171. "name": "#%%\n"
  172. }
  173. },
  174. "outputs": [],
  175. "source": [
  176. "turtle.reset()\n",
  177. "turtle.penup()\n",
  178. "turtle.back(180)\n",
  179. "turtle.left(90)\n",
  180. "turtle.forward(50)\n",
  181. "turtle.right(90)\n",
  182. "turtle.pendown()\n",
  183. "baum(70)"
  184. ]
  185. },
  186. {
  187. "cell_type": "markdown",
  188. "metadata": {
  189. "pycharm": {
  190. "name": "#%% md\n"
  191. }
  192. },
  193. "source": [
  194. "Schön, oder?\n"
  195. ]
  196. }
  197. ],
  198. "metadata": {
  199. "celltoolbar": "Slideshow",
  200. "kernelspec": {
  201. "display_name": "Python 3 (ipykernel)",
  202. "language": "python",
  203. "name": "python3"
  204. },
  205. "language_info": {
  206. "codemirror_mode": {
  207. "name": "ipython",
  208. "version": 3
  209. },
  210. "file_extension": ".py",
  211. "mimetype": "text/x-python",
  212. "name": "python",
  213. "nbconvert_exporter": "python",
  214. "pygments_lexer": "ipython3",
  215. "version": "3.9.9"
  216. }
  217. },
  218. "nbformat": 4,
  219. "nbformat_minor": 1
  220. }