{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Kapitel 1. Einstieg in die Welt von Python:\n", "\n", "In unserer heutigen digitalen Welt sind Computer nicht mehr aus unserem Alltag wegzudenken. Ob in der Finanzwelt, Industrie aber auch in der Wissenschaft erledigen Computer in Sekundenschnelle komplizierte Rechnungen und helfen dem Anwender komplizierte Sachverhalte vereinfacht wieder zu geben. Daher empfiehlt es sich insbesondere als Physiker zumindest die Grundlagen einer beliebigen Programmiersprache zu beherrschen. \n", "\n", "Im folgenden werden wir uns gemeinsam die Grundzüge der Programmiersprache **Python** erarbeiten. Ein besonderes Augenmerk liegt hierbei auf den verschiedenen Herausforderungen die das analysieren von experimentellen Daten mit sich bringt. Um Sie bestens auf die Anforderungen im **physikalische Grundpraktikum (PGP)** vorzubereiten lernen wir im Folgenden wie man:\n", "\n", "* einfache Rechnungen mit Python durchführt\n", "* \"Mathematische\" Funktionen definiert\n", "* Funktionen auf größere Zahlenmengen anwendet\n", "* Daten in Form von Graphen richtig darstellt\n", "* eine Ausgleichsgerade von Datenpunkten berechnen kann.\n", "\n", "Damit Sie das neu erlernte Wissen direkt vertiefen können, wird dieses Notebook an verschiedenen Stellen kleinere Aufgaben für Sie bereit halten. Die Aufgaben sind durch orangefarbene Boxen hervorgehoben. Es gilt alle Aufgaben zu bearbeiten! " ] }, { "attachments": { "Screenshot_ZDV_JupyterHub.png": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABqgAAARmCAYAAABDUzQgAAAgAElEQVR4nOzd/ZNc9X0n+vw1e/feW/vTVN0wV0tRqrqRUag0EdYgW3Z8EbIXK9irsG5bGiBwDVlbWAQ7o1qMAyhEuPADnsoqBgQWS0zAy4AlC0SgrJgAy1gGCTlgPaA2xHzuDzM9fc7p89QzPT1H0utV9a7Emp5zvuf06Z7u8+Z8z+91Op04fvx4vPnmmyIiIiIiIiIiIiIiIiLLlrfffjvOnj0bv/f222/HqVOnotPpiIiIiIiIiIiIiIiIiCxbTp8+HceOHYvfe/PNN1d8MCIiIiIiIiIiIiIiInJh5M0331RQiYiIiIiIiIiIiIiIyOiioBIREREREREREREREZGRRkElIiIiIiIiIiIiIiIiI42CSkREREREREREREREJJGTJ0/GSy+9FAcOHJCc/PznP4933nlnSfu4MQXVv/zLv8R/+293xne/+704c+bMio9HREREREREREREREQuzHQLGPKdPHkyDh8+vKR93JiC6pvfvCu+9KVt8aUvbYuf/vSnKz4eERERERERERERERG5MHPgwIGV7oAa78CBA0vax0MpqM6ePRu//OUv83/+3pk4+y8/jff+8W/jvX13xHuPfj3ee2pPnH31YHTe610p9d3vfi++9KVtsW3b9vjFL36x4gefiIiIiIiIiIiIiIhcmFFQVWtEQfXtb387tv7Zn8WTTz7Z+/d3T8R7D++M07eOx6lt/y43p/9iVZx59BvROfmvcfr06ZiZeTb++Z//ecUPvFHm1KlTKz4GERERERERERERERHpRUFVrREF1Xe+853Y+md/Fj/+8Y+j0+nE2Rd/VFpM9RVV//U/xtmXf7ziB9wo8/jjj8dnPvOZ2LNnz4qPRUREREREREREREREelFQVWtEQXX27NnoLuO9p++PU9v/fbqE+vLvx+m/When7/rkXP5qXZz68v+Vfszk/xHvzXx/xQ+6UeXuu++OVquloBIRERERERERERERaVgUVNUaUVB1894L++bKqRv+zziz53Nx9sDe6Jw4Wvw7b8/Gez/9uzj9t38ap67/P+LU5P8eZ1/6hxU/8Pq26733hr5MBZWIiIiIiIiIiIiISDOjoKrWnILqX9+KU7eMx5npm+Ls27OD//7xN+LM96+P03/xH6Pz7tu1f+/P//zP44Ybbohjx46l/n3btm2xbdu2ePvt/mX99Kc/je3bt8ddd92V+vdnnnkmvvjFL8bDDz8cp0+fjm9/+9uxefPmuPzyy+PKK6+Mr3zlK/H666+nfudb3/pWTE5OxiOPPJI7vmeffTYmJyfjjjvuWDiot23bFps2bYpWqxVXX331wlgffvjh1O+ePn06vv/978e1114b69atiw0bNsSf//mfxwsvvNC3nmeeeSYmJyfjiSeeiGPHjsVXv/rVmJiYiIceemjFX8giIiIiIiIiIiIiIudSFFTVGlNQvff4N+PskZ8seTlnX/pxvPcP99R+/B//8R9Hq9WK2dleKXb27NlotVrRarUib9sef/zxaLVasX379tS//4//8T+i1WrFnXfeGZOTk3H55ZfH1q1b44YbboiJiYlotVrx8Y9/PI4cObLwOz/84Q+j1WrFZz/72dzx7dixI1qtVvzt3/5tdDqdePrpp2Pz5s2xYcOGaLVa8bGPfSw2b94cmzdvju9/vzfF4bvvvhtf+tKXotVqRbvdjrvvvju+9rWvxUc/+tFYt25d/OQnP8kd+7e//e3YunXrwvb//d///Yq/kEVEREREREREREREzqUoqKo1pqDqHH9jeE/+AMsaZkH1j//4j9FqtWL9+vXxqU99Kv7pn/5p4Wdvv/12bNu2LVqtVnz+85+Ps2fPRqfTiXfeeSeuvPLKaLVa8dJLL6WW95vf/CauvPLKuPzyy/uuvKqa4u/OO++MVqsV9913X+rfDx8+HOvWrYtPfepTcfLkyb6xf+Yzn4mPf/zj8fjjj8c777wTp0+fXuLzcTDu33ZHPPpG5t/feDTu2HZ/HFzGN4Am5Y1H71i40i0v9x+s2odVjxERERERERERERGRpmSQgqrz+hNx95cnY3JyMiYn/1vsPxERnZfjmWePlv/ia/fFxrGb4sml9UTDsYixNKegWqEMs6B6+umnF35vZmam7/eOHj0aV1xxRbRarfjpT3+68O/f+MY3otVqxTe/+c3U43/84x9Hq9WKbdu29S2rrKB666234oorrojPfOYzcebMmb6f33rrrdFqteLHP/5x7tgff/zxIe5jBVVf3ng07sjbJ6X7UEElIiIiIiIiIiIicq6kdkHV2R83r9kQO370Yrz66qvx6qv/K050IuKFXbF+fE1s31tSUimoFFTd/OQnP4lWqxV/8id/snCFVDZ/8Rd/kZqyr9OZu6qp1WrFJz/5yVSh1J3eL+/+VGUF1WOPPRatViv++q//OncM3/3ud6PVasU99/SmQuwWVB/72MdyS63Fp25B9UY8ekfiqqI7Ho03Uo+9Ix599P7ez+8/GJ2Dmf9dZ1lNSG5BVTbmTEH1xqNxR2qbq373jnj04PzvbNsW2wYqx0RERERERERERERk0NQuqF7YFevbe/P/fWwsxspKqspS6Mm4aWwsxsbGYqzvcYmfbbwpbtq4Me57reL3sutb+N9l6ymmoFqGguq6664rXN/f/M3fRKvVir/8y79M/fvnPve5aLVaC/eGOnnyZFx55ZUxMTER77zzTt9yygqq7jqq8vWvf33hd7oF1datW4e8j+sUVPMFS6JkOnh/omjJFjLdYqr7v1OFz9yy7ni0N83jG4/e0aySqq+gqtj+ZEE1vy96V1NVbe/c725LlIHpZYuIiIiIiIiIiIjIsLOYgmr/zZfMlzyZFJVUFQXVkzeNxcZu6/TkTTG28b54rehnY72CqvD3Cguq6rHkUVAtQ0H1X/7LfylcX/fqpWQ51Ol04u/+7u+i1WrFV7/61eh0OvHkk09Gq9WK22+/PXc5ZQXVXXfdFa1WK2688cbYvXt3YbplWKfTK6i+8IUvDHkfdwuSvMyXJrnT/ZWVMtkp7xL/++D9qTJmLnMlTmOmyMsWVFXbv/D/z/3fZBlVvb050wPm/o6IiIiIiIiIiIiIDCuLKaj2tnPKqURJ9ZV/yPxuaSn0ZNyU+tmTcdNCCZX92Wtx38ainyV+T0E13OQVVJ1OZ+FeUa+88krf7zz66KOlBdXnPve5wvVNTU31TfHX6XTixIkTsX79+li/fn28++678bWvfS1arVbhE1RWUD3wwAPRarXivvvuq70flregqriC6uD9OVf0JK4M6rviKLvMXgnzxqN3FJRhmWJnJZPdnqrtT5V86X1Zvb0KKhEREREREREREZFRZ9gF1eprH4iXO5nfLSuF+n6WKKFeuy82Jq6m6vtZ2e8pqIaXooLqqquuilarFf/4j//Y9zvdK5QmJydT/94tqD760Y/G22+/3fd7Z86ciU2bNkWr1Yrnnnuu7+c7d+6MVqsVjz/+eHz84x+PzZs3F97L6t57741WqxX33ntv7oHfarXi85//fOHvZ3NeFVRNn75ukQXVwhViicdWb6+CSkRERERERERERGTUWUxBdeLgvpienp7Lt66Lj5SVU5WlkCuoGp+iguorX/nKwjR5yZLnpZdeiomJiWi1WnH99denfqdbULVardixY0dfOdQtlT772c/mFkc/+9nPotVqxX/6T/8pWq1W3H///YXj/t73vhetVituvvnmvp+dPXs2tmzZUniFVV5WtKCqNcVfvYLqnChfFj3FXyf67jlVub0KKhEREREREREREZFRp3ZB9druuOqT34yXsgXUC7tifVk5VaMUGvo9qFIlV8Rr922MsfOhoHrv5R8P7YkfZFlFBdXzzz8fl19+ebRarfjiF78Ye/bsiZ07d8YVV1wRX//610uvoLrqqqviYx/7WHzuc5+L73znOzE9PR3XX399tFqtWL9+fbz44ouF47nmmmui1WrFH//xH8cvf/nLwscdPnx4oQy77bbb4t57742XX3554ecvv/xybNiwYeGeWN/5znfioYceiu9+97uxY8eOvntbrWhBNV+6bLv/4MLPD96/rXdl0CAFVXdZyauKDt7fNzXeiqZveyq2P1sypbanansVVCIiIiIiIiIiIiKjTu2CKjpx8M7/N1avXhNr166NtWs/E/e+FBGvfTu++IWScmqhFMqZEvCmbk30ZNy08O/Z8ijxs5vuS1xBVf57c6XU3M823ndf4mqr1+K+jXnrKdacgmrm+3HmB38enZP/uvjl/ObXceZ72+O9A/+91uPPnj27UPK89dZbfT9/+OGHF0qeVqsVGzZsiO985zvxzjvvRKvVij/7sz9LPb5bUH3hC1+IF198MT772c8u/G6r1YrrrrsuXnrppdIx3XPPPdFqteKWW26pHP+99967UKK1Wq3Yt29f6uevvPJK3HTTTanHdLfjr/7qr1KPXdmCqhMLRUv3HkrJwmWggipnWU0qp3K3p2L7c0qmdIFVtr0KKhEREREREREREZFRp35B1QCLuPppGBpTUHU6Z+P0nR+L0//1P8Z7T+4erKj6zYl47x/ujtO3/t9x5lufqv17x48fXyhtTp48mfuYd999Nw4dOhQvvPBCvPvuuwv/furUqTh9+nTqscmCqvtvR44ciZ/97GfxxhtvVI7n7Nmz8Z//83+OVqsVhw4dqrUNv/zlL+PgwYNx5MiReO+993Ifc+LEiXjxxRfj+eefj1dffTVOnTqVu+68bRIRERERERERERERkcHS7IKqe7VTN8mrp0anQQVVJ84efyNO/deL49S2fxenbvwPceZvron3/uHuOPvSP8TZo0fi7IlfzuXoz+PsPz0R7z1xV5ze/Zk4dcN/iFPb/l2c/urqOHviaO31Pfvss9FqteIzn/nMUMafV1ANkgcffDD33lYiIiIiIiIiIiIiInLupNkFVTM0qqDqdDpx9uiROH3b/zNXUg2Q0zs/Emd/9Urt9Rw/fjy++MUvRqvVinvvvXcoY19KQfXQQw/F5ZdfHh/96EfjF7/4xYq/eEREREREREREREREZHFRUFVrXEHV6XTi7DvH4sz3t8ep7f9bdTm1/d/HmQdvjM67J2ot+8yZM7Fz587YuHFjtFqtuOaaa+Jf/3UJ971KZDEF1bFjx+LGG2+MVqsVl19+eTzxxBMr/sIREREREREREREREZHFR0FVrTEF1ZkzZ+Lw4cNx+PDhOHPmTHQ6nTj7xktx5u/+vziVc0XV6Z1r4sx/vzXO/vLnA6/r4x//eGzcuDG++c1vxq9//euhHXA/+9nP4tprr42dO3fW/p2TJ0/G+vXr41Of+lQ888wzK/6iERERERERERERERGRpUVBVa0xBdWj+x6Nu755V9z1zbvioR8+1P+Yd9+euw/V0X+Ozm/qXS1VlF//+tdx9uzZFT9Auzl8+HCcPn16xcchIiIiIiIiIiIiIiJLj4KqWmMKqr/+1l8vFFR3ffOuhauoREREREREREREREREzqUoqKo1pqDa+9/3LpRTDz744IofPCIiIiIiIiIiIiIiIouJgqpaYwqq3/zmN/HM/3wm/udP/me88847K37wiIiIiIiIiIiIiIiILCaHDx+OM2fOrHQH1FjvvPNOvPTSS0vax0MrqERERERERERERERERM6HvPPOO3H48OE4cOCA5OTnP/95HDt2bEn7WEElIiIiIiIiIiIiIiIiI42CSkREREREREREREREREYaBZWIiIiIiIiIiIiIiIiMNAoqERERERERERERERERGWnefPPN+L1jx47FmTNnVnwwIiIiIiIiIiIiIiIicn7n1KlTcfz48fi9s2fPxrFjx+LNN98UERERERERERERERERWba8/fbbcfr06fi9AAAAAAAAgBFSUAEAAAAAADBSCioAAAAAAABGSkEFAAAAAADASCmoAAAAAAAAGCkFFQAAAAAAACOloAIAAAAA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82dmZmZmZvbA/fzV5+1///2bYz/NBwB6BCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACiBCoAAAAAAACi/h8RPkVMMYLLNAAAAABJRU5ErkJggg==" } }, "cell_type": "markdown", "metadata": {}, "source": [ "## Jupyter Notebooks ausführen\n", "\n", "### ZDV Jupyter Hub\n", "\n", "Sie können auch den durch die ZDV angebotenen Jupyter Hub (https://jupyterhub.zdv.uni-mainz.de/hub/login) zur Bearbeitung Ihrer Notebooks verwenden. **Falls Sie das Jupyterhub von außerhalb des Uni-Netzwerks erreichen wollen, müssen Sie eine VPN-Verbindung zum Uni-Netzwerk aufbauen.** Eine Anleitung für die gebräuchlichsten Betriebssysteme finden Sie [hier]( https://www.zdv.uni-mainz.de/vpn-netz-zugang-von-ausserhalb-des-campus/). \n", "\n", "Um Zugang zum Jupyter-Hub zu erhalten, müssen Sie sich zunächst mit Ihrem Uni-Account anmelden. Danach erscheint eine Auswahlseite, auf der Sie die Art der Jupyter Umgebung auswählen. Für das Praktikum ist die Standardumgebung die richtige Wahl, s. Bild unten.\n", "\n", "![images/Screenshot_ZDV_JupyterHub.png](attachment:Screenshot_ZDV_JupyterHub.png)\n", "\n", "Klicken Sie auf die Schaltfläche **Spawn**, dann öffnet sich, wie bei der lokalen Installation, das Notebook Dashboard.\n", "\n", "### Lokale Installation\n", "\n", "Falls Sie das Jupyter Notebook auf Ihrem Computer installiert haben, sind Sie bereit, den Notebook-Server zu betreiben. Sie können den Notebook-Server über die Befehlszeile (mit Terminal unter Mac/Linux, Eingabeaufforderung unter Windows) starten, indem Sie ihn ausführen:\n", "\n", " jupyter notebook\n", "\n", "Dadurch werden einige Informationen über den Notebook-Server in Ihrem Terminal angezeigt, einschließlich der URL der Webanwendung (standardmäßig http://localhost:8888) und Ihr Standard-Webbrowser wird mit dieser URL geöffnet.\n", "\n", "Wenn sich das Notebook in Ihrem Browser öffnet, sehen Sie das Notebook Dashboard, das eine Liste der Notebooks, Dateien und Unterverzeichnisse in dem Verzeichnis anzeigt, in dem der Notebook-Server gestartet wurde. Meistens werden Sie einen Notebook-Server im obersten Verzeichnis mit Notebooks starten wollen. Oftmals wird dies Ihr Home-Verzeichnis sein.\n", "\n", "## Ein neues Notebook-Dokument anlegen\n", "\n", "Ein neues Notebook kann jederzeit erstellt werden, entweder über das Dashboard oder über die Menüoption File ‣ Neu aus einem aktiven Notebook heraus. Das neue Notebook wird im selben Verzeichnis erstellt und öffnet sich in einem neuen Browser-Tab. Es wird auch als neuer Eintrag in der Notebookliste auf dem Dashboard angezeigt.\n", "\n", "![](https://jupyter-notebook.readthedocs.io/en/latest/_images/new-notebook.gif)\n", "\n", "## Notebooks öffnen\n", "\n", "Ein offenes Notebook hat genau eine interaktive Sitzung, die mit einem Kernel verbunden ist, der den vom Benutzer gesendeten Code ausführt und die Ergebnisse zurückgibt. Dieser Kernel bleibt aktiv, wenn das Webbrowser-Fenster geschlossen ist, und das erneute Öffnen desselben Notebooks über das Dashboard stellt die Verbindung zwischen der Webanwendung und demselben Kernel wieder her.\n", "\n", "## Die Notebook Benutzeroberfläche\n", "\n", "Wenn Sie ein neues Notebook-Dokument erstellen, werden Ihnen der Name des Notebooks, eine Menüleiste, eine Symbolleiste und eine leere Codezelle angezeigt.\n", "\n", "![](https://jupyter-notebook.readthedocs.io/en/latest/_images/blank-notebook-ui.png)\n", "\n", "**Notebook-Name**: Der Name, der oben auf der Seite neben dem Jupyter-Logo angezeigt wird, spiegelt den Namen der .ipynb-Datei wider. Wenn Sie auf den Namen des Notebooks klicken, öffnet sich ein Dialog, in dem Sie ihn umbenennen können. Wenn Sie also ein Notebook im Browser von \"Untitled0\" in \"My first notebook\" umbenennen, wird die Datei Untitled0.ipynb in My first notebook.ipynb umbenannt.\n", "\n", "**Menüleiste**: Die Menüleiste zeigt verschiedene Optionen, mit denen Sie die Funktionsweise des Notebooks beeinflussen können.\n", "\n", "**Symbolleiste**: Die Symbolleiste bietet eine schnelle Möglichkeit, die am häufigsten verwendeten Operationen innerhalb des Notebooks durchzuführen, indem Sie auf ein Symbol klicken.\n", "\n", "**Codezelle**: der Standardtyp der Zelle; lesen Sie weiter, um eine Erklärung der Zellen zu erhalten.\n", "\n", "## Aufbau eines Notebook Dokuments\n", "\n", "Das Notebook besteht aus einer Folge von Zellen. Eine Zelle ist ein mehrzeiliges Texteingabefeld, dessen Inhalt mit Shift-Enter oder durch Anklicken der Schaltfläche \"Play\" in der Symbolleiste oder Cell, Run in der Menüleiste ausgeführt werden kann. Das Ausführungsverhalten einer Zelle wird durch den Zellentyp bestimmt. Es gibt drei Arten von Zellen: Codezellen, Abschriftenzellen und Rohzellen. Jede Zelle beginnt damit, eine Codezelle zu sein, aber ihr Typ kann über ein Dropdown-Menü in der Symbolleiste (das zunächst \"Code\" sein wird) oder über Tastenkombinationen geändert werden.\n", "\n", "### Code-Zellen\n", "\n", "Eine Codezelle ermöglicht es Ihnen, neuen Code zu bearbeiten und zu schreiben, mit voller Syntaxhervorhebung und Vervollständigung der Registerkarte. Die von Ihnen verwendete Programmiersprache hängt vom Kernel ab, und der Standardkernel (IPython) führt Python-Code aus.\n", "\n", "Wenn eine Codezelle ausgeführt wird, wird der darin enthaltene Code an den dem Notebook zugeordneten Kernel gesendet. Die Ergebnisse, die von dieser Berechnung zurückgegeben werden, werden dann im Notebook als Ausgabe der Zelle angezeigt. Zum Beispiel beim Berechnen von: " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2019-10-27T12:25:06.022577Z", "start_time": "2019-10-27T12:25:05.988009Z" } }, "outputs": [], "source": [ "3 + 2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Die Ausgabe beschränkt sich nicht nur auf Text, sondern es sind auch viele andere mögliche Ausgabeformen möglich, darunter matplotlib-Figuren und HTML-Tabellen. \n", "\n", "### Markdown-Zellen\n", "\n", "Sie können den Berechnungsprozess versiert dokumentieren, indem Sie beschreibenden Text mit Code abwechseln und Rich Text verwenden. In IPython wird dies durch die Markierung von Text mit der Markdown-Sprache erreicht. Die entsprechenden Zellen werden als Markdown-Zellen bezeichnet. Die Markdown-Sprache bietet eine einfache Möglichkeit, dieses Textmarkup durchzuführen, d.h. festzulegen, welche Teile des Textes hervorgehoben werden sollen (Kursivschrift), Fett, Formularlisten usw.\n", "\n", "Innerhalb von Markdown-Zellen können Sie mathematische Ausdrücke auch auf einfache Weise mit der Standard-LaTeX-Notation einbinden: `$...$` für Inline-Mathematik und `$$...$$` für angezeigte Mathematik. Wenn die Markdown-Zelle ausgeführt wird, werden die LaTeX-Abschnitte automatisch in der HTML-Ausgabe als Gleichungen mit hochwertiger Typografie dargestellt. Möglich wird dies durch MathJax, das eine große Teilmenge der LaTeX-Funktionalität unterstützt. \n", "\n", "Es existiert also eine ganze Bandbreite an Formatierungsmöglichkeiten. Hier einige Beispiele:\n", "\n", "**Überschriften:**\n", "\n", "# Level 1.\n", "## Level 2.\n", "### Level 3.\n", "\n", "**Aufzählungen: **\n", "\n", "* Mit normalen\n", "* Aufzählungspunkten\n", " 1. oder \n", " 2. Numerierungen\n", " * Auf unterschiedlichen\n", " 1. Ebenen\n", "\n", "**Schriftarten:**\n", "\n", "**Fett**\n", "\n", "*Italic (Kursive)*\n", "\n", "`True type`\n", "\n", "bzw. Syntax highlighting\n", "\n", "```python \n", "def EasyFunc(x):\n", " return 2 * x\n", "```\n", "\n", "**Formeln mit Hilfe des Latex-Syntax:**\n", "\n", "$ f(x) = \\int\\limits_0^\\infty e^{-x} \\, dx $\n", "\n", "(Latex werdet Sie verstärkt im F-Praktikum kennen lernen)\n", "\n", "\n", "**Bilder:**\n", "\n", "![The Python logo](https://www.python.org/static/community_logos/python-powered-w-200x80.png \"Das Python Logo\")\n", "\n", "\n", "Darüber hinaus bietet uns das Jupyter Notebook noch diverse weitere Optionen an welche unseren harten Alltag vereinfachen. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Grundlagen zu Python bzw. Jupyter Notebooks:\n", "\n", "Bevor wir mit dem eigentlichen Programmieren beginnen wollen, müssen wir uns jedoch erst einmal mit unserem so genannten Interpreter (**Jupyter Notebook**) vertraut machen. Bei der Programmiersprache **Python** handelt es sich um eine so genannte **Interpretersprache**. Dies bedeutet, dass eingegebene Befehle, ähnlich wie bei einem Taschenrechner, direkt ausgeführt werden.\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "ExecuteTime": { "end_time": "2018-11-17T13:26:34.382179Z", "start_time": "2018-11-17T13:26:34.350979Z" } }, "source": [ "
\n", " \n", "#### Aufgabe 1.: Zum Vertraut werden mit dem Jupyter Notebook\n", "\n", "Im folgenden wollen wir erst einmal mit den Grundlagen des Notebooks vertraut machen. Insbesondere wollen wir lernen, wie wir eine Markdown- und eine Code-Zelle erstellen, bearbeiten und ausführen. \n", "\n", "* Erstellt zunächst eine Code-Zelle unterhalb dieser Aufgaben Zelle und berechnen Sie die Summe zweier beliebiger ganzer Zahlen. Gehen Sie dabei wie folgt vor:\n", " 1. Klicken Sie die Zelle dieser Aufgabe an, so dass die Zelle eine blaue Umrandung bekommt (je nach Bildschirmauflösung könnt Sie nur links einen blauen Balken erkennen). Sie befinden sich nun im so genannten \"Command Modus\". In diesem Modus könnt Sie mit Hilfe der Pfeiltasten durch das Notebook navigieren oder die Struktur des Notebooks bzw. seiner Zellen mit Hilfe von Tasten/Tastenkombinationen modifizieren.\n", " 2. Benutzen Sie nun die Taste **B** um eine Code-Zelle unterhalb (**B**elow) dieser Zelle zu erstellen. Sie werden feststellen, dass Ihr Navigator direkt zu der neu erstellten Zelle springt (blaue Umrandung).\n", " 3. Um nun diese neu erstellte Code-Zelle zu editieren, klicken Sie diese mit dem Mauszeiger an. Die Zellenumrandung sollte von Blau auf Grün wechseln. Dies zeigt an, dass Sie sich nun im Editiermodus für dieses Zelle befinden.\n", " 4. Nun können Sie die Summe aus zwei beliebigen ganzen Zahlen mit Hilfe des Syntax\n", " ```python\n", " 3 + 5\n", " ```\n", " berechnen.\n", " 5. Um diese Code-Zelle auszuführen, müssen Sie anschließend die Tastenkombination: **STRG + ENTER** oder **SHIFT + ENTER** benutzen. Das Ergebnis wird direkt unterhalb der Zelle angezeigt.\n", " \n", " \n", "* Erstellen Sie nun eine Markdown-Zelle oberhalb ihrer Code-Zelle. Hierfür müssen Sie wie folgt vorgehen: \n", " 1. Klicken Sie die zuvor erstellte Code-Zelle an. Die Zelle sollte eine grüne Umrandung anzeigen, da Sie sich nach wie vor im Editiermodus befinden.\n", " 2. Drücken Sie die **ESC**-Taste um vom Editier- in den Command-Modus zu wechseln (blaue Umrandung).\n", " 3. Drücken Sie nun die Taste **A** um eine neue Code-Zelle oberhalb (**A**bove) Ihrer angewählten Zelle zu erstellen. Der Navigator wird wieder automatisch zu der neu erstellten Zelle springen.\n", " 4. Drücken Sie nun die Taste **M** um die Code-Zelle in eine Markdown-Zelle zu verwandeln. Sie werden feststellen, dass eine Markdown-Zelle im Vergleich zu einer Code Zelle kein \"In []:\"-Anzeige links der Zelle hat. \n", " 5. Wechseln Sie nun in der Markdown-Zelle in den Editiermodus (grüne Umrandung) in dem Sie diese anklicken. \n", " 6. Fügen Sie nun die folgenden Objekte in die Markdown-Zelle mit dem entsprechenden Syntax ein:\n", " * Eine level 1 und level 2 Überschrift\n", " * Eine numerische Aufzählung (1. 2. und 3.) wobei 1. ein fett gedrucktes Wort 2. ein kursive geschriebenes Wort und 3. ein Wort im true type beinhalten soll. \n", " * Fügen Sie dem zweiten Aufzählungspunkt (2.) drei nicht nummerierte Unterpunkte hinzu.\n", " \n", "**Hinweise:**\n", "Um die Aufgabe mit der Markdown-Zelle zu lösen, können Sie den jeweils benötigten Syntax in der Zelle oberhalb dieser Aufgabe nach gucken. Wechselen Sie hierzu in der entsprechenden Markdown-Zelle in den Editiermodus in dem Sie die entsprechende Zelle mittels einem Doppelklick anwählen. \n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Neben diesen nützlichen Befehlen gibt es noch weitere tolle Kürzel wie zum Beispiel:\n", "* **D + D** um eine Zelle zu **löschen** \n", "* **Y** verwandelt eine aktuelle **Markdown**-Zelle in eine **Code**-Zelle\n", "* **Strg** + **Shift** + **Minus** Splittet eine Zelle an der Position eures Cursors \n", "* **F** für \"Find and Replace\" (nützlich wenn ihr zum Beispiel ein Variablennamen austauschen wollt)\n", "* **I** + **I** Um den *\"Kernel\"* zu stoppen (wichtig falls ihr mal eine unendliche LOOP gebaut habt)\n", "\n", "Des weiteren können Sie [hier](https://www.cheatography.com/weidadeyue/cheat-sheets/jupyter-notebook/) eine Auflistung weiterer Jupyter-Befehle finden." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Python als Taschenrechner:\n", "\n", "Neben dem einfachen Summieren zweier Zahlen ermöglicht uns Python natürlich auch das Verwenden weiterer Operatoren. Hierbei haben die Operatoren, ähnlich wie in der Mathematik, gewisse Prioritäten (*Punkt vor Strich*). Die Operation mit dem niedrigeren Prioritätswert wird zu erst ausgeführt. \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
OperatorErgebnisPriorität
x + yDie Summe von x und y6
x - yDifferenz von x und y5
x * yProdukt von x und y4
x / yQuotient von x und y3
x % yRest von x / y2
x ** yx bei der Potenz von y1
\n", "\n", "Hier ein paar Beispiele:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2019-10-27T12:25:06.038328Z", "start_time": "2019-10-27T12:25:06.026497Z" } }, "outputs": [], "source": [ "2 / 3 - 2" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2019-10-27T12:25:06.053766Z", "start_time": "2019-10-27T12:25:06.042411Z" } }, "outputs": [], "source": [ "3**2 * 2 - 8 " ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "ExecuteTime": { "end_time": "2020-02-08T13:42:34.321719Z", "start_time": "2020-02-08T13:42:34.291969Z" } }, "outputs": [ { "data": { "text/plain": [ "2.0" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "4**0.5" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2019-10-27T12:25:06.069278Z", "start_time": "2019-10-27T12:25:06.057589Z" } }, "outputs": [], "source": [ "3**2**2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Wie in der Mathematik können wir auch bei Python Klammern verwenden um die Rechenreihenfolge zu ändern:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2019-10-27T12:25:06.085191Z", "start_time": "2019-10-27T12:25:06.071226Z" } }, "outputs": [], "source": [ "3**2 * 2 - 8 " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2019-10-27T12:25:06.101225Z", "start_time": "2019-10-27T12:25:06.087057Z" } }, "outputs": [], "source": [ "3**2 * (2 - 8 ) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Um unsere Rechnungen besser zu strukturieren, können wir Zahlen auch Variablen zuordnen. Hierzu verwenden wir das Gleichheitszeichen um einer Variablen (*links*) einem Wert (*rechts*) zuzuordnen." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2019-10-27T12:25:06.116447Z", "start_time": "2019-10-27T12:25:06.102883Z" } }, "outputs": [], "source": [ "a = 5" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2019-10-27T12:25:06.132372Z", "start_time": "2019-10-27T12:25:06.119281Z" } }, "outputs": [], "source": [ "a" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Variablen können neben einfach Buchstaben auch mittels komplexere Ausdrücke dargestellt werden. " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2019-10-27T12:25:06.149182Z", "start_time": "2019-10-27T12:25:06.135155Z" } }, "outputs": [], "source": [ "variable = 2" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2019-10-27T12:25:06.164477Z", "start_time": "2019-10-27T12:25:06.151305Z" } }, "outputs": [], "source": [ "variable_die_eine_multiplikation_beinhaltet = a * variable" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "variable_die_eine_multiplikation_beinhaltet" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Bei der Definition von Variablen ist es wichtig auf die Reihenfolge zu achten. Dies gilt nicht nur innerhalb einer Zelle..." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2019-10-27T12:25:06.180459Z", "start_time": "2019-10-27T12:25:06.167499Z" } }, "outputs": [], "source": [ "a = 4\n", "b = 3\n", "a = 7\n", "\n", "a * b" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "... sondern auch für die Reihenfolge in der die Code-Zellen ausgeführt werden (Angezeigt durch In []:). " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2019-10-27T12:25:06.195614Z", "start_time": "2019-10-27T12:25:06.183176Z" } }, "outputs": [], "source": [ "a = 7" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2019-10-27T12:25:06.211590Z", "start_time": "2019-10-27T12:25:06.197947Z" } }, "outputs": [], "source": [ "a = 4" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2019-10-27T12:25:06.231469Z", "start_time": "2019-10-27T12:25:06.212585Z" } }, "outputs": [], "source": [ "a * b" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ein weiterer Vorteil (bzw. auch Nachteil) ist, dass Python eine so genannte *dynamische* Datentypenvergabe nutzt. Um besser zu verstehen was dies bedeutet, gucken wir uns das nachfolgende Beispiel an. " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2019-10-27T12:25:06.247553Z", "start_time": "2019-10-27T12:25:06.233424Z" } }, "outputs": [], "source": [ "a = 2\n", "b = 5\n", "c = a * b\n", "c" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2019-10-27T12:25:06.279581Z", "start_time": "2019-10-27T12:25:06.251320Z" } }, "outputs": [], "source": [ "a = 2\n", "b = 5.0\n", "c = a * b\n", "c " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In der oberen Zelle ist **c** vom Datentyp `int` (*Integer*) was einer Ganzenzahl entspricht. In der unteren Zelle jedoch ist **c** vom Datentyp `float` (*Floating Point Number*) also eine Gleitkommazahl. Dies liegt daran, das wir in der unteren Zelle **b** als Gleitkommazahl definiert haben. Um uns Arbeit abzunehmen hat Python für uns im Hintergrund dynamisch entschieden, dass somit **c** ebenfalls vom Typ `float` sein muss. \n", "\n", "Neben den primitiven Datentypen `float` und `int` gibt es noch die wichtigen Datentypen `str` (*string*) was einer Zeichenkette entspricht (z.B. Buchstaben, Wörter und Sätze), `complex` für Komplexe Zahlen und `bool` für Wahrheitswerte. Was genau Wahrheitswerte sind und wofür diese verwendet werden, werden Sie noch im **PGP2** lernen. \n", "\n", "Für das **PGP1** sind erstmal nur die Typen `int`, `float` und `str` von Bedeutung." ] }, { "cell_type": "markdown", "metadata": { "ExecuteTime": { "end_time": "2018-11-25T16:19:02.118966Z", "start_time": "2018-11-25T16:19:02.087766Z" } }, "source": [ "
\n", " \n", "#### Aufgabe 2.a.: Beschleunigte Bewegung\n", "\n", "Die zurückgelegte Distanz eines Objekts, welches eine beschleunigte Bewegung ausführt (z.B. der freie Fall einer Kugel in einem Gravitationsfeld), kann mit Hilfe von \n", "\n", "$s(t) = \\frac{1}{2}\\cdot a \\cdot t^2 + v_0 \\cdot t + s_0$\n", "\n", "beschrieben werden. Hierbei beschreibt $t$ die verstrichene Zeit, $a$ die Beschleunigung, $v_0$ die Startgeschwindigkeit und $s_0$ die Startposition des Objekts. Ersteklen Sie unterhalb der Aufgabe eine neue Code-Zelle und berechnen Sie die folgenden Werte:\n", "\n", "Wie lange bräuchte ein Stift, welcher in einer Höhe von $s_0 = 1.2\\,$m losgelassen wird ($v_0 = 0\\,\\text{m}/\\text{s}$)... \n", "\n", "* ... im Schwerefeld der Erde $(g_\\text{E} = - 9.81\\,\\text{m}/\\text{s}^2)$ ...\n", "* ... im Schwerefeld des Mondes $(g_\\text{M} = - 1.62\\,\\text{m}/\\text{s}^2)$ ...\n", "* ... im Schwerefeld der Sonne $(g_\\text{S} = - 274\\,\\text{m}/\\text{s}^2)$ ...\n", "\n", "... bis er auf dem Boden aufschlägt? (Reibungseffekt sind zu vernachlässigen)\n", "\n", "Mit welcher Geschwindigkeit (in km/h) schlägt der Stift auf die Sonnenoberfläche auf ?\n", "\n", "**Hinweis:** \n", "Sofern ihr alle Berechnungen innerhalb einer Zelle ausführen wollt, könnt ihr mit Hilfe der `print`-Funktion eure Ergebnisse \"ausdrucken\"/anzeigen lassen. Geht dabei wie folgt vor:\n", "```python\n", "print(Variablennamen1, Variablennamen2, Variablennamen3 ...)\n", "```\n", "oder\n", "```python\n", "print(Variablennamen1) \n", "print(Variablennamen2)\n", "print(Variablennamen3)\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Zeichenketten\n", "\n", "Wie eben bereits erwähnt, gibt es neben den Zahlen-Datentypen `int`, `float` und `complex` auch noch den Datentyp einer Zeichenkette `str`. Zeichenketten werden in Programmiersprachen vielseitig verwendet z.B. bei einer Nutzereingabe (z.B. einem Passwort), Dateiname bei einer Installation, oder bei Textrückgaben von Programmen. Letzteres haben Sie bereits in Aufgabe 2 a. mit Hilfe der `print`-Funktion gesehen.\n", "\n", "Für das PGP-1 wollen wir uns zunächst darauf beschränken, dass Zeichenketten in so genannten **Formatstrings** dazu genutzt werden können, schönere `print` Rückgaben zu erzeugen, bzw. wir mit Zeichenketten Achsenbeschriftungen an Graphen anbringen können. \n", "\n", "Zunächst erst aber einmal eine einfache Zeichenkette:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2019-10-27T12:25:06.297413Z", "start_time": "2019-10-27T12:25:06.284068Z" } }, "outputs": [], "source": [ "'Dies ist eine Zeichenkette'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hierbei kann eine Zeichenkette auch alle Symbole enthalten die euer Interpreter unterstützt. In Jupyter sind dies alle gewohnten Zeichen wie Buchstaben, Zahlen, Sonderzeichen und Leerzeichen: " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2019-10-27T12:25:06.328594Z", "start_time": "2019-10-27T12:25:06.301834Z" } }, "outputs": [], "source": [ "s1 = '0123456789'\n", "s2 = 'äöü'\n", "s3 = '*+~`´?ß-@€'\n", "s4 = 'python 3.7>'\n", "\n", "print(s1,s2,s3,s4)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Einen **Formatstring** können wir über zwei Arten generieren" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "ExecuteTime": { "end_time": "2020-02-08T13:40:14.532316Z", "start_time": "2020-02-08T13:40:14.507294Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Dies ist Syntaxvariante eins\n", "\n", "Dies ist Syntaxvariante 2\n" ] } ], "source": [ "a = 'eins'\n", "b = 2\n", "\n", "print('Dies ist Syntaxvariante {}'.format(a))\n", "print()\n", "print(f'Dies ist Syntaxvariante {b}') " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Neben dem Einfügen von Strings oder Zahlen in eine Zeichenkette können wir die eingefügten Werte auch formatieren:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2020-02-08T13:41:34.601805Z", "start_time": "2020-02-08T13:41:34.577256Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Dies ist pi auf 4 signifikante Stellen gerundet: 3.1416\n", "\n", "Dies ist pi auf 4 signifikante Stellen gerundet: 3.1416\n" ] } ], "source": [ "pi = 3.1415926535\n", "\n", "print(f'Dies ist pi auf 4 signifikante Stellen gerundet: {pi:.4f}')\n", "print()\n", "print('Dies ist pi auf 4 signifikante Stellen gerundet: {:.4f}'.format(pi))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "... oder sofern Sie eine Rückgabe lieber über mehrere Zeilen ausgeben lassen möchten, könnt Sie dies wie folgt machen:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2020-02-08T13:43:48.431735Z", "start_time": "2020-02-08T13:43:48.411817Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "An einem Widerstand R wurden die folgenden Werte gemessen:\n", "Spannung: 12.0+/-0.1 V\n", "Strom: 0.3+/-0.01 mA\n", "Hierraus resultiert ein Widerstand von 40.0+/-1.37 kOhm \n" ] } ], "source": [ "U = 12.0 #V\n", "dU = 0.1 #V\n", "I = 0.30 #mA\n", "dI = 0.01 #mA\n", "\n", "R = U/I #kOhm \n", "dR = R * ((dU / U)**2 + (dI / I)**2)**0.5\n", "\n", "print(f'''An einem Widerstand R wurden die folgenden Werte gemessen:\n", "Spannung: {U}+/-{dU} V\n", "Strom: {I}+/-{dI} mA\n", "Hierraus resultiert ein Widerstand von {R}+/-{dR:.2f} kOhm ''') " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hierbei zeigt `:` an, dass sie eine spezielle Formatierung verwenden möchten. Die Zahl hinter dem `.` gibt an wie viele Nachkommastellen Sie anzeigen lassen möchten. Das `f` bedeutet, dass es sich bei der Zahl um eine Gleitkommazahl handelt." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " \n", "#### Aufgabe 2.b.: Beschleunigte Bewegung Zusatz\n", " \n", "Lassen Sie nun Ihre berechneten Werte aus Aufgabe 2 mit Hilfe von `print` erneut ausgeben. Nutzen Sie jedoch dieses Mal **Formatstrings** für eine schönere und bedeutungsvollere Rückgabe. Achten Sie dabei ins besonders auf:\n", "\n", "* Die Angabe der richtigen Einheiten.\n", "* Das Runden der berechneten Werte der Anzahl an signifikanten Stellen entsprechend. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Das Definieren von Funktionen:\n", "\n", "Anstatt Berechnungen wie bei einem Taschenrechner immer wieder manuell einzugeben, ermöglicht uns eine Programmiersprache das Definieren von Funktionen. Funktionen können hierbei ähnlich wie mathematische Funktionen definiert und behandelt werden. Im folgenden wollen wir uns dies im Fall des Ohmschen Gesetzes, welches durch \n", "\n", "$$U(R, I) = R \\cdot I$$ \n", "\n", "beschrieben wird, angucken. Hierbei wird die Spannung $U$ durch die Variablen $R$ (Widerstand) und $I$ (Strom) beschrieben. Dies gilt auch analog für Funktionen in einer Programmiersprache:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2019-10-27T12:25:06.397242Z", "start_time": "2019-10-27T12:25:06.383825Z" } }, "outputs": [], "source": [ "def Spannung(Widerstand, Strom): # U(R,I)\n", " return Widerstand * Strom # Wiedergabe der Funktion" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Bitte beachten Sie, dass die Rückgabe `return` der Funktion mit Hilfe der Tab-Taste eingerückt wurde. Dieser Syntax wird von Python vorgegeben uns muss eingehalten werden.\n", "\n", "Diese Funktion können wir nun auf Messdaten anwenden. Z.B. wir Messen bei einem Widerstand von $1\\,\\text{k}\\Omega$ einen Strom von $10\\,\\text{mA}$:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2019-10-27T12:25:06.412442Z", "start_time": "2019-10-27T12:25:06.402410Z" } }, "outputs": [], "source": [ "# Leider müssen wir hier auf die Einheiten selbst achten.\n", "# Deshalb ist es ratsam sich die Einheiten zu den Werten zu notieren.\n", "U = Spannung(1000, 0.01) # in V \n", "U " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Neben mathematischen Funktionen, können Funktionen in einer Programmiersprache auch viel allgemeinere Aufgaben erfüllen bzw. komplexe Algorithmen beinhalten. Hierfür benötigen wir meist mehr als nur eine Zeile. Um Python verständlich zu machen, dass mehre Zeilen zu einer Funktion gehören müssen wir die entsprechenden Zeilen wir zuvor den `return`-Befehl einrücken. " ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "ExecuteTime": { "end_time": "2020-02-08T14:00:35.030562Z", "start_time": "2020-02-08T14:00:35.020705Z" } }, "outputs": [], "source": [ "def komplxe_function(a, b, c, d):\n", " result = a + b\n", " result = result * c\n", " result = result / d\n", " return result" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "ExecuteTime": { "end_time": "2020-02-08T14:00:35.310478Z", "start_time": "2020-02-08T14:00:35.290633Z" } }, "outputs": [ { "data": { "text/plain": [ "2.25" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "komplxe_function(1, 2, 3, 4)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Bitte beachten Sie, das Variablen welche in einer Funktion definiert und genutzt werden auch nur dort zur Verfügung stehen. Versuchen Sie die entsprechenden Variablen im regulär im Notebook zu verwenden werden Sie einen Fehler bekommen." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "ExecuteTime": { "end_time": "2020-02-08T14:01:53.810639Z", "start_time": "2020-02-08T14:01:53.785432Z" } }, "outputs": [ { "ename": "NameError", "evalue": "name 'result' is not defined", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mresult\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[1;31mNameError\u001b[0m: name 'result' is not defined" ] } ], "source": [ "result" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Sollten Sie das Ergebnis dennoch in einer Variablen speichern wollen können Sie dies natürlich machen:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "ExecuteTime": { "end_time": "2020-02-08T14:04:10.690109Z", "start_time": "2020-02-08T14:04:10.670371Z" } }, "outputs": [], "source": [ "result = komplxe_function(1, 2, 3, 4)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "ExecuteTime": { "end_time": "2020-02-08T14:04:10.890200Z", "start_time": "2020-02-08T14:04:10.870502Z" } }, "outputs": [ { "data": { "text/plain": [ "2.25" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Noch mehr über komplexere Programme und Algorithmen lernen Sie in Veranstaltungen wie\n", "\n", "* Computer in der Wissenschaft \n", "* Programmieren für Physiker\n", "* Einführung in die Programmierung" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " \n", "#### Aufgabe 3. Umgang mit dem Ohmschen Gesetz:\n", "\n", "Bei einem $500\\,\\Omega$ Widerstand wird eine Spannung von 5, 10, 20 und 50 Volt angelegt. Wie hoch sollte der jeweils entsprechende Strom ausfallen und welche Leistung wird in dem Widerstand umgesetzt? \n", "\n", "Des Weiteren nehmt an, dass euer Widerstand einen Fehler von $+/-20\\,\\Omega$ und eure angelegte Spannung eine Ungenauigkeit von $10\\,\\%$ aufweist. Wie groß wäre der Fehler des gemessenen Stroms bei der Messung mit $50\\,$V? Benutzt hierfür die Gaus'sche Fehlerfortpflanzung und definiert die entsprechende Funktion in Python.\n", "\n", "**Tipp:**\n", "\n", "Die Leistung, welche in einem ohmschen Widerstand umgesetzt wird, lässt sich durch\n", "\n", "$P(U, I ) = U \\cdot I $\n", "\n", "berechnen, wobei $U$ die angelegte Spannung ist und $I$ der elektrische Strom welcher durch den Widerstand fließt. \n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Tipp: \n", "Es ist ratsam gleich von Anfang an Funktionen zu dokumentieren. Hierzu dienen in Python die sogenannten `Doc-Strings`. Sie beinhalten Informationen über die Funktion selbst, ihre verwendeten Parameter und ihrer Ausgabe. Zum Beispiel für unser Beispiel des Ohmschen Gesetzes:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2019-10-27T12:25:06.429738Z", "start_time": "2019-10-27T12:25:06.416013Z" } }, "outputs": [], "source": [ "def Spannung(Strom, Widerstand):\n", " '''\n", " Diese Funktion berechnet die Spannung eines Ohmschen \n", " Widerstands.\n", " \n", " Args:\n", " Strom (float): Der gemessene Strom in mA.\n", " Widerstand (float): Der Wert des verwendeten Widerstands\n", " in Ohm.\n", " \n", " \n", " Returns:\n", " float: Die Berechnete Spannung in V.\n", " '''\n", " return Widerstand * Strom/1000" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Messtabellen in Python:\n", "\n", "Damit euch eine Programmiersprache wie Python Arbeit abnehmen kann, sollte es natürlich auch möglich sein, größere Datenmengen, z.B. die Werte einer Messtabelle, in einer Variablen zu speichern. Python bietet hierfür mehrer verschiedene Konzepte an, alle mit unterschiedlichen Stärken und Schwächen. Die gängigsten Methoden sind listen, tuple, bzw. sogenannte numpy.arrays und pandas.dataframes. Aufgrund der limitierten Zeit im PGP 1 werden wir uns hier lediglich mit zwei dieser vier Methoden auseinander setzen. \n", "\n", "Fangen wir zunächst mit Listen an. Eine Liste ist eine Ansammlung von Werten, welche alle den gleichen oder ganz unterschiedliche Datentypen haben können. Eine Liste kann auf zwei unterschiedliche Art und Weisen erstellt werden:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2019-10-27T12:25:06.446484Z", "start_time": "2019-10-27T12:25:06.432594Z" } }, "outputs": [], "source": [ "Messwerte1 = ['Wert1', 'Wert2', 'Wert3'] # Variante 1\n", "Messwerte1" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2019-10-27T12:25:06.477151Z", "start_time": "2019-10-27T12:25:06.449263Z" } }, "outputs": [], "source": [ "Messwerte2 = list([2, 0.9, '1']) # Variante 2\n", "Messwerte2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Sobald wir eine liste erstellt haben, können wir eine ganze Reihe von unterschiedlichen Manipulationen durchführen um sie nach unserem Belieben zu verändern.\n", "\n", "Wir können zum Beispiel die bestehende Liste um ein Wert erweitern (`append`) oder einen zusätzlichen Wert an eine beliebige Stelle in der Liste hinzufügen (`insert`)." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2019-10-27T12:25:06.492972Z", "start_time": "2019-10-27T12:25:06.480376Z" } }, "outputs": [], "source": [ "Messwerte1.append('Wert5')\n", "Messwerte1" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2019-10-27T12:25:06.509050Z", "start_time": "2019-10-27T12:25:06.496701Z" } }, "outputs": [], "source": [ "Messwerte1.insert(4, 'Wert4')\n", "Messwerte1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ups, was ist denn in der letzten Zelle passiert? Wert4 wurde ja garnicht an Stelle 4 der Liste gesetzt, Python scheint nicht zählen zu können... \n", "\n", "Leider zählt Python doch richtig. In Python läuft der Index von Objekten in einer Liste oder ähnlichem immer von 0,1,2,3...n. Dies können wir auch ganz einfach überprüfen in dem wir unsere Liste in verschiedene \"Scheiben\" schneiden (so genanntes slicing). Dies geht wie folgt:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2019-10-27T12:25:06.524167Z", "start_time": "2019-10-27T12:25:06.511411Z" } }, "outputs": [], "source": [ "NeueWerte = ['Wert1', 'Wert2', 'Wert3', 'Wert4', 'Wert5', 'Wert6'] " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Die kleinste Scheibe, welche wir abschneiden können, ist ein einzelner Wert:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2019-10-27T12:25:06.540756Z", "start_time": "2019-10-27T12:25:06.525161Z" } }, "outputs": [], "source": [ "NeueWerte[0] # Hier seht ihr, dass der erste Wert den Index 0 hat." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2019-10-27T12:25:06.556003Z", "start_time": "2019-10-27T12:25:06.541754Z" } }, "outputs": [], "source": [ "wert_index_2 = NeueWerte[2] \n", "wert_index_2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Wie bei einer Pizza können wir uns natürlich auch größere Stücke nehmen." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2019-10-27T12:25:06.571456Z", "start_time": "2019-10-27T12:25:06.561307Z" } }, "outputs": [], "source": [ "NeueWerte[0:3] " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2019-10-27T12:25:06.603263Z", "start_time": "2019-10-27T12:25:06.579819Z" } }, "outputs": [], "source": [ "NeueWerte[2:5] # Ihr seht Python behandelt den letzten Wert wie in einem offenen Intervall [2,5)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2019-10-27T12:25:06.634032Z", "start_time": "2019-10-27T12:25:06.607460Z" } }, "outputs": [], "source": [ "NeueWerte[2:] # Hier werden alle Werte mit dem Index >= 2 zurück gegeben" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2019-10-27T12:25:06.649485Z", "start_time": "2019-10-27T12:25:06.635504Z" } }, "outputs": [], "source": [ "NeueWerte[-3:] # Mit negativen Zahlen fangt ihr vom Ende der Liste an" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Neben `insert`, `append` und `slicing` bietet Python noch ein paar weitere Listenmanipulationen an. Mit Hilfe des `+` Operators könnt ihr die Werte in einer Liste direkt an eine andere Liste anfügen." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2019-10-27T12:25:06.680320Z", "start_time": "2019-10-27T12:25:06.654941Z" } }, "outputs": [], "source": [ "Messwerte1 + NeueWerte" ] }, { "cell_type": "markdown", "metadata": { "ExecuteTime": { "end_time": "2019-10-27T12:22:59.315752Z", "start_time": "2019-10-27T12:22:59.289651Z" } }, "source": [ "Anders als `append` welches die zweite Liste als ganzes an die erste Liste anfügt:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2019-10-27T12:25:06.696566Z", "start_time": "2019-10-27T12:25:06.684462Z" } }, "outputs": [], "source": [ "Messwerte1.append(NeueWerte)\n", "Messwerte1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Aber aufgepasst bei `append` wird eure Liste, an welche ihr die Daten anhängt (hier Messwerte1), direkt geändert (dies gilt auch für `insert`), während ihr beim `+` Operator die Variable überschreiben müsst, damit die Änderung wirksam wird. " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2019-10-27T12:25:06.712798Z", "start_time": "2019-10-27T12:25:06.700559Z" } }, "outputs": [], "source": [ "Messwerte1 = Messwerte1 + NeueWerte\n", "# Tipp dies könnt ihr auch einfach mit Hilfe von\n", "# Messwerte1 += NeueWerte\n", "Messwerte1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Zwei weitere nützliche Befehle im Zusammenhang von Listen ist die `len`- und `range`-Funktion. \n", "\n", "`len` gibt euch die Länge einer Liste zurück " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2019-10-27T12:25:06.728109Z", "start_time": "2019-10-27T12:25:06.716256Z" } }, "outputs": [], "source": [ "print(Messwerte1)\n", "len(Messwerte1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`range` erstellt euch ganzzahlige Werte zwischen zwei ganzen Zahlen " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2019-10-27T12:25:06.745008Z", "start_time": "2019-10-27T12:25:06.731772Z" } }, "outputs": [], "source": [ "range(0, # <-- Startwert\n", " 5, # <-- Endwert (nicht mehr enthalten, offenes Ende)\n", " 2 # <-- Schrittweite\n", " )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ihr könnt die `range` Rückgabe auch wieder in eine Liste umwandeln mit" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2019-10-27T12:25:06.760820Z", "start_time": "2019-10-27T12:25:06.748599Z" } }, "outputs": [], "source": [ "list(range(0,5,2))" ] }, { "cell_type": "markdown", "metadata": { "ExecuteTime": { "end_time": "2019-10-27T12:24:39.369806Z", "start_time": "2019-10-27T12:24:39.330456Z" } }, "source": [ "
\n", " \n", "#### Aufgabe 4.a.: Erstellen von Messwerttabellen:\n", "\n", "Erstelle für jede Spalte (außer der Messwertnummer) der nachfolgende Messtabelle eine Liste, welche die Messdaten beinhaltet. Benutze anschließend den `append` Befehl um deine Spaltendaten an eine weitere Liste namens *daten* anzuhängen. \n", "\n", "| Messwertnummer | Spannung [V] | Strom [mA] | Fehler der Spannung [V] | Fehler des Stroms [mA] |\n", "|----------------|--------------|------------|-------------------------|---------------------------|\n", "| 1 | 12.00 | 110 | 0.32 | 10 |\n", "| 2 | 11.78 | 98 | 0.15 | 10 |\n", "| 3 | 12.56 | 102 | 0.63 | 10 |\n", "| 4 | 12.34 | 124 | 0.12 | 10 |\n", "| 5 | 12.01 | 105 | 0.20 | 10 |\n", "| 6 | 11.94 | 95 | 0.17 | 10 |\n", "\n", "\n", "Verwende anschließend das Slicing um die umgesetzte Leistung im Widerstand für die Meswerte 3 und 5 zu berechnen.\n", "\n", "**Tipp:**\n", "\n", "1. Ihr habt bereits die Funktionen für die Leistung in Aufgabe 3 definiert und könnt sie hier erneut verwenden. \n", "2. Das Slicen von verschachtelten Listen funktioniert genauso wie bei normalen Listen: \n", "\n", "```python\n", "spalte0 = daten[0] #<-- Wählt die Spalte 0 an \n", "spalte0[2] #<-- Wählt aus Spalte 0 den Messwert mit Index 2 an\n", "# oder als Einzeiler:\n", "daten[0][2] \n", "```\n", "\n", "3. Wie verhält sich die Messwertnummer zum Listenindex?\n", "
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.7.3" } }, "nbformat": 4, "nbformat_minor": 2 }