#!/usr/bin/env python # coding: utf-8 # # Python Einführungskurs für das Physikalische Anfängerpraktikum der Universität Heidelberg # --- # # ## Inhalt # # - [Einleitung und Inhalt](index.ipynb) # - [Python installieren und ausführen](setup.ipynb) # # # - [101 - Grundlagen der Programmierung in Python](101%20-%20Grundlagen%20der%20Programmierung%20in%20Python.ipynb) # - [102 - Control Flow](102%20-%20Control%20Flow.ipynb) # - [103 - Funktionen und Module](103%20-%20Funktionen%20und%20Module.ipynb) # # # - [201 - Numerik mit Numpy](201%20-%20Numerik%20mit%20Numpy.ipynb) # - [202 - Plots mit Matplotlib](202%20-%20Plots%20mit%20Matplotlib.ipynb) # - [203 - Fits mit Scipy](203%20-%20Fits%20mit%20Scipy.ipynb) # # # - [301 - Workflows mit Daten im PAP](301%20-%20Workflows%20mit%20Daten%20im%20PAP.ipynb) # # # - [Challenges](challenges.ipynb) # --- # # ## Fangen wir an! # # Dieser Kurs besteht aus interaktiven _[Jupyter Notebooks](http://jupyter.org)_. Du schaust gerade auf eines! In einem Notebook kannst du Code ausführen und zusätzlich erklärenden Text, $\LaTeX$ Gleichungen, Bilder und mehr einfügen. Damit eignen sich Jupyter Notebooks hervorragend für wissenschaftliche Arbeit. # # Für die Auswertung der Praktikumsversuche wirst du Python und das Jupyter Notebook auf deinem eigenen Rechner ausführen müssen. Das kannst du jetzt schon erledigen, wenn du diesen Kurs offline machen möchtest, oder erst am Ende des Kurses: # # - [>> Python installieren und ausführen](setup.ipynb) # # Ohne weitere Vorbereitung kannst du den Kurs auch online absolvieren. Dazu stellen wir das Kursmaterial interaktiv zu Verfügung. Doppelklicke einfach einmal auf diesen Text. Kannst du die Zelle nun bearbeiten? Dann ist alles bereit und du kannst dir die URL dieser Seite speichern, um nach bis zu einer Stunde Inaktivität zu deinem gespeicherten Fortschritt zurückzukehren. Drücke ` + ` und lies einfach weiter. # # Noch nicht im interaktiven Modus? # # - [Interaktive Kursmaterialen starten](https://mybinder.org/v2/gh/nilsleiffischer/python-course/deploy?filepath=index.ipynb) # --- # # ## Programmieren in der Wissenschaft # # Viele Aufgaben und Probleme, u.a. in der Wissenschaft, können wir an einen Computer auslagern. Doch dieser benötigt eine exakte Anleitung. Die Aufgabe des Programmierers ist, das Problem konzeptionell zu verstehen und in eine Aneinanderreihung von Befehlen zu übersetzen, die ein Computer ausführen kann. # # Gut programmieren zu können heißt nicht einfach nur die Programmiersprache zu kennen oder sehr schnelle Programme zu schreiben, sondern auch: # # - ein Problem aufzuteilen bis einzelne Teilprobleme von einem Computer gelöst werden können, und diese wieder zusammenzusetzen # - sich passender Tools zu bedienen, wenn diese bereits ein Teilproblem lösen # - ein Programm systematisch untersuchen und verstehen zu können, bspw. um Fehler zu finden # - Programme zu schreiben, die _schnell genug_ sind, und nicht so schnell wie irgend möglich # - Programme zu schreiben, die auch eine andere Person versteht (oder du selbst noch im nächsten Jahr) # # > Der letzte Punkt ist gerade in der Wissenschaft unter den Stichwörtern der **Reproduzierbarkeit** und **_open science_** von größter Wichtigkeit. Es bedeutet, dass auch andere deinen Code verstehen und selbst ausführen können und dabei die gleichen Resultate erhalten wie du. Du solltest Code immer mit der Annahme schreiben, dass andere Personen ihn lesen werden. # ![Python Logo](https://www.python.org/static/community_logos/python-logo-master-v3-TM.png) # ## Wie unterscheidet sich Python von anderen Programmiersprachen? # # [Python](https://python.org) ist eine _interpretierte_ Programmiersprache, d.h. der Code wird nicht kompiliert bevor er ausgeführt wird. Dadurch ist ein Python-Programm in der Regel langsamer als ein Äquivalentes, das bspw. in C, C++ oder Fortran geschrieben wurde. Warum programmieren wir also in Python? # # - Die Syntax ist so einfach und übersichtlich, dass sich Python Code häufig schon fast wie Englisch liest. # - Es kann sehr viel schneller gehen ein Python Programm zu schreiben, das tut was man erwartet, als in vielen anderen Sprachen. # - Ein Python Programm kann recht einfach externen Code in anderen Sprachen aufrufen, sodass rechenintensive Operationen in C oder Fortran ausgelagert werden können. Numerische packages wie _Numpy_, die wir in der Wissenschaft verwenden, machen sich dies zu nutze. So erhalten wir die Annehmlichkeit von Python und die Geschwindigkeit von C! # - In diesem Einführungskurs liegt der Fokus auf Aspekten der Programmierung, die in der wissenschaftlichen Anwendung besonders wichtig oder praktisch sind. Python ist jedoch eine beliebte und sehr vielseitige Sprache und wird auch in vielen anderen Bereichen verwendet. Was du hier lernst kannst du bspw. auch zum Schreiben von [Servern](https://www.djangoproject.com), [Webseiten](https://github.com/getpelican/pelican) oder [Spielen](link_to_pygame) anwenden! # ### Woher kommt der Name _Python_? # # Obwohl das Python Logo Schlangen enthält kommt der Name _Python_ ursprünglich von der [Monty Python](http://en.wikipedia.org/wiki/Monty_Python) Comedy Gruppe! # # ![](https://upload.wikimedia.org/wikipedia/en/c/cb/Flyingcircus_2.jpg) # # Aus diesem Grund enthält die offizielle Python Dokumentation viele Referenzen zu Monty Python. # ### Ein Hinweis zu Python Versionen 2 und 3 # # Python liegt momentan in Version 3 vor, doch viele verwenden noch immer die Version 2.7, da noch nicht alle Pakete mit Version 3 kompatibel sind. In diesem Kurs lernen wir die Python 3 Syntax, doch an den entsprechenden Stellen zeige ich die wichtigsten Änderungen, falls du mal mit dem älteren Python 2 arbeiten musst. # ## Feedback erwünscht! # # Mit eurem Feedback können wir diesen Kurs und die Verwendung von Python im Physikalischen Anfängerpraktikum für euch weiter verbessern. Wir bitten euch daher, kurz die folgenden Fragen zu beantworten: # # - [Feedback zum Online-Einführungskurs und Python im PAP](https://goo.gl/forms/nvuPvEOCP1CMrp5X2) # # Meldet euch außerdem jederzeit bei [Nils Fischer](https://nilsleiffischer.de) (Konzeption und Implementierung des Kurses) oder [Jens Wagner](http://www.physi.uni-heidelberg.de/Einrichtungen/AP/) (Praktikumsleitung) mit Anmerkungen oder Vorschlägen. Der Kurs steht zudem als Open Source [auf GitHub](https://github.com/nilsleiffischer/python-course) zur Verfügung. # --- # # Hier geht's zur ersten Lektion: # # [**>> 101 - Grundlagen der Programmierung in Python**](101%20-%20Grundlagen%20der%20Programmierung%20in%20Python.ipynb)