2. Einstieg in Python

2.1. Installation

Python ist ein Anwendungsprogramm welches frei für alle gängigen Plattformen verfügbar ist.

Laden Sie für die Übung eine Python Distribution für Ihr Betriebssysteme aus dem Internet herunter. Wir empfehlen Anaconda von Continuum Analytics (Python Version 3.X NICHT 2.X!). Dieses Paket gibt es gratis zum Download für alle gängigen Betriebssysteme.

Wichtig

Installieren Sie für die Übung eine Python Distribution für Ihr Betriebssystem. Wir empfehlen Anaconda von Continuum Analytics (Python Version 3.X NICHT 2.X!). Dieses Paket gibt es gratis zum Download für alle gängigen Betriebssysteme.

Idealerweise nehmen Sie Ihren Laptop oder ihr Tablet zur Übung mit. Notfalls läuft Python auch auf dem Table oder Smartphone.

Achten Sie bitte bei der Installation darauf, dass der Pfad, in dem Sie Anaconda installieren keine Leerzeichen oder Umlaute enthält!

Windows

Nach erfolgreicher Installation sollten Sie Anaconda im Startmenü sehen (siehe Abbildung Windows-Startmenü).

_images/win10-start.png

Windows-Startmenü

Linux
Unter Linux ist Python im Allgemeinen bereits automatisch installiert. Eventuell müssen einige Zusatzpakete dazu installiert werden.
MacOS
Verwenden Sie wie unter Windows Anaconda.

2.1.1. Python Shell

Es gibt mehrere Möglichkeiten Python zu verwenden. Die einfachste Möglichkeit ist eine Eingabeaufforderung auch Shell oder Terminal oder Konsole genannt. Diese wird in Windows durch Klicken von Anaconda Prompt (oder Anaconda Powershell Prompt) im Windows-Startmenü gestartet (siehe Abbildung Anaconda Powershell Prompt).

Diese wird in Windows durch Klicken von Windows > Anaconda > Anaconda Powershell Prompt im Windows-Startmenü (siehe oben) gestartet.

Unter Linux-Systemen öffnet man einfach ein Terminal.

_images/win10-shell.png

Anaconda Prompt (unter Windows)

In beiden Fällen startet man Python durch Eingabe des Befehls:

> python

Danach befindet man sich in der Python Shell (gekennzeichnet durch >>>). Jetzt kann man Befehle einfach eintippen und mit ENTER bestätigen um diese auszuführen:

>>> print("Hello World")
Hello World

Wann immer wir zukünftig in den Beispielen einen Code Block mit >>> beginnen, wird die Python Shell verwendet.

In der Anaconda Powershell Prompt kann man auch direkt Python Programmtext starten welcher zuvor in einem File gespeichert wurde (z.B. hello.py). Ein solches File wird in Python Skript File genannt (genaueres später):

> python hello.py

Alle Befehle in diesem File werden nacheinander ausgeführt. Dies funktioniert nur wenn Sie sich im selben Verzeichnis wie das Skript hello.py befinden. Dies kann mit dem dir (=list directory) Befehl in der Anaconda Powershell Prompt kontrolliert werden. Ansonsten muss man vorab mittels cd (= change directory) – Befehl in der Anaconda Powershell Prompt ins entsprechende Verzeichis wechseln z.B.

> cd C:\Users\Student\Documents\MeinHelloVerzeichnis
> python hello.py

2.1.2. Python IDE - Spyder

Wesentlich komfortabler ist jedoch ein IDE (integrated development enviroment). Dieses vereinigt ein Anaconda Prompt, Python Skript Editor, etc.

Anaconda stellt das IDE Spyder zur Verfügung um Python zu verwenden. Spyder startet man über das Windows-Startmenü oder ähnliches.

Danach wird wie in der Abbildung Python IDE Spyder gezeigt, ein Graphisches User Interface (GUI) angezeigt.

_images/win10-spyder.png

Python IDE Spyder (unter Windows 10)

Hinweis

Lernen Sie mit Spyder umzugehen da dieses IDE bei den Übungen verwendet wird!

