Newer
Older
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Code Review\n",
"\n",
"<br/>\n",
"<br/>\n",
"\n",
"Dieses Notebook finden Sie hier: https://scm.cms.hu-berlin.de/ibi/python/-/blob/master/programmierspass/Code_Review.ipynb\n",
"\n",
"<br/>\n",
"\n",
"\n",
"\n",
"Dieses Notebook ist als freies Werk unter der Lizenz [Creative Commons Attribution-NonCommercial 3.0 Unported](http://creativecommons.org/licenses/by-nc/3.0/) verfügbar. Sie dürfen die Inhalte kopieren, verteilen und verändern, solange Sie die Urheber nennen und sie nicht für kommerzielle Zwecke nutzen."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Was ist es und worum geht es?\n",
"\n",
"**Code Review** soll primär **Codequalität sichern**, aber auch\n",
"- Code **verbessern** \n",
" - *Lesbarkeit* und *Verständlichkeit* prüfen und verbessern\n",
"- Code **verstehen**, **lernen**\n",
"- bessere Lösungen finden\n",
"- Gefühl gemeinsamer Verantwortung aufbauen/stärken"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- *Fehler* finden und beseitigen →\n",
" 1. Syntaktische Fehler\n",
" 2. Laufzeitfehler\n",
" 3. Semantische Fehler\n",
"- *Lesbarkeit* und *Verständlichkeit* prüfen und verbessern →\n",
" 1. Programmierstil"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Methoden\n",
"1. Pair Programming → z.B. IKT-Programmierkurs\n",
"2. \"The Wisdom of the Crowds\" → Entwicklung Freier Software\n",
"3. [IEEE Standard for Software Reviews and Audits (IEEE STD 1028-2008)](https://doi.org/10.1109%2Fieeestd.2008.4601584):\n",
" - Management reviews\n",
" - Technical reviews\n",
" - Inspections\n",
" - Walk-throughs\n",
" - Audits\n",
" \n",
"*Wir schauen uns heute viele (kleine) Codebeispiele an, um [aus deren Fehlern zu lernen](https://de.wikipedia.org/wiki/Lernen_aus_Fehlern).* "
"metadata": {},
"source": [
"## Syntaktische Fehler"
]
},
{
"cell_type": "markdown",
"Beginnen wir mit ein paar Beispielen ..."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"a := 4"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"'a' = 1"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"a() = 1"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"pass = 1"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def pass():\n",
" print(\"pass\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import keyword\n",
"print(keyword.kwlist)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"iff a == 0:\n",
" print(\"a ist zu klein\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"if a == 0:\n",
"print(\"a ist zu klein\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"if a == 0:\n",
" break"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"a = 4 * (3 + 2"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"a = 'Mir gefällt's hier'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"\n",
"[Randall Munroe](https://xkcd.com/859/) / [CC-BY-NC](https://creativecommons.org/licenses/by-nc/2.5/)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**syntaktische Fehler**\n",
"- Code verstösst gegen Syntaxregeln (\"Grammatik\") der Sprache (Python → https://docs.python.org/3/reference/grammar.html)\n",
"- hauptsächlich bei Anfänger:innen\n",
"- häufig: fehlende/flasch gesetzte Doppelpunkte, Kommata, Klammern, etc.\n",
"- müssen beseitigt werden, damit Programm überhaupt lauffähig ist (\"geparst\" werden kann)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Auch ein syntaktisch korrektes Programm kann Fehler bei der Ausführung verursachen:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"print(a + b)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"print(Hallo)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"→ Syntaxfehler können auch zu Laufzeitfehlern führen, werden aber vom Parser nicht als Syntaxfehler erkannt."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"a = [\"a\", \"b\", \"c\"]\n",
"print(a[3])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"a = {\n",
" \"title\" : \"The Art of Computer Programming\",\n",
" \"author\" : \"Donald E. Knuth\"\n",
"}\n",
"print(a[\"publisher\"])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"a = \"Das Quadrat von 1234567 ist \" + 1234567**2"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"a = \"Das Quadrat von zwei ist \" + int(\"vier\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"23 / (1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 - ((9*10)/2))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def rekursion():\n",
" rekursion()\n",
"rekursion()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"while 2 == 2*1:\n",
" a = a * 2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Semantische Fehler\n",
"\n",
"Diese werden nicht vom Interpreter erkannt und können beliebig komplex werden:"
]
},
{
"metadata": {},
"outputs": [],
"source": [
"pi = 3"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"wochenstunden = 40 * 4"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"gerade_zahlen = [i for i in range(1,10,2)]\n",
"gerade_zahlen"
]
},
{
"attachments": {
"6uamyn5m8n721.png": {
"image/png": "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CiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgIHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDowZjk5ZmZiZi03ODRkLTQ1ZTQtYjA0Yi0yOTMwZWRjNDY4OTAiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ZDg5MjE5MDgtYTY4OC00ZGQ2LTg3NjMtMmM0Mjc4MGZhZTNjIgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6YmRjZDZhYWQtOGJiMy00ZmIxLWJmNTAtOTFiNTZmYmM0ZDBjIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2NzI5MzUxNjY0MTQyOTUiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4yMiIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPGlwdGNFeHQ6TG9jYXRpb25DcmVhdGVkPgogICAgPHJkZjpCYWcvPgogICA8L2lwdGNFeHQ6TG9jYXRpb25DcmVhdGVkPgogICA8aXB0Y0V4dDpMb2NhdGlvblNob3duPgogICAgPHJkZjpCYWcvPgogICA8L2lwdGNFeHQ6TG9jYXRpb25TaG93bj4KICAgPGlwdGNFeHQ6QXJ0d29ya09yT2JqZWN0PgogICAgPHJkZjpCYWcvPgogICA8L2lwdGNFeHQ6QXJ0d29ya09yT2JqZWN0PgogICA8aXB0Y0V4dDpSZWdpc3RyeUlkPgogICAgPHJkZjpCYWcvPgogICA8L2lwdGNFeHQ6UmVnaXN0cnlJZD4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NzkyMWFjZDctNjkwYi00MjYxLTk0MTAtMmNlYzU1NDk5MzBkIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iKzAxOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICAgPHBsdXM6SW1hZ2VTdXBwbGllcj4KICAgIDxyZGY6U2VxLz4KICAgPC9wbHVzOkltYWdlU3VwcGxpZXI+CiAgIDxwbHVzOkltYWdlQ3JlYXRvcj4KICAgIDxyZGY6U2VxLz4KICAgPC9wbHVzOkltYWdlQ3JlYXRvcj4KICAgPHBsdXM6Q29weXJpZ2h0T3duZXI+CiAgICA8cmRmOlNlcS8+CiAgIDwvcGx1czpDb3B5cmlnaHRPd25lcj4KICAgPHBsdXM6TGljZW5zb3I+CiAgICA8cmRmOlNlcS8+CiAgIDwvcGx1czpMaWNlbnNvcj4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PtDsLlkAAAAJcEhZcwAALiMAAC4jAXilP3YAAAAHdElNRQfnAQUQDC6hbrmrAAAgAElEQVR42uy9d5QlV3Xvv/c+51TVTZ1zmpxz0iRppFFCKCDJCDDBYESwWQhwAD+/ZxzxwzbP2D8/r2UbszAIkIQBIX5EEYSEpNEESaNJPblnpqdzDjdVOOfs3x/VM5LQjCwB+nlg6rPuaql77u1bXbfOt3Y6e2PHks2QkJCQ8JpBySlISEhIVCYhISFRmYSEhIREZRISEhKVSUhISFQmISEh4bVWGQROzlpCQsIrR75KiQFkiwAAyAgM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HJ/fuu0vt32/eSsReSMupRcTzsbQRx99vP/AgXPPPad9uxQiLZCJdHJi3OVTplZUVi9/a7m3AccmzSc82MHisoqsHdt79OhxzsSzLCkaUqRZSnH+eed279Fz+9YfC4pKm5r6TWHb1owZU+fePSejfZrrul5HDDEzae0QMx6SzcRhx0HE6JgoLwclO2fv+nXrRo0aOXTIQARWUiByTLT/iiunKyVffWWpN1OxMb/9t9sxofBpQkImZJYQ1rqwrPLztV9cfPGFwLBw8eOhIPtElOPUITMb0kSahRAMQv6wZWvWrqw/XHKJ44RXvv+RYWUMCYHonW6yV08BGRQxhF0ywm0sQ4MgmPH1N9/p27/f+Rec6zqGADXDJ6tXv//BB+Mnjo9v3erDDz/My8sbMGDA2eec61P42quvGO0aY4rLqnL25p96+tiCgpKtO7eHjQsSSqtqdu/JOfHk0RVV1d/98COAlwAEDSsaNW5dG803TWAjkECNBCQZxMdr1q5Y+f6ZZ59tx8St+uSTgoIDQwYNOuecs/0++6mnngqFg2tWrxk+fPhdf73j2WefKysr7d2796RJk7Kzdx/Xqb2yGIRLoAwDoyAEiUAMP/647esvv5r0P2e7bt3qNau1q4cNH3bxxRdl7czasH7DwRQWRs2sGTQDSstL1DSAn3z25bsrP5hw3tlRrWI//2xNXs7efn37nXf+eYjmhReer6mpemfFij//5c9z777z+eeez8vLS2idcPHFF6Wnpb217M1gKPTVl1+89+4755wzITZ6/gcffFBQWDho4IBzzj+/pi60eMmTIU1+n60ZgAUJdti88tqy+/42+J777nn9tdd27drVsWOnSRdckJ2dk57eTgiFgl3XLSosGjho8PTp07/77rs1n31uGDUDC4nK/uyLr5evWDnuzNMfjolauXJlSXHx8BEjJkyYGArXPvrogpAb0iAMo2EQqj4c0YsVIhCaheX5txr1pz4DRRlGAkszSwmVNcFHFixesODv8/7+wOuvv75x06b09LQxY8YMHz787bdWfP7VOmn7CAQIYBAMqNmgkA2JrwRADJSa0nruPXd06dxh6Uuv9unZp2e3Xkopr3ASMNfU1r2+bEXQhaKCipdeeOW6WdcuWvjIc889s3v3rvTMjIsu+n3/fr2WLHkyKzsPWLIRXkEmAAahDAOhIFRMbBz92IIFjzz88F/++Meh/ft/9NFHFeUVCQkJZ5w5bsTIUYXFFQseWUgESI1yACmAmYhZCAwFg++tXPnn22677/57/vGPp/bn5yUmJ1944YVt2rR59ZXXtHaZAUAhIKMLyAcKCqvr6sZNOKuwtGj3zl1btm5f9OiCxYsXzXvwgWXLlm3atCm5Tcqpp502ZOiQ5cvf+eLLdVgvf4bfmGXQ1RpRa1cDsDEaACzLXvrq0tPHnlZSUvr5518QAQApZQGx67jGGMPEhqTCyuqaz9euvfrKK9esWb03v8DzGnopME0O4wQzhh3XGGq6qniHxK5rHpq/sHuPnp06ZXr2lKvpvvvuLywsHD9+/MhRI5kRGLZu/fGhhx5Z+8WXRCSlNEQff7J6yLCh2Tl7ikrLGo2j997/aPTvRm/8dntJWWXLQY1NzryItNGGiJgQBDM7rrnrr/fm7M0/99yzx4wZoxQ4ITdrZ9a99/ztq682CrT/ueyd5OTUiWef88gjDxvistKy995b+dVXX48cNZKoPqAiGHKpoSAfM9fU1t137/03zp71h0sumTZjOgKEQs6GDRsWPPJIaXl10yFjBgR0HLe++JC3DQm599z/QFFJ0bjx4373uzGCgBi2bN48/+/zv/jia58v8PaKlT6/f9KkSfMfelhZQrtm//79jz225OVXXwOQBsR9f5tXUFR01sSJf7njdiFEKBT6/vsf5j/0yI/bs1ytfbZtjBFSMzMgrnz/w3bpaRdeeMENN8yybVVZVbPqk49Xr/508OCBUigvivqFF17p2KnrJZdefNFFF5xz7nkM4GqXmLXWaNt333vfvv37Ljj/nLlzR6DAUMjZ+uOWeQ/M27J1GzMaYmYIhd1Dj2UQEY3WzIYP3Th6HhbH0V6BGa21lGrj9z9ef92s2TfO+sOll06fMcMQlRQXL3x00UsvvxJ2tdGGDIeC2hhvugpjtBD2wRN3KXr16tnpuOOIadL/XKAkGmJgFhKZEBFKSsrXfPrF3vxCZn7xxaXG6Esv+/0dd9whldRERSUlixc/9tiSpwxxQ6K8Z+ZrYygY1trUx5prY7b8mHXddbOmTp029oxxZ02cQAyIXFcb+njV5888/ey2HbstpZzGdDZGQyhQuY5mEgBy+dvvR8fETTr/vEceeRgFCoSc3PxHFyx+/Y1lWhshFdDBWoLZufmvv/7GhIkT595999o1n8686rrvf/jxiitm3njjjRdf/Iep06Yx0YGi4scWLXnxpVeZ8VcHvmCbjF5H9QXLVonxMZZlHSgq1a5GIZhZCmyfnhQOufsLyn12lONqIscfkJnpqYUl1ZU1QWQmdgXAVVdOu/66q2/+481vvfMxcP1B2iHeGWRLyQ4Z7YqKyyqra5uWJ0IURAZRJLeOi28Vsyf3ACBKia7rSiWTWyckJ7VuFZ9QVFiQv78wGHaJyNtDCYF+n699uzZV1bUFxWVNqgTY7dPaVNeEDhQU1Qf7Nhvt3IB2KYlCiPwDxQKRqMHRgCwQ2iQlJLdJjo2NKSspz99XUF1TJ5VEAFdr27bbpSSltk1h5sLCorx9+y3LykhLzT9QGA67gYA/rW1Kdm6eNl5ThdZaKeWzVds2Sa0TE30+X2HBgX0FxaFQGBCZ8NBcYbt9Wps9OftcLRpz1oUE2xKt42OTkpNiY1uXl5XtzcuvDYaZyLIsbbSlrJjoQGpKm8TExMrKioKCouLScm8gGNhSlkBMTGiVmJQQFRVdXFRcXFJWG3K01lIIYmqXkiSl2F9YSkTAhIhpbZNTUtv6bF9RUWHevgPAnJGelr03nxi9AkutYqOSkxMFiqw9e4XAjLSU/QUltcEQIiCgENgmKSEhISE+IaFg//7C4pKwo7XWDCBQBXxWelrKnpx9blOXBHK7lCRE3F9Y3FR9BErbkhnpKXn7ioIhp/6cC0EKiImOSmod3yYlJRgMFhYWllfVOGHXO7GK8vvapibn7St0XF0vB5aNJQ2FYNsS6WkpCCBQNlRoPehx0q7ZnVNgWZbjOszGsmVyYqtOx3VsnRBfXlGRm5O7N/9AwB8dDmsA2XjmxswxUf62qUm5eQXaUH1GOxsvyqFD+3aJiYkJrZNKiotKSkrzDxSFw66XG900cFQIYUnskNEub19hMOz4bCsUdpIT45OTWyW3aVNWWlZYWFxcWmGIpVRMDKA8jkNk25bGOGntUqKjoysravP3F1i2bbQO+H2pbZLapKTUVFeWV1QWFpe5Wtu2z3X1r8swOGqWaSxuIKX0/OSeL8MYx+/zh8PGtvyhcFhZAkAbMiAsZkAmBk5sFfP0M0/6bfvSP1xeVF6DgEeeHAsBgFhvix521gOgpHRc17Is46mgEJaSrqu9cCNu9FoRIYKQgokA0Su/4K29h6bwopRCa+OFG/8sy0DD86WQzOg9DwFAeEfgBgDJIKJQUmqjoaGDzOQdPBmjpVTUUJiCmYVEozWiENIL6hPGGCmEq42SqtEb7aUgI+BhZ7dYH3ULXrBpQ0ATMxvbtohIoBUKhS3LMsYo1WA2MlCTkheI6FU1ZARpKcd1lbK0dr1AFU9KYIxlWeFw2LZtreunoneoIbC+VoYXdoFCMBGD8KpteFxvWZbrOgG/38tQbTjOYynqBw4AyVBDlUJJxMwE9f4mT4Z8iEpgQ7GOI/TE+7tXUMIY8t7lfd1n247rIiKTYUAvtNoYY9u267ree6WU2nVRWI3yFNLzQhoGACmMISmFIZJCIKLWRknFWnjVMJg1oJenLgDIi9P1+/xhR8NBcwCBjSHjCbMhmAhd1xW2MoaUkq7reg5EZSkgr6QKIILAQ8LTGdArbcNMSiqtNSBIIQyHiYxlWcxoDPts2xgyhprqCQNJgUIiE2mNllLETGS8Eawv5ogkpNSa/H6fE3Yb08ePqkrcUbNMi15h4cWWyybdJwDQhqSUiQmtThgx/NQxo8aceuriRxY+/sRTBuSxeS+K5v/8y8phNBcg8wtDn5vWmW704TKD1Rzft1Rkt8V2ttAvwBZDb8XBsMmD5IjcYq25Fip4IdARAeQCQFJzhXablHRsJgLg50n7X+nvMdGTo5UnaNGcfBjkQc0/5PPIh8QbHP7YI2RmUDQrf8XUrDOEvXq4R0oZnUM60liJkw/vF9bXf2y+PjSCgUNqeTamg9NvmsckWghQPqL6OXuLMEklhwweePc9d9VW173w3Esvvbz0Jzd4osWY46P7+y/aQ/LB4T/a5zTN5uDGFEaAZgJDDg9o/Jf6+8sGqL4UMcNRVtVGaIb+EQCbbedPEfSxqTT62+vJ0clT8M/uGZp+/uj8pMhePbbmYql/ytbmZmMbAPhQihHNtpN/Rk8Oo5hf45r5FbZM868hxGaXNaXAccNxgUD79HbB2lBBUQkYJibT4mAdnfaQ4GYj3Fuo3f8rtLylNVBxfUH1pv8FwpZWcYajaCeToBb6hb94dAQAkzi6uootcmoL8iSkFvorWuhv88I5+v4eKz05OnkyNr+GEx7xeRZeRN0RraKf3xM0I/+W7q5oSd+oSSV/aCjli4LpIPv8nJ4cKh9xqC2jf+Oc7BZZFesv0/Baw8gAWrsCsDYY3rk7lw0rpRrqbB+rG3OaK6t9rC45+qm3Ni4XhwWctvRuhqNr57/Sr6Z3EhH+cmG0eHsK/uzLjiLa6j8zjsdGni3t+A55OB95J9QvvSWqhR00/uSs+2XDwnjUetLM9UzwK4pqHzO/TKO//fC/IB+t3XjU7zw6bf4tXszHvp3/ar/wZxwh8J+S239oHI+VPI/6dsP/JfJteYb+hJ7wvy6HY23LNL8//K0F+x8bOP5t28nHqHn/ccX+XzKO/G/+Pv+XSPlo9eTX9CtyT3YEEUTw2yLCMhFEEEGEZSKIIIIIy0QQQQQRRFgmgggi+M9AHePn4TFxruOhFUQabvk9Zk1sBP/6/rR0UonNthaP8gSUm3lOvSiaLe7BLUcxtBCp8VudtP7cSWeLw9iksPwvaUZjHSL+f+y9d3hdxdE/PjO759yiLlmyimVZcu82tim2wcaAAdOLIZTQHFreN2/oECAJeZM3DUhCqAkhFEPAQGiB0FwAYxv33pskq8vquuWcs7vz++NcyTJYBjt5y/eXO899ePDVuXv27NmdnZ35zGf+sff1j0yfw7WD/8Qx/ZfTMgbpUKRC7Ke/EEnleZjI/vIT3g6FGWWg3njJELvmEHcnxQIDsTw0RhYPiSRDMofM30EDorv6bReGkBEAtRFIhtBohgRoEwFAIvt0lsYYSwqfPwwJDZpDdQcSdWp8KoZEdtzhEVmmh1GJPZ7LBfSzNPwivD780yAQodCKkSQzEzGD0VoTCwQ0xti27R1ge0QG6RcxF2DQL9ZtAIVgVodECX4dFvbwRjH2eI+6t9StQy3U7iLoBExdFKgATHTIPCNkgwaQe1xMiZqloHvB5h4SFQmHZYM95A/0140bHfxzlVQ0R2PLHGrMEEm4rhsICBLo58sqpYkOnaqHh9vaiX2UDULP7PrD2BpfnT54uB/xIae5IMjPzQIha+qa/Lw0RgZGn1QREUJBW5CIu66fjMtdac2H2r+wh4o5ouwy7rliuxIdiYEB0RgtBAUsmd8n17aDeytrtAZPeeGQVVRcIFBW1dRHY446uJKGX/jHN7Ly83JAUFV9kzK6J8/+19sZRzY1qIdR940tCMQeizMBiu99niAA+mTkXSqGwOcMPLRWSrz4IzGuev/+68etJy48KUfBldfL9EHDAtAoD4kI0RhjC4mIWh+ZIu/KPzA+ma2/rx/mrSPQkaBbGf00aN9WSlAOAACEg8Hf/PZBsgNzrruprTMKYAAI0PiLNGjbP37g3qzM7Lvv+kFLe6efzk+H7BIftE4AAFkAGv6mrrFu88rPm/PXD7MytmUXFfS5/4f3HTN+vG1b/3bz95cuWzGwpPje++6ZNGkCAt1+210LFn32Fepi/xk5FAw8/NsHZcC++pobO6JxMP+sDfaQ/QfsYsU4lI7hXmyH7gH03zv1nsENeIDsHbp47agrQ4cPdX1vPJJ0pNP/cCc4xsTMSR6X/jFbppdsNMNSCmnRjddfFwwEH338Sdc1PnfGkXtkuo/cXXkTB9KjDmGFHMJlg9yr7XAg/4h7TGtGQhICQCD5qfD+dAFjjJACCbKysjIzM0kgEjBzlzb5+rnIiaoP5utysg9iDOjRFBGhNh4z3Hjjd6ZMOeGF5+auXrV2w8YtUoqbbrphytQTXnn55eXLVq9dt0Fr3bM6/cEL2xAJJIsImA1Cb9mkR527fBDjRO/vpZcN48BeggdOt4dzt9BXXoE57Emnt/tSL5PEHEkOPSfu3mPm/HOsw39VW4aFEFr7xFEAAEZrJNKaSZAlYPLk41NTws888yetXGRhjDZsbNv2ialEokQsmy5Ge39JCCJPKSmkJdHzPCEEAHmeFkIgkjGqZ/Z7gkLJp+TVmkggdNEyGSOkIETln2t8NSGEUsqyLKWUJYXrulJKY9ho9vlALUuyX+FEgDGKmf2SScYYIZFZR+Oxu+/+ASE2tbZZ0nIcRwhLa21JobQhShQ/IBKeZ3zaJ62VEH7uWxdPLx2okZCgAfNU4lyQeCjNbCwpPeUREAMBGyEkACORJC4dUFaxe9czT/+xqbnDkgEhqKykqGL37icefbS5zTGGbdvS2nxVvwAwgyFiYO370WxB8bgTCAR8aj7wuTMTpYMBiZgNM1AXgZ5PzaW/UlKEGXrpf8Lq9SmaPNeVlmVMory234gxCbomS1qGE8PS5ZpDJCRCz/VJ9o3RpmdJRmS0pOVPFUSjlPbpFH3mLUL0qXC1NoiJevfMGtFnI0HDhg1bUhoG/6X4zGc+SywiKKWEFJAgpjJd7SAbg9hdB5allEopZsNoiEgpY1mW0dxl0XDSnDnKE5PPzCiFSAmHCKAjGnccx7JsY9yAHbItQmTLEpLQ0yAEBaTtv8K0cNC27fbOqNZaWOS6DgDalkXkT2UJwMEApqeldkbijusGbMv1PACUUmhzwN1AhFJIbYzyVGZ6aiAQaGvrcJU2xgSCAUFoW1LIUCzuRKMx27aVVqFQMBKJBAIBY9z01GAoGIw7XizuKk/btuV5HlvU5Zhk31rRRkspbeGzpJvOSKKUChsTDNo+MZ9hnZ2VJog6IlGltDEK0V8LGkD7/GwZ6anM3BmJGQZBZFnScVwhRRcpWZdTAtgYbdmCwevTJ92Nq85IHAiVcpiNbcu01JRQyI7H4wiYGg46cZ2WnmrJYCwaI6RwMBhzPM9T/mI4KCyFAN2sKAjGKCKwbcrKyO6IRElI5XmAaFlCCst1lR4UleYAACAASURBVKeUQDRAzAaJwJhQMKiUclw3YAfUlyq0JhjVDu5/ToYTN5FoHAG1dhHJsgWwDgUtTylmY1siPS01FndczzNMjIYNaKVC4aCnPCkwGLACthWLx9kQEQkUDngHFYZlo7UnJAJoQM7OCgNAZzTqeoaZNYO/FwZsyyfKCwRkSii1taNTaW1LGXeNHZAZqSHPM+2dUWbfR4sZ6amSKBKN+c515Sm0LK1NVzsQDFkp4VBTc4tmQGTDKiM9FLDtuBvvjMQsS6CvXQ+yaJJa5ghFAKSlhGaeOuP8C8/PzMggYdfXVb/00iuff77y7PPOnn3pBQNLS4UQTz72+0jE+8Hd9ze1NAuEUaOH3/zdG7Kzcy3Lbmvbv3r1hj/86Rl/TQYD8r7779vf2Pj88y9cdtml06dNCYdTW1v2L1+++plnngODiOh6DogDVvP0k6Zee+23f/LAf808/fSZp0wPhtMbG2pfnPvSok8X9++X95053xk2fIiwA3W1NU8//edVq9cym3g8FgoFSvv3u+Lyb40ZMyo1Na2tLbp1y7a5c+fu2VspUfQkvhOEcccJBsOTJoy9+cYbNm/e/NRTf7j9tu+TsH7xi18hwn333tvRuv9vf3vv21ddNWr0KEJqaWl6/+8fvPHmO1FmIdCwsiyYeerJF118Yd/8fKVVxd7K5559wQ4EvvcfN//qlw+v37hZSgkHPEMMAFmZaddee+X48ePTMtLdWKyjvePJJ57avGWXMTht6rHX33DdgP79AfjJJx9Tnvfmm+9dfPF5JQOKAc1TTz3ueOaBH/9s197KXo5LDMhKmVBIBIOB2ZfMPuO0U3Kysltamjdv2vKnP/2purZ+zNhxt95627vvvf/a6+90uZCZmYcPG3LHHbe+8/a7f33rHU8p34Q81Dm3R//T092Y29HR/uQTT23avN3zPEA6feYpl1562c9++sDkKSeceeaZ2dk5kUjn7t17nnryyeqaOldzMGTHY5Hi4oI5c64dPXp0OCXU2Rkpr6h9+g9P79xTHrDseI8yRhaBlOR5zsyZJ19yyUUFhYVa65bm/R98uODV19/0y5WlBO3777+3pbm1fO/u2bMvysrKfuLxx5x4/PIrLn/wwQfnzJkzYsTwXbv23nPPfR0dncccM+aGG67vk5sdCqXW1zWsXr36xZf+EolEjTHhkP3D++9raWndu3f37NkXZOX0efT3j/7t3b+XFBfdfPONZYMGB+xANB5fvXrNCy+8VN/Q2OPolBQAAJGSkXdEloxAuPGGOXf/4I621pY1a9bXVNcMGTroW5de2traEol0Dhw4ICs7EwAqK6ti0fiiTz6LO7HLLr34vvvvzc3Lq6uraWzcn5aeMfOM0wcPHrjiixVxxwuHgjfffENmRviEyZOnTZ9WX1fT3taSmpZx1tmzykpLlny+xHE9BOzic0EAmD79pIsvvig1NXXatGkNDfVtba1Dhw4+7bRTK8v33H3PPYX9Csv3ljuOd8yE8aeccsqqlcvrG5oQcVBpycO/eXjsuLG1NbVV+2oIYeqJk6dNm7ZsyeetbR1SwgUXnEdCvPXmO3HHsaQ8afJxP/vZT4OBwGOPPtba2nbD9XMKCvLfeedd27K+973vZmVlnHnWrNw+OTU1NY4TG1BaNv3k6ZYUK1at9pRrSfHvN994+x23hVNSqqr2tbS0FBf3n3XWmfV1DbMvuuiTTz4tr6gEJPZJ7REQoSAv6+GHf3XWOWc1Nzc3NtSz0SNGjjr//HMjne0bN20q7lcwbPiw3LxcY0zVvirP9TZv3lpaWpqbmwPAlfuqOjvjy75Y2dzS2rNCJidqXAECWBIvuugCQVQyoOy8889t2b+/promGAydetopY8ePXf7FsngsevN3b87tk/Puu39XWneRFpt/v/mGM848bd4rr+6rrsWuA09Pv4P/XUFuz/43GK1Hjhx9/vnndHa2b922BcCcdNKUSy+dbYy+6KKL2tta6urrkGD69OmTp5ywaMH8js4oABcV9f3FL/7rlFNPqaquqqwsD9r2+IkTZ8yYUVlZvrd838FV7jWCuebqK+++5660tLS9e3a3tbZm5+Scdc7Z+fl5S5YsNqxTU0M33XRDbl6fk2dMi0Y6mvc3rN+wvm9+30svvaRv374jR46orNxXW1u1ZMmSb33r4h8/8KO8vvk11VWNjY3ZORmzzpo1fPjQlStWdkYiaampN950Y25uzskzpre0tTc3NW7YsN51448+/tjIkSO2b9u6ZcvWQDBlxinTx40ds+TzJZFoFI6QCDVpyxx0Cs/NzTz7nLM2btx0043fbW5tA4Cigvwnn3riyisvv/LKKxcs/PjZZ58Jp4Rvv/2e9vY4AA4ZVHj9Dd+JRaO33nrX5u27POWlp6fMue7qm26as6/imt//7iliJDClpaUdHbHb/uP2TZt3KOXlZKfddvv3L7zw/O3bd/7hqWdMgttQIEsABdoLWnLooMF33Xbn+i07LEuMHz3sicce/eF9P9qybev9P3qgtqElIOj8807/yU8fmHPtt2+77YdGw8033VBUlP+jH/30w48XxeNOKBg476wzf/LAfd+9+fp773uAAIFBAggwFvAp06be/8P7Ozo7b7nl9p0796aEgwngijYkAMGMGjHm7x988KsHH97f3EFEQ8qKf//I7y679Ft/feOdvZVVo4YNvuKyS+pr6u648+5N23YzYk5W+l133XbN1d+2ichoiVIZZL/uG5uApJu+c93xk479wx+ffvrPz3VEnQDB8GGDfv3QgzfdfNMXXyxbumzl2nWbnnvuaQb+/i13RjoVIH/y2cLnn38GgG655d72eNynWOYEuqbLt4lGKWMJmxE85ZaU9E9PS/vP+3+yeNkqx3Uy0kI33jjn+u9c++/f/bcf/uinq1euOf7YiSX98raXV2sGNiYnM/XYY8fv2LJ509Zt3B016mofASQJNlqiufHg/guBI4cO/vVDv77h5ptXrFi5Z085a5ZCTJ8+4z9/+ovFS5c7yoQscdN3rv3ed2+49qqr/utXvwWEq6++asLEYx789YOvvvpmNOpalnX88RN+/vOfffffblyzdm17JAacKLskgEtKCq697tod23f8+Ec/3r2nnBmzs9LvvOu2iy+8aO3KVe+8+z4aRIbRw0c8/vgTzzz3kuO4AvR1V10ZkHZeXtENN/77rj37iL2BpSU3XH9jU2PL3T+4d+PmHSRFStC+9uorb775+jnfufa/fv5LBs2sR4wc/vjjTz734rz2SITQ3PK9m8sGDbr/3vvee/dDpYyUdPnl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"
}
},
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"\n",
"[siehe auch](https://img.devrant.com/devrant/rant/c_844886_xA3J2.jpg)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Ein typischer [off-by-one-Fehler](https://de.wikipedia.org/wiki/Off-by-one-Error)."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def print_boxed(s):\n",
" print(\"-\" * len(s))\n",
" print(\"|\", s, \"|\")\n",
" print(\"-\" * len(s))\n",
"print_boxed(\"Hallo Welt!\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"OK, die waren einfach. Steigern wir uns:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def teiler(zahlen, a):\n",
" \"\"\"Prüft, ob eine der Zahlen ein Teiler von a ist.\"\"\"\n",
" for zahl in zahlen:\n",
" return a % zahl == 0\n",
" return False\n",
"\n",
"def primzahlen(n):\n",
" \"\"\"Berechnet alle Primzahlen bis (einschließlich) n.\"\"\"\n",
" prim = []\n",
" for i in range(2, n):\n",
" if not teiler(prim, i):\n",
" prim.append(i)\n",
" return prim\n",
" \n",
"primzahlen(10)"
]
},
{
"cell_type": "markdown",
"<div style=\"float:right;\">\n",
" \n",
"<img src=\"https://amor.cms.hu-berlin.de/~jaeschkr/tmp/heisenbug.png\" style=\"width:400px\"/>\n",
"<small>\n",
"<a href=\"https://geek-and-poke.com/geekandpoke/2009/7/8/the-art-of-bugfixing-chapter-2.html\">Geek & Poke</a> / <a href=\"https://creativecommons.org/licenses/by/3.0/\">CC-BY 3.0</a>\n",
"</small>\n",
"\n",
"</div>\n",
"\n",
"Diese Art von Fehlern treten bei jeder Programmausführung auf und sind vergleichsweise einfach zu entdecken.\n",
"\n",
"Es gibt auch deutlich subtilere Fehler, die reproduzierbar nur unter bestimmten Bedingungen auftreten.\n",
"\n",
"Und dann gibt es noch Fehler, die nur unter so seltsamen Bedingungen auftreten, dass diese praktisch nicht reproduzierbar sind. → [Heisenbugs](https://en.wikipedia.org/wiki/Heisenbug):\n",
"*A bug that disappears or alters its behavior when one attempts to probe or isolate it.* ([The Jargon File](http://catb.org/jargon/html/H/heisenbug.html))\n",
"\n",
"(siehe auch: <a href=\"https://en.wikipedia.org/wiki/Bug_(engineering)\">Bug</a>)\n"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"[Randall Munroe](https://xkcd.com/1513/) / [CC-BY-NC](https://creativecommons.org/licenses/by-nc/2.5/) \n",
"(weitere: \n",
"[XKCD 1695](https://xkcd.com/1695/), \n",
"[XKCD 1833](https://xkcd.com/1833/),\n",
"[XKCD 1926](https://xkcd.com/1926/),\n",
"[XKCD 2138](https://xkcd.com/2138/),\n",
"[siehe auch](https://www.explainxkcd.com/wiki/index.php/Category:Code_Quality))"
"metadata": {},
"source": [
"Ein weites Feld ... \n",
"... zum Beispiel:\n",
"- Benennung von Variablen → https://en.wikipedia.org/wiki/Naming_convention_(programming)\n",
"- Code-Layout\n",
"- Kommentare\n",
"- Aufteilung/Umfang von Funktionen\n",
"→ [Style Guide for Python Code](https://peps.python.org/pep-0008/)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Die Reiskornlegende\n",
"\n",
"<img src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/Lahur_Sessa_by_Thiago_Cruz.jpg/480px-Lahur_Sessa_by_Thiago_Cruz.jpg\" style=\"float:right; width: 400px;\"/>\n",
"\n",
"Mittels Iteration und Rekursion soll die Anzahl der Reiskörner auf einem Schachbrett berechnet werden, wenn Sie wie in der [Reiskornlegende](https://de.wikipedia.org/wiki/Sissa_ibn_Dahir#Legende) beschrieben verteilt werden: *auf das erste Feld ein Korn, auf das zweite Feld zwei Körner, auf das dritte Feld vier Körner ... usw. immer verdoppelnd bis zum 64. Feld*. "
"metadata": {},
"source": [
"### Iteration"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
" while (i<=n):\n",
" i=i+1\n",
" j=j*2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- funktioniert prinzipiell\n",
"- sprechendere Variablennamen\n",
"- i und j innerhalb der Funktion initialisieren\n",
" - damit die Funktionssignatur möglichst einfach ist\n",
" - weil der entscheidende Parameter die Anzahl der Tage ist"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def reiskoerner ():\n",
" reis = 0,01\n",
" while 1 <= feld >= 64\n",
" Reis verdoppeln\n",
" Feld um eins erhoehen\n",
" print Reis,Feld"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- Dezimaltrennzeichen ist `.`, nicht `,`\n",
"- fehlender Doppelpunkt am Ende der `while`-Zeile\n",
"- `feld` müsste `<= 64` sein\n",
"- Notation `1 <= reis >= 64` klappt in Python nicht"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
" while (b_mehr < b * (2**a-1)):\n",
" b_mehr = b_mehr * 2\n",
" print (b_mehr)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- sprechendere Variablennamen\n",
"- direkte Exponentierung unnötig, da diese durch die Schleife und sukzessive Verdopplung von durchgeführt werden könne (was effizienter wäre, als bei jedem Durchlauf erneut zu Exponentieren)\n",
"- dafür müsste `a` jeweils verdoppelt werden\n",
"- Schleife sollte dann testen, ob `a` noch innerhalb des erlaubten Bereiches ist\n",
"- `b\\_mehr` muss initialisiert werden"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def reiskoerner(t):\n",
" r = 1\n",
" while f > 1:\n",
" r = r * 2\n",
" f = f - 1\n",
" return r"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- Ausgabe der Reiskörner pro Feld fehlt\n",
"- Felder würden rückwärts ausgegeben werden -- Ausgabe des Feldes müsste dann ggf. angepasst werden"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"r=1\n",
"f=1\n",
"def reis\n",
"while (f<64):\n",
" f=f+1\n",
" r=r*2\n",
"print (r)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- Initialisierung der Variablen sollte innerhalb der Funktion erfolgen\n",
"- Syntaxfehler (z.B. Einrückung)\n",
"- Ausgabe von `r` sollte innerhalb der Schleife sein\n",
"- Maximalwert als Parameter"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def reis( ):\n",
" anzahl_der_felder = 1\n",
" reiskoerner = 1\n",
" neue_reiskoerner = reiskoerner * 2\n",
" if anzahl_der_felder == 1:\n",
" print(\"Feld 1 : 1 Reiskorn\")\n",
" else anzahl_der_felder < 65 and anzahl_der_felder > 1:\n",
" print(\"Feld\", anzahl_der_felder, \":\", neues_gehalt, \"Reiskörner\")\n",
" anzahl_der_felder = anzahl_der_felder + 1\n",
" reiskoerner = neue_reiskoerner"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- keine Iteration, Grundidee trotzdem irgendwie da"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def iterativer_algorithmus(Feld):\n",
" while Feld <= 64:\n",
" reis=2**(Feld-1)\n",
" print(reis)\n",
" Feld += 1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- Anzahl der Felder übergeben, Startfeld innerhalb der Funktion initialisieren\n",
"- Anzahl der Reiskoerner tatsächlich verdoppeln"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
" print (b)\n",
" while f < 30 do\n",
" a = a +1\n",
" r = b * 2\n",
" print (b)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- Syntaxfehler (fehlendes `def`, `do` statt Doppelpunkt, etc.)\n",
"- Variablennamen falsch (`a` müsste `f` sein, `b` müsste `r` sein)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Rekursion"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def reiskoerner(reis, feld):\n",
" if feld == 64:\n",
" print reis\n",
" return reis\n",
" print reis\n",
" return reiskoerner(reis * 2, feld + 1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- \"getarnte\" Iteration, keine Rekursion!\n",
"- `print` ist eine Funktion -- daher Aufruf als `print()`"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
" i = i + 1\n",
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- Prinzip falsch, wie vorher auch\n",
"- aber auch noch: Stackoverflow!\n",
"- denn: `i` wird nicht verwendet"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def reiskoerner (r, f)\n",
"if f <= 64\n",
" print (r)\n",
" reis= 2* reiskoerner(f-1)\n",
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- Grundidee ist da\n",
"- Syntax beachten: Einrückungen und Doppelpunkte\n",
"- Funktion erwartet zwei Parameter -- nur einer wird übergeben\n",
"- in der Verzweigung müsste auf `f > 1` getestet werden\n",
"- `r` wird nicht verwendet -- stattdessen `reis`\n",
"- im `else`-Zweig müsste 1 zurückgegeben werden\n",
"- im `if`-Zweig müsste ebenfalls eine `return`-Anweisung stehen"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def reiskoerner_pro_feld ( anzahl_der_felder, reiskoerner ):\n",
" neue_reiskoerner = reiskoerner*2\n",
" while anzahl_der_felder <= 64:\n",
" reiskoerner_pro_feld ( anzahl_der_felder, reiskoerner)\n",
" print(anzahl_der_felder, neue_reiskoerner)\n",
" anzahl_der_felder = anzahl_der_felder + 1\n",
" reiskoerner = neue_reiskoerner + 1\n",
"reiskoerner_pro_feld (anzahl_der_felder = 1, reiskoerner = 1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Weiterführende Links\n",
"\n",
"- https://www.greenteapress.com/thinkpython/html/thinkpython021.html\n",
"- https://realpython.com/invalid-syntax-python/\n",
"- https://www.tutorialsteacher.com/python/error-types-in-python"
]
}
],
"metadata": {
"language_info": {
"name": "python",
"pygments_lexer": "ipython3"
}
},
"nbformat": 4,
"nbformat_minor": 5
}