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 2.X NICHT 3.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 2.X NICHT 3.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 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/win7-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 erste Möglichkeit ist das Command Prompt , auch Shell genannt (siehe Abbildung Command Prompt).

Diese wird in Windows durch Klicken von Windows Anaconda Command Prompt im Windows-Startmenü gestartet.

Unter Linux-Systemen öffnet man einfach ein Terminal.

_images/win7-shell.png

Command 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 Command 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:

> 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 Command Prompt kontrolliert werden. Ansonsten muss man vorab mittels cd (= change directory) – Befehl in der Command 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 Command 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/win7-spyder.png

Python IDE Spyder (unter Windows)

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 Python Shell (analog zu Command Prompt)

Python Skript Files werden mittels Menu-Run gestartet. Die Ausgabe des Programmes erfolgt rechts unten.

Hinweis

Probieren Sie es einfach aus!

  • Tippen Sie print "Hello World" in die Python Shell 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"

Ausgabe:

Hello World

Bemerkung

Mit dem Befehl print wird Information in der Python Shell ausgegeben. Spyder erlaubt sowohl Python 2 (print "..") als auch Python 3 (print ("..")) Syntax (siehe unten).

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 (derzeit Standard), zukünftige Weiterentwicklung ist fraglich.
  • Python 3 ist semantisch korrekter, bietet neue Features und wird weiterentwickelt.

Mein Vorschlag:

  • Auf Python >=2.7 arbeiten. Viele Python 3 Features sind implementiert.
  • Kompatibilität zu Python 3 prüfen mit der Option -3 beim Aufruf (python -3 hello.py).
  • eventuell mit dem Skript 2to3 von Python 2 auf 3 portieren.

In dieser LVA verwenden wir ausschließlich Python 2.

2.2. Python Hilfe

Bemerkung

Alle Python-Skripts dieses Skriptums finden Sie unter https://www.ilsb.tuwien.ac.at/lva/317.530_2019/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
  • Python GE-PACKT, Reihe: mitp Ge-packt, von Michael Weigend. Sehr gutes, leicht lesbares Buch, wie der Name schon sagt - eher kurz gehalten.
  • Python 3: Lernen und professionell anwenden, Reihe: mitp Professional, von Michael Weigend. Sehr gutes, leicht lesbares Buch, im Vergleich zum vorhergehenden Buch wesentlich umfangreicher.
  • Python Das umfassende Handbuch, Rheinwerk, von Peter Kaiser, Johannes Ernesti. Sehr gutes schlankes Buch.
Online Tutorials / Bücher
Sonstiges

2.3. Python als Taschenrechner

Die Python Command Prompt kann wie ein Taschenrechner eingesetzt werden. Eine ausführliche Beschreibung findet sich im Python Tutorial.

Starten Sie die Command Prompt bzw. tippen Sie die Befehle in die rechte untere Ecke in Python IDE Spyder ein. Anbei ein paar Beispiele.

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 ENTER bestätigt man die Eingabe.
  • Ein ... deutet darauf hin, dass eine weitere Eingabe mit Einrückung erwartet wird.

Ein- und Ausgaben am Command Prompt Fenster:

>>> 2 + 2
4
>>> # Dies ist ein Kommentar
... 2 + 2
4
>>> 2 + 2  # und dies ist ein Kommentar in derselben Zeile wie Code
4
>>> (50 - 5 * 6) / 4
5.0
>>> 8 / 5  # Achtung: Brüche gehen in Python 2 verloren, nicht in 3
1
>>> 8 / 5. # Saubere Programmierung funktioniert in beiden Versionen
1.6
>>> 9**0.5 # Wurzel
3.0

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

>>> width = 20
>>> height = 5 * 9
>>> width * height
900

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

>>> # Versuch eine undefinierte Variable abzurufen
... n
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
NameError: name 'n' is not defined

Werden Operanden verschiedener Zahlentypen durch einen Operator verknüpft, dann werden ganzzahlige Operanden in Fließkommazahlen umgewandelt:

>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5

2.4. Python Skripte

Bislang haben wir Anweisungen (Befehle) in der Python Shell getestet. Ein richtiges 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_2019/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    : 26.02.2014
 
Mein erstes Python Skript zur Berechnung von 
Umfang und Fläche 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:

Mein erstes Python Skript zur Berechnung von
Umfang und Fläche eines Kreises.

Radius  =  1.5
Umfang  =  9.42477
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. ‘oe’ 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 2 Syntax. In Python 3 würde man z.B. schreiben

    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!

Warnung

Tabulator werden intern durch acht Leerzeichen ersetzt. Dies kann aber zu schwer auffindbaren Fehlern führen, denn viele Editoren verwenden standardmäßig eine Tabulatorweite von vier Leerzeichen! 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 2

*Aufgabe 2.0

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!

  6. Welches Ergebnis erwarten Sie für b / 2, wenn b auf 1 bzw. 1.0 gesetzt wird?

Aufgabe 2.1

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. Hausaufgaben

Hausaufgabe 1.1 (1 Punkt)

Gegeben ist folgende Berechnungsvorschrift für x:

x :=  d \cdot \sqrt{\left(\frac{y}{b}\right)^2 + 1}

  1. Erzeugen Sie ein Python Skript mit beliebigem Namen mittels Spyder.
  2. Definieren Sie zwei Variablen d und b mit den Werten 5 und 7
  3. Definieren Sie eine Variable y mit dem Wert 4
  4. Berechnen Sie den Wert von x für y = 4
  5. Geben Sie das Ergebnis aus 4) in der folgenden Form aus: x = ..., y = .... Setzen Sie dabei für die Punkte Ihr Ergebnis aus 4) und den Wert für y ein.
  6. Wiederholen Sie die Punkte 3), 4) und 5) für y = 2 und y = 2. (Beachten Sie den Punkt hinter 2!).
  7. Beantworten Sie die folgenden Fragen als Kommentar in Ihrem Skript: Wieso unterscheiden sich die Ergebnisse für x für y = 2 und y = 2.? Welches Ergebnis ist mathematisch richtig?

Hausaufgabe 1.2 (1 Punkt)

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!

2.8. weitere Beispiele

Aufgabe 2.2

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, d.h. die richtigen Werte liefert, unabhängig davon ob a, b und c als ganzzahlige oder Gleitkomma-Zahlen initialisiert wurden.