Diese GUI enthält im Wesentlichen 3 Bereiche:

  • links: einen Editor zum Erzeugen von Python Skript Files (z.B. hello.py)
  • rechts oben: den Inhalt von Variablen (Genaueres später)
  • rechts unten: die IPython-Konsole (analog zu Anaconda Powershell Prompt, jedoch mit In [2]: und OUT [2]:

Python Skript Files werden mittels Menu-Run (grünes Dreieck) gestartet. Die Ausgabe des Programmes erfolgt rechts unten.

Hinweis

Probieren Sie es einfach aus!

  • Tippen Sie print("Hello World") in die Python IDE Spyder IPython-Konsole ein, bestätigen sie mit ENTER.
  • Erzeugen Sie ein File hello.py mit print("Hello World") als Inhalt und starten Sie die Skriptausführung mit Menu-Run.

Wird im Folgenden ein Python Skript File verwendet, schreiben wir kein >>> sondern einfach:

Beispiel:

a=5
b=a*a
print ("Hello World, b=" ,b)

Ausgabe:

Hello World, b= 25

Bemerkung

Mit dem Befehl print(..) wird Information in der ausgegeben. Unter Python 2 sind keine Klammern erforderlich (print "..").

2.1.3. Python 2 oder 3?

Es gibt derzeit zwei Python Versionen. Diese unterscheiden sich zwar, Standardanwender werden den Unterschied aber kaum merken. Das Problem beim Umstieg:

  • Python 2 ist weit verbreitet, jedoch gibt es zukünftige keine Weiterentwicklung.
  • Python 3 ist semantisch korrekter, bietet neue Features und wird aktiv weiterentwickelt.

Empfehlung:

  • Neue Entwicklungen: ausschließlich auf Python 3.
  • Alte Entwicklungen: mit dem Skript 2to3 von Python 2 auf 3 portieren

In dieser LVA verwenden wir ausschließlich Python 3.

2.2. Python Hilfe

Bemerkung

Alle Python-Skripts dieses Skriptums finden Sie unter https://www.ilsb.tuwien.ac.at/lva/317.530_2020/src/ zum Download.

Es gibt eine Vielzahl an Python Büchern, Dokumentationen, Tutorials, Onlinekursen, etc. Um die Auswahl zu erleichtern hier einige Tipps:

Bücher

  • A. Bell: Get Programming: Learn to code with Python, 1. Auflage, Manning Publications, 2018, https://www.manning.com/books/get-programming#toc Online Buch.
  • Python 3: Lernen und professionell anwenden, Reihe: mitp Professional, von Michael Weigend. Sehr gutes, leicht lesbares Buch, umfangreich.
Online Tutorials / Bücher
Sonstiges

2.3. Python als Taschenrechner

Die Python (genauer die IPython-Konsole im Python IDE Spyder oder auch die Anaconda Powershell Prompt) kann wie ein Taschenrechner eingesetzt werden. Eine ausführliche Beschreibung findet sich im Python Tutorial.

Starten Sie das Python IDE Spyder oder Anaconda Powershell Prompt. Im folgenden verwenden wir in Python IDE Spyder die IPython-Konsole). Tippen Sie einfach die folgenden Befehle ein und bestätigen Sie die Eingabe mit ENTER. Vorab Anmerkungen zu den Beispielen. Die Syntax Ausdrücke sind einfach:
  • Die Operatoren +, -, * und / wirken wie gewohnt.
  • Die Hochzahl startet mit **. Z.B. Wurzel **0.5.
  • Klammern können zur Gruppierung benutzt werden.
  • Das Symbol # erzeugt Kommentare.
  • Mit bestätigt man die Eingabe.
  • Ein ... deutet darauf hin, dass eine weitere Eingabe mit Einrückung erwartet wird.

Ein- und Ausgaben in der IPython-Konsole sehen wie folgt aus:

In [2]: 2 + 2
Out[2]: 4

In [3]: # Dies ist ein Kommentar

In [4]: 2 + 2  # und dies ist ein Kommentar in derselben Zeile wie Code
Out[4]: 4

In [5]: (50 - 5 * 6) / 4
Out[5]: 5.0

In [6]: 8 / 5  # Achtung: Brüche gehen in Python 2 verloren, nicht in 3
Out[6]: 1.6

In [7]: 8 // 5 # Ganzzahldivision
Out[7]: 1

In [8]: 9**0.5 # Wurzel
Out[8]: 3.0

Das Gleichheitszeichen ('=') wird benutzt um einer Variablen einen Wert zuzuweisen.

In [10]: width = 20

In [11]: height = 5 * 9

In [12]: width * height
Out[12]: 900

Variablen müssen “definiert” sein, bevor sie benutzt werden können, sonst tritt ein Fehler auf.

In [13]: # Versuch eine undefinierte Variable abzurufen

In [14]: n
Traceback (most recent call last):

  File "<ipython-input-14-ab0680a89434>", line 1, in <module>
    n

NameError: name 'n' is not defined

2.4. Python Skripte

Bislang haben wir Anweisungen (Befehle) in der IPython-Konsole getestet. Ein vollständiges Python Programm nennt man Skript. Was ist das?

  • Eine Textdatei mit der Endung .py welche
  • alle Anweisungen eines Programms enthält und
  • mittels IDE (z.B. Spyder) erstellt bzw. getestet werden kann.

Unser erstes Python Skript (kreis.py):

Hinweis

Alle Beispielfiles finden Sie unter https://www.ilsb.tuwien.ac.at/lva/317.530_2020/src/ Laden Sie alle Skripte herunter und öffnen Sie das jeweilige Skript mit Spyder.

Hinweis

Mein Tipp: Zuerst versuchen die Beispiele selbst zu lösen, danach die richtige Lösung durchsehen!

# -*- coding: utf-8 -*-
"""
File    : kreis.py
Author  : D.H. Pahr 
Date    : 24.06.2020
 
Mein erstes Python Skript zur Berechnung von 
Umfang und Flaeche eines Kreises.
"""

# Definition von Variablen 
radius = 1.5 
pi     = 3.14159

# Berechne ...
umfang  = 2 * radius * pi 
flaeche = radius**2 * pi 

# Ausgabe 
print(__doc__)
print("  Radius  = ", radius)
print("  Umfang  = ", umfang)
print("  Flaeche = ", flaeche)

Wird dieses Skript ausgeführt, erhält man folgende Ausgabe:

In [16]: runfile('C:/Users/pahr/tuw/01_Lehre/Skripten/GdP/src/kreis.py', wdir='C:/Users/pahr/tuw/01_Lehre/Skripten/GdP/src')

File    : kreis.py
Author  : D.H. Pahr
Date    : 24.06.2020

Mein erstes Python Skript zur Berechnung von
Umfang und Flaeche eines Kreises.

  Radius  =  1.5
  Umfang  =  9.424769999999999
  Flaeche =  7.0685775

Bemerkungen dazu:

  • Die erste Zeile gibt das Coding an. Möchte man Umlaute darstellen, müsste man dieses ändern. Diese Zeile kann man auch löschen. Tipp: Verwenden Sie keine Akzente oder Sonderzeichen - nur den standardmäßigen englischen Schriftsatz verwenden d.h. ‘ae’ statt ‘ä’ schreiben, usw!

  • Im Code sind 2 Kommentartypen. Der Kommentar am Anfang (mit """) heißt docstring, geht über mehrere Zeilen und wird ausgeben mit:

    print(__doc__)
    
  • Die Kommentare # beschreiben den Programmablauf.

  • Alle Variablen sind bewusst ausgeschrieben und damit selbsterklärend (z.B radius statt r).

  • Wir haben pi selbst definiert, später werden wir sehen, es geht einfacher!

  • Das print Statement ist Python 3 Syntax, d.h mit Klammern:

    print("Radius  = ", radius)
    

Hinweis

Probieren Sie es einfach aus!

  • Spyder starten
  • Text reinkopieren bzw. bestehendes Python Skript File laden
  • ein neues Skript als mein_kreis.py abspeichern
  • Ausgabe betrachten, jede Zeile versuchen zu verstehen!

2.5. Einrückungen

Im vorhergehenden Beispielen wurden alle Anweisungen nacheinander ausgeführt.

Allgemein unterscheidet man zwischen Anweisungskopf und Anweisungskörper, wobei der Körper weitere Anweisungen enthalten kann:

Hier ein Beispiel:

if x > 10:
    print("Python leistet gute Arbeit!")
    print("Zweite Zeile...")

Bemerkungen dazu:

  • if x > 10: heißt Anweisungskopf.

  • Der Anweisungskopf endet mit einem :

  • Danach beginnt der Anweisungskörper.

  • Dieser wird durch eine tiefere Einrückung des Anweisungskörpers festgelegt.

  • Die Einrückung kann sowohl über Tabulatoren als auch über Leerzeichen erfolgen.

  • Tipp: 2-4 Leerzeichen als Einrückung verwenden! Standardeinstellung bei der verwendeten Anaconda Version sind 4 Leerzeichen und ein Tabulator wird in Leerzeichen umgewandelt:

    _images/einrueckung.png

Warnung

Tabulator werden je nach Editor Python intern durch 4-8 Leerzeichen ersetzt. Dies kann zu schwer auffindbaren Fehlern führen. Am Besten IMMER Leerzeichen verwenden.

Vergleich mit anderen Programmiersprachen:

  • In Fortran lautet eine ähnliche Anweisung z.B.:

    IF ( x .GT. 10 ) THEN
      WRITE(6,*) "Fortran, alt aber gut!"
      WRITE(6,*) "Zweite Zeile..."
    ENDIF
    
  • In C++ würde man schreiben:

    if ( x > 10 ) {
      printf ("C++, die Sprache für Experten!")
      printf ("Zweite Zeile...")
    }
    

Einrückungen sind bei diesen beiden Sprachen nicht notwendig. Dafür muss man mehr schreiben (ENDIF bzw. {..}). Man macht der Übersichtlichkeit halber aber trotzdem Einrückungen!

2.6. Übungsbeispiele

Aufgabe 2.1

Verwendung von Python als Taschenrechner:

  1. Öffnen Sie eine Python Shell (oder starten Sie Python auf Ihrer Windows/Linux Shell)

  2. Definieren Sie drei Variablen, a, b und c. Belegen Sie diese Variablen mit den Werten 1, 2 und 3.

  3. Berechnen Sie die folgenden Werte und geben Sie das Ergebnis auf der Konsole mit einem print aus.
    • a * c
    • b / 2
  4. Setzen Sie den Wert der Variable c zu -35.

  5. Führen Sie Schritt 3 und 4 erneut durch. Probieren Sie die Pfeil oben bzw unten Tasten aus!

Aufgabe 2.2

Gegeben sei eine quadratische Gleichung

a*x^2+b*x+c = 0

  1. Öffnen Sie eine Python Shell.
  2. Definieren Sie drei beliebige Variablen, a, b und c.
  3. Berechnen Sie die beiden Lösungen der quadratischen Gleichung und geben Sie das Ergebnis mit einem print aus.
  4. Erzeugen Sie ein Python Skript mit beliebigem Namen mittels Spyder.
  5. Übertragen Sie die Berechnungen der quadratischen Gleichung auf ein Skript und führen Sie das Skript mittels Run aus. Welche Vorteile hat so ein Skript?

Generelle Hinweise ab Aufgabe 2.1, Pkt 4)

  • Verwenden Sie ein IDE (z.B Spyder) und machen Sie für jede Übung ein eigens Python File (z.B. hw2.py)
  • Versuchen Sie die Programme selbstständig zu lösen, nur so lernen Sie Programmieren!
  • Zuerst das Skriptum oder andere Unterlagen durchlesen, dann erst zu Programmieren beginnen!
  • Kommentieren Sie Ihren Code ausführlich, damit Sie auch nach Wochen noch verstehen was Sie gemacht haben. Die Ausgabe sollte den Programmablauf “sichtbar machen”.
  • Speichern Sie die Files zwischendurch ab, je nach IDE auch bevor Sie Run klicken.
  • Geben Sie zur Kontrolle nach Code-Modifikationen das Ergebnis in der Konsole mittels print aus.

2.7. weitere Übungsbeispiele

Aufgabe 2.3

Gegeben sei eine quadratische Funktion in x:

f(x) = a*x^2+b*x+c

  1. Erzeugen Sie ein Python Skript mit beliebigem Namen mittels Spyder.
  2. Definieren Sie 3 Variablen, a, b und c mit beliebigen Werten (a \neq 0)
  3. Berechnen Sie den Extremwert der Funktion und weisen Sie ihn der Variable f0 zu. (Die entsprechende extremale Position x0 ist die Stelle, an der die erste Ableitung der Funktion null ist.)
  4. Ermitteln Sie zusätzlich, ob es sich bei dem Extremwert um ein Minimum oder Maximum handelt.
  5. Geben Sie das Ergebnis als “Minimum: ...” bzw. “Maximum: ...” aus.

Hinweis

Achten Sie darauf, dass das Skript fuer beliebige Werte fuer a, b und c funktioniert.

Aufgabe 2.4

Erstellen Sie eine Variable Bytes und weisen Sie ihr eine beliebige positive Integer-Zahl zu. Bytes gibt die Anzahl an verfügbaren Bytes an. Was ist die größte Integerzahl, die in dieser Anzahl an Bytes abgespeichert werden kann? (Gehen Sie davon aus, dass kein Vorzeichen mitgespeichert wird, d.h. es handelt sich um einen unsigned integer!).

Bestimmen Sie mittels eines kurzen Python-Skripts die größte Integerzahl in Abhängigkeit von der Variable Bytes und geben Sie diese auf der Konsole aus. Testen Sie Ihr Skript mit verschieden Werten für Bytes.

Hinweis

Die größte Integerzahl berechnet sich anhand der Formel:

Zahl = 2^{Bits} - 1

Beachten Sie den Unterschied zwischen Bit und Byte!