Python beginner

Themen

  • Ãœberblick und Charakteristika von Python
  • Installation
  • interaktive Python-Umgebungen
  • Variablen und Grundlegende Datentypen
  • zusammengesetzte Typen: dict, list, tuple
  • Datentypen
  • Hilfe und Dokumentation
  • Builtins und die Standard-Library
  • Kontrollstrukturen
    • if / else
    • Schleifen (while, for)
  • Funktionen
  • Codequalität und Linting
  • Debugging

Python: Ãœberblick

Python

  • einfache Syntax, einfach zu lernen
  • vielfältig einsetzbar (Wissenschaft, Web-Entwicklung, GUI-Programmierung)
  • umfangreiche Standardlibrary und viele zusätzlich installierbare Module

Python Weiterentwicklung und Versionen

Python 3: neue "minor"-Version (z.B. 3.9) wird jeden Oktober veröffentlicht

Python 2: Unterstützung endete 2019, zu diesem Zeitpunkt nutzten es noch 10% der Entwickelr

Codebeispiel

# this is a comment

a = 3
b = 4
print(a * b)

if a * b > 10:
    print('greater')

Installation unter Windows

Installation unter Windows

Download von https://python.org

Während der Installation: Häkchen bei "Add Python 3.x to PATH" setzen

Installation unter Windows

Überprüfen der Installation:

python --version sollte die Versionsnummer anzeigen

pip install requests sollte ein kleines Python-Paket namens requests erfolgreich herunterladen und installieren

Installation unter Windows

Python Installation beinhaltet:

  • Python-"Runtime" zum ausführen von Python-Code
  • IDLE: Einfache Entwicklungsumgebung
  • interaktive Python-Konsole
  • PIP: Paketmanager zum Installieren von Erweiterungen

Python im interaktiven Modus

Python im interaktiven Modus

Optionen, um Python-Code auszuführen:

  • Schreiben eines Programms als Datei / Sammlung von Dateien, Ausführen dieses Programms (z.B. graphische Benutzeroberflächen, Web-Anwendungen, Datenverarbeitungs-Prozesse)
  • Schreiben von Code in eine interaktive Konsole / Notebook (z.B. für schnelle Berechnungen, Experimente, Datenanlyse)

Python im interaktiven Modus

Möglichkeiten:

  • lokale Installation
  • online-Notebook (Jupyter)

Python im interaktiven Modus (lokal)

Starten:

  • Terminal-Befehl python
  • aus dem Startmenü (z.B. Python 3.9)

Beenden:

exit()

Python im interaktiven Modus (online)

einfach:

https://www.python.org/shell/

Jupyter Notebooks:

Variablen

Variablen

birth_year = 1970
current_year = 2020
age = current_year - birth_year

Variablennamen werden üblicherweise klein geschrieben; Wörter werden durch Unterstriche getrennt

Variablennamen dürfen nur aus Buchstaben, Ziffern und Unterstrichen bestehen

Variablen

Ãœberschreiben (neu setzen) von Variablen:

name = "John"
name = "Jane"
a = 3
a = a + 1

Grundlegende (primitive) Datentypen

Grundlegende (primitive) Datentypen

  • int (integer): Ganzzahl
  • float: Kommazahl
  • str (string): Text
  • bool (boolean): Ja/Nein - Wert (Wahrheitswert)
  • none: fehlender / unbekannter Wert

int and float

Beispiel:

(7 - 3) * 0.5 / 3.5

str

Ein String - auch Zeichenkette - repräsentiert Text

Begrenzung durch einfache oder doppelte Anführungszeichen

greeting = "Hello"
name = 'John'

Strings zusammensetzen

name = 'John'

Variablen einsetzen (f-Strings):

message1 = f"Hello, {name}!"

Strings zusammensetzen:

message2 = "Hello, " + name + "!"

Strings - Escape-Sequenzen

Problem: Wie schreiben wir Zeichen wie z.B. " innerhalb eines Strings?

Ungültig:

text = "He said: "hi!""

Strings - Escape-Sequenzen

Lösung:

text = "He said: \"hi!\""

Python interpretiert die Zeichenfolge \" wie ein einzelnes "

Strings - Escape-Sequenzen

Zeilenumbruch: \n

a = 'line 1\nline 2'

einzelner Backslash: \\

b = 'C:\\docs'

bool

Boolescher Wert: Ja/Nein - Wert

In Python: True oder False

beachte Großschreibung

None

Wert ist unbekannt oder fehlt

first_name = "John"
middle_name = None
last_name = "Doe"

Typen und Typenumwandlungen

Typen

Den Typ einer Variablen stellen wir mit type() fest:

a = 4 / 2

type(a)

Typenumwandlungen

Datentypen können mit Funktionen wie int(), float(), str(), bool(), ... ineinander umgewandelt werden

pi = 3.1415
pi_int = int(pi)
message = "Pi is approximately " + str(pi_int)

Funktionen

Funktionen

Eine Funktion ist ein "Unterprogramm", das eine bestimmte Aufgabe erledigen kann

Beispiele für vordefinierte Funktionen:

  • len() kann die Länge eines Strings bestimmen (oder einer Liste, ...)
  • id() kann die interne ID eines Objekts bestimmen
  • type() kann den Typ eines Objekts bestimmen
  • print() kann Ausgaben in das Terminal schreiben
  • ...

Funktionen

Funktionen können Parameter übergeben bekommen und einen Rückgabewert zurückliefern.

Beispiel: len() kann einen String als Parameter übergeben bekommen und einen Int als Rückgabewert liefern

Beispiel: print() kann verschiedene Objekte als Parameter entgegennehmen; es liefert keinen expliziten Rückgabewert

Methoden

Methode: eine Funktion, die zu einem bestimmten Objekttyp gehört (z.B. zu str)

Beispiele für String-Methoden:

  • first_name.upper()
  • first_name.count("a")
  • first_name.replace("a", "@")

Zusammengesetzte Datentypen: dict, list, tuple

dict

Dicts (dictionaries) sind Zuordnungen, die bestimmten Einträgen zugehörige Werte zuweisen.

person = {
    "first_name": "John",
    "last_name": "Doe",
    "nationality": "Canada",
    "birth_year": 1980
}

dict

Elementzugriff bei dicts

person["first_name"]
person["first_name"] = "Jane"

dict

Ãœbung:

Erstelle und verändere Dictionaries, die verschiedene Objekte repräsentieren - z.B.:

  • ein Datum (z.B. 23. Oktober 1971)
  • einen Kalendereintrag
  • eine Person
  • ein Produkt in einem Online-Shop
  • ...

list

Listen sind ein Datentyp, der eine Folge von anderen Objekten repräsentiert

primes = [2, 3, 5, 7, 11]

users = ["Alice", "Bob", "Charlie"]

products = [
    {"name": "IPhone 12", "price": 949},
    {"name": "Fairphone", "price": 419},
    {"name": "Pixel 5", "price": 799}
]

list

Auslesen von Listenelementen mittels Listenindex (bei 0 beginnend)

users = ["Alice", "Bob", "Charlie"]

users[0]
users[1]
users[-1] # last element

list

Ãœberschreiben von Listenelementen

users[0] = "Andrew"

list

Anhängen von Listenelementen

users.append("Dora")

list

Entfernen des letzen Elements:

users.pop()

Entfernen anhand des Index:

users.pop(0)

list

Die Länge einer Liste bestimmen:

len(users)

list

Ãœbungen:

Erstelle und ändere Daten, die aus dicts und lists bestehen und die verschiedene Objekte repräsentieren, z.B.:

  • Todos
  • Kalendereinträge
  • Produkte in einem Online-Shop / Einkaufskorb
  • Transaktionen auf einem Bankkonto

tuple

date = (1973, 10, 23)
  • Anwendungsbereich: ähnlich wie Dicts
  • Verhalten: ähnlich wie Listen

tuple

Anwendungsbereich: ähnlich wie dict:

point_dict = {"x": 2, "y": 4}
point_tuple = (2, 4)

date_dict = {
  "year": 1973,
  "month": 10,
  "day": 23
}
date_tuple = (1973, 10, 23)

Jeder Eintrag in einem Tupel hat eine bestimmte Bedeutung

tuple

Verhalten: ähnlich wie Listen:

date_tuple[0] # 1973
len(date_tuple) # 3

Im Gegensatz zu Listen sind Tupel unveränderlich (kein .append / .pop / ...)

Datentypen - Aufgaben

erstelle und ändere Datenstrukturen, die dicts, lists und tuples beinhalten

Objektreferenzen und Mutationen

Objektreferenzen und Mutationen

Was ist der Wert von a am Ende dieses Programms?

a = [1, 2, 3]
b = a
b.append(4)

Objektreferenzen und Mutationen

Eine Zuweisung (z.B. b = a) versieht ein existierendes Objekt mit einem neuen (zusätzlichen) Namen.

Im Hintergrund steht nach wie vor nur ein einzelnes Objekt.

Objektreferenzen und Mutationen

Falls das Original erhalten bleiben soll, kann es kopiert werden oder die abgeänderte Variante basierend auf dem alten Objekt erstellt werden:

a = [1, 2, 3]
# creating a new copy
b = a.copy()
# modifying b
b.append(4)
a = [1, 2, 3]
# creating a new object b based on a
b = a + [4]

Objektreferenzen und Mutationen

Manche Objekte in Python können direkt verändert (mutiert) werden - z.B. via .append(), .pop(), ...

Beispiele: list, dict

Viele einfache Objekte sind nach ihrer Erstellung unveränderlich.

Beispiele: int, float, str, bool, tuple

Hilfe und Dokumentation

Hilfe und Dokumentation

Ressourcen:

  • offizielle Guides
  • offizielle API-Referenz
  • Antworten auf Fragen: Stack Overflow

Hilfe und Dokumentation

Interaktive Hilfe zu Objekten in der Python-Konsole:

help(list)

(Navigieren durch lange Ausgaben via Leertaste und Enter, Beenden via Q)

Hilfe und Dokumentation

Dokumentation zu Built-Ins und der Standard Library:

https://docs.python.org/3/library/index.html (Google: "python library")

Bietet ähnliches wie die Funktion help, oft mit etwas ausführlicheren Beschreibungen

Hilfe und Dokumentation

hilfreiche Website mit Antworten für viele häufige Fragen: StackOverflow

Hilfe und Dokumentation

weitere kostenlose Ressourcen:

Fehlermeldungen und Tracebacks

Fehlermeldungen und Tracebacks

Beispiel für Code, der eine Fehlermeldung erzeugt:

open("foo.txt")

Fehlermeldung:

Traceback (most recent call last):
  File "xyz.py", line 1, in <module>
    open("foo.txt")
FileNotFoundError: [Errno 2] No such file or directory: 'foo.txt'

Letzte Zeile: Beschreibung des Fehlers

darüber: Ursprung des Fehlers

Fehlermeldungen und Tracebacks

Beispielcode mit einer Kette von Funktionsaufrufen:

import shutil
def demo_remove_dir_error():
    shutil.rmtree("./does_not_exist")

demo_remove_dir_error()

Fehlermeldungen und Tracebacks

Fehlermeldung mit einer Kette von Funktionsaufrufen:

Traceback (most recent call last):
  File "...\demo_remove_dir_error.py", line 5, in <module>
    demo_remove_dir_error()
  File "...\demo_remove_dir_error.py", line 3, in demo_remove_dir_error
    shutil.rmtree("./does_not_exist")
  File "...\lib\shutil.py", line 748, in rmtree
    return _rmtree_unsafe(path, onerror)
  File "...\lib\shutil.py", line 607, in _rmtree_unsafe
    onerror(os.scandir, path, sys.exc_info())
  File "...\lib\shutil.py", line 604, in _rmtree_unsafe
    with os.scandir(path) as scandir_it:
FileNotFoundError: [WinError 3] The system cannot find the
    path specified: './does_not_exist'

VS Code für Python

VS Code für Python

verbreitete Entwicklungsumgebungen für Python:

  • VS Code (open source)
  • PyCharm Community (open source)
  • PyCharm Professional

VS Code

Grundlegendes:

  • Öffnen eines Ordners
  • Datei-Explorer
  • Erstellen einer neuen (Python-)Datei
  • Teilen der Editor-Ansicht

Python-Extension

Funktionalität:

  • anzeigen von Fehlern / Warnungen (pylint, flake8)
  • Automatische Formatierung (mittels black / autopep8 / yapf)
  • Debugging
  • Jupyter Notebooks

Python-Extension

Installation:

  • Öffne die Extensions-Sidebar: fünftes Symbol auf der linken Seite
  • Installiere die Extension namens Python von Microsoft

Registrierung der Python-Installation in VS Code:

  • Öffne die Befehlspalette (F1 oder Ctrl + Shift + P)
  • Suche nach "Python: select interpreter"
  • Enter
  • warte ...
  • wähle die gewünschte Python-Version (vermutlich nur 1 Option verfügbar)

Konfiguration

mittels File - Preferences - Settings

mögliche Einstellungen:

  • Auto Save
  • Format on Save
  • Word Wrap
  • Python > Formatting: Provider (Empfehlung: black)
  • ...

Befehlspalette

Befehlspalette: via F1 oder Ctrl + Shift + P

  • durchsuchbar
  • zeigt Kurzbefehle an

Beispiele für Befehle:

  • View: Toggle Terminal
  • Find
  • Format Document
  • ...

Python-Extension: Ausführen von Programmen

Debug - Start Without Debugging (Ctrl + F5) (führt Programm im Projektordner aus)

oder

grünes Play-Symbol zur Editoransicht (führt Programm im aktuellen "working directory" im Terminal aus)

Text-Output

Text-Output

in einer interaktiven Konsole / einem interaktiven Notebook

generiert der letzte Befehl in einer Zelle einen Wert, wird dieser automatisch als Ausgabe geschrieben

Text-Output

allgemeiner Weg, um Textausgabe zu erzeugen: print()

print("Hello, world!")

Unser erstes Python-Programm

Unser erstes Python-Programm

Wir legen eine Datei namens greeting.py an.

Unser Programm soll den Benutzer nach seinem Namen fragen und ihn dann begrüßen.

Eingabe und Ausgabe

Eingabe: Mit Hilfe von input():

print("What is your name?")
name = input()

input liefert immer einen String zurück

Eingabe und Ausgabe

Ausgabe der Begrüßung

print("Nice to meet you, " + name)

Programme ausführen

in der Kommandozeile via python greeting.py

in VS Code (Python-Erweiterung muss installiert sein):

grünes Play-Symbol zur Editoransicht

oder

Run - Run Without Debugging (Ctrl + F5)

Ãœbung: Alter anhand Geburtsjahr

Schreibe ein Programm namens age.py, das den Benutzer nach seinem Geburtsjahr fragt und dann angibt, wie alt diese Person im Jahr 2022 wird.

Übung: Länge des Namens

Schreibe ein Programm, das den Benutzer nach seinem Namen fragt. Es soll angeben, aus wie vielen Zeichen der Name besteht.

Verwende dazu die Funktion len(...), um die Länge eines Strings zu ermitteln

Kommentare

Kommentare dienen Entwicklern, um den Code zu beschreiben und zu erklären. Sie werden von Python ignoriert.

Ein Kommentar beginnt mit einem #-Zeichen und reicht bis zum Ende der Zeile.

Ãœblicherweise stehen Kommentare oberhalb des Codes, den sie beschreiben

# determine the length of the name
name_length = len(name)

Builtins, Standard Library

Builtins, Standard Library

  • Builtins: Funktionen und Objekte, die oft verwendet werden und immer verfügbar sind
  • Standard Library: Sammlungen von zusätzlichen Modulen und Paketen, die importiert werden können

Dokumentation: https://docs.python.org/3/library/index.html

Builtins

unter anderem:

  • print()
  • input()
  • len()
  • max()
  • min()
  • open()
  • range()
  • round()
  • sorted()
  • sum()
  • type()

Standard Library

Die Standard Library bietet zusätzliche Module, die importiert werden können.

Beispiel (abrunden):

import math

print(math.floor(3.6))

oder

from math import floor

print(floor(3.6))

Standard Library

interessante Module:

  • pprint (formatierte Ausgabe)
  • random
  • math
  • datetime
  • os (Betriebssystem, Dateisystem)
  • urllib.request (HTTP-Anfragen)
  • webbrowser (einfache Steuerung des Standard-Browsers)

print und pprint

Ausgabe mehrerer Elemente:

print(1, 2, 3, sep=", ", end="\n\n")
1, 2, 3


print und pprint

import pprint

pprint.pprint(['Mercuy', 'Venus', 'Earth', 'Mars', 'Jupiter',
               'Saturn', 'Uranus', 'Neptune', 'Pluto'])
['Mercuy',
 'Venus',
 'Earth',
 'Mars',
 'Jupiter',
 'Saturn',
 'Uranus',
 'Neptune',
 'Pluto']

open

Textdatei zum Schreiben öffnen:

file = open("message.txt", mode="w", encoding="utf-8")
file.write("hello\n")
file.write("world\n")
file.close()

Datei muss zuvor nicht existieren

urllib.request

Abfrage von Web-Inhalten (und Speichern in einer Datei)

import urllib.request

# make a HTTP request
req = urllib.request.urlopen("https://en.wikipedia.org")
# read content as utf-8 string
content = req.read().decode("utf-8")

# save to file
file = open("wikipedia.html", "w", encoding="utf-8")
file.write(content)
file.close()

random

import random

print(random.randint(1, 6))
print(random.choice(["heads", "tails"]))

Kontrollstrukturen

Kontrollstrukturen

Mit Kontrollstrukturen können wir bestimmten Code z.B. wiederholt ausführen lassen, oder Code nur in bestimmten Situationen ausführen lassen.

Kontrollstrukturen

wichtigste Konstrollstrukturen in Programmiersprachen:

  • if-Abfragen
  • Schleifen
    • while-Schleife
    • do while-Schleife
    • for-Schleife (Zählschleife)
    • foreach-Schleife

Konstrollstrukturen in Python

  • if ... else ...
  • Schleifen:
    • while
    • for ... in ...
    • for ... in range(...)

Vergleiche

Vergleiche

Um if und while nutzen zu können, müssen wir Werte vergleichen können:

a = 2
b = 5

print(a == b) # a is equal to b
print(a != b) # a not equal to b
print(a < b)  # a is smaller than b
print(a > b)
print(a <= b) # a is smaller than or equal to b
print(a >= b)

Vergleiche

Das Resultat eines Vergleichs ist ein boolescher Wert (True / False)

Wir können das Resultat in einer Variablen speichern:

is_adult = age >= 18

Verknüpfung mit and, or, not

Beispiele:

if age >= 18 and country == "de":
    print("may drink alcohol")

if temperature < -10 or temperature > 30:
    print("extreme weather")

if not value > 10:
    print("value not greater than 10")

If / else

If / else

Beispiel:

age = 30
age_seconds = age * 365 * 24 * 60 * 60

if age_seconds < 1000000000:
    print("You are less than 1 billion seconds old")
else:
    print("You are older than 1 billion seconds")

If / elif / else

if age_seconds < 100000000:
    print("You are less than 100 million seconds old")
elif age_seconds < 1000000000:
    print("You are between 100 million and 1 billion seconds old")
elif age_seconds < 2000000000:
    print("You are between 1 billion and 2 billion seconds old")
else:
    print("You are older than 2 billion seconds")

Codeblöcke

Codeblock = Zusammengehörige Codezeilen, die z.B. als Resultat einer if-Abfrage ausgeführt werden.

In Python endet die Zeile vor einem Codeblock mit einem :, der Codeblock ist eingerückt (meist mit 4 Leerzeichen).

Übung: Münzwurf

Simuliere einen zufälligen Münzwurf mittels random.choice(["heads", "tails"])

Lasse den Benutzer das Ergebnis raten und sage ihm, ob er richtig lag

For-Schleifen

For-Schleifen

Mit for-Schleifen können wir die Inhalte einer Liste (oder ähnlicher Objekte) durchlaufen.

Bezeichnung in manchen anderen Programmiersprachen: for-each

For-Schleifen

names = ["Alice", "Bob", "Charlie"]

for name in names:
    print("Hello, " + name + "!")

Ãœbung: For-Schleifen und If-Statements

Beginne mit einer Liste von Zahlen, z.B. [2, 5, -3, 8, 1, -5]

Gib alle positiven Einträge aus, z.B. 2, 5, 8, 1

Gib den größten Eintrag aus, z.B. 8

Zählschleifen

Zählschleifen

Folgendermaßen können wir in Python von 0 bis 9 zählen:

for i in range(10):
    print(i)

Der Aufruf range(10) erstellt ein Objekt, das sich wie die Liste [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] verhält.

Zählschleifen

typischer Variablenname in Zählschleifen: i

Zählschleifen

Ãœbung: Erstelle eine Multiplikationstafel

1 x 7 = 7
2 x 7 = 14
3 x 7 = 21
4 x 7 = 28
...

While-Schleife

While-Schleife

Eine if-Abfrage führt einen Codeblock einmal aus, wenn ein Kriterium zutrifft

Eine while-Schleife wiederholt einen Codeblock, solange ein Kriterium zutrifft

Beispiel:

a = 1

while a < 2000:
    print(a)
    a = a * 2

While-Schleife

Ãœbungen:

  • Zahlenraten mit mehreren Versuchen
  • Schleife, die die Zahlen 1 bis 10 ausgibt
  • Schleife, die die Zahlen der 7er-Reihe des Einmaleins ausgibt
  • Schleife, die die Liste [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] erstellt
  • Rechentrainer mit Zufallsaufgaben
  • Einkaufsliste

While-Schleife

Beispiel: Einkaufsliste

Beispielhafter Programmlauf:

enter an item or "x" to quit:
milk
enter an item or "x" to quit:
bread
enter an item or "x" to quit:
apples
enter an item or "x" to quit:
x
your shopping list is:
["milk", "bread", "apples"]

Break

Break

Schlüsselwort break: kann verwendet werden, um die aktuelle Schleife zu beenden

Break

Beispiel (do-while-Schleife):

a = 1

while True:
    a = a * 2
    print(a)
    if (a > 1000):
        break

Bestandteile von Programmen

Bestandteile von Programmen

  • Programme
    • Codeblöcke
      • Anweisungen
        • Ausdrücke

Leere Codeblöcke

leere Codeblöcke mittels des pass-Statements:

# TODO: warn the user if path doesn't exist

if not os.path.exists(my_path):
    pass

Anweisungen über mehrere Zeilen

Ein Statement kann über mehrere Zeilen gehen, wenn wir entsprechend Klammern setzen

a = (2 + 3 + 4 + 5 + 6 +
     7 + 8 + 9 + 10)

Alternative: Escapen von Zeilenumbrüchen mit \

a = 2 + 3 + 4 + 5 + 6 + \
    7 + 8 + 9 + 10

Ausdrücke (Expressions)

Ausdruck = etwas, das einen Wert ergibt (der Wert könnte None sein)

Ausdruck = alles, was auf der rechten Seite einer Zuweisung (=) stehen kann

Beispiele für Ausdrücke

  • (7 - 3) * 0.5
  • (7 - 3)
  • 7
  • round(3.5)
  • x == 1

Kontrollstrukturen - Ãœbungen

Kontrollstrukturen - Ãœbungen

  • Zahlenraten
  • Zinsrechner
  • Gesetze nach Alter
  • Rechentrainer (mit Zufallsaufgaben)
  • Loginsystem
  • Schaltjahr

siehe https://github.com/marko-knoebl/slides/tree/master/exercises/python-beginner

Funktionsparameter

Positionale Parameter und Schlüsselwortparameter

Aufruf von open:

mit positionalen Parametern:

f = open("myfile.txt", "w", -1, "utf-8")

mit Schlüsselwortparametern:

f = open("myfile.txt", encoding="utf-8", mode="w")

Die Namen der Schlüsselwortparameter entnehmen wir der Dokumentation (z.B. via help(open))

Optionale Parameter und Standardwerte

Bei manchen Funktionen sind Parameter optional (sie haben einen Standardwert)

Beispiel: Bei der Funktion open() ist nur der erste Parameter zwingend anzugeben

Die Werte der Standardparameter entnehmen wir der Dokumentation

Funktionsdefintion

Funktionsdefinition

Beispiel:

def average(a, b):
    m = (a + b) / 2
    return m

Optionale Parameter und Standardwerte

Folgendermaßen definieren wir Standardwerte für Parameter:

def shout(phrase, end="!"):
    print(phrase.upper() + end)

shout("hello") # HELLO!
shout("hi", ".") # HI.

Scope

Eine Funktionsdefinition öffnet einen neuen Scope, einen Geltungsbereich für Variablen

Im folgenden Beispiel gibt es zwei separate Variablen, die beide mit m benannt sind:

m = "Hello, world"

def average(a, b):
    m = (a + b) / 2
    return m
x = average(1, 2)

print(m) # prints "Hello, world"

Scope

Innerhalb einer Funktion gilt: Variablen, die außerhalb definiert sind, können gelesen, aber nicht geschrieben werden

In anderen Programmiersprachen: auch Konstrukte wie if oder for eröffnen einen neuen Scope - nicht so in Python

Funktionen: Ãœbungsaufgaben

Funktionen: Ãœbungsaufgaben

  • Funktion, die überprüft, ob ein Jahr ein Schaltjahr ist
  • Funktion, die überprüft, ob eine Zahl eine Primzahl ist
  • Funktion, die alle Primzahlen in einem Intervall zurückgibt
  • Funktion, die die Prüfziffer eines Strichcodes validiert (GTIN Prüfziffer) (knifflig)
  • Funktion, die die Fibonacci-Zahlen berechnet
  • Funktion, die eine Liste von Lotteriezahlen generiert
  • Funktion, die dem Benutzer eine ja/nein-Frage stellt und True oder False zurückgibt

für Strichcodes / Primzahlen: Recherchiere den % - Operator

Siehe: https://github.com/marko-knoebl/slides/tree/master/exercises/python-beginner

Module und Pakete

Module und Pakete

  • Modul = Sammlung von Python-Objekten, die importiert werden können
  • Paket = Sammlung von Modulen

(Pakete sind eigenlich eine besondere Form von Modulen)

Beispiele für Imports

  • urllib = Paket
  • urllib.request = Modul
  • urllib.request.urlopen = Funktion
  • sys = Modul
  • sys.path = Objekt

Beispiele für Imports

Typische Imports:

import module1
from package2 import module2a, module2b
from module3 import object3a, object3b
from package4.module4 import object4a, object4b

Konkrete Beispiele:

import os
from urllib import request, response
from math import sqrt, pi
from http.client import HTTPConnection, HTTPSConnection

Abkürzungen bei Imports

Insbesondere in der interaktiven Konsole sinnvoll, wenn Tipparbeit gespart werden soll:

Kurznamen beim import:

import numpy as np
import matplotlib.pyplot as plt
import tkinter as tk

Alles aus einem Modul importieren (eher nicht empfohlen):

from math import *

Automatischer Import von Untermodulen

Beim Import mancher Pakete werden automatisch auch Untermodule importiert.

Beispiele:

import os
import numpy as np

os.path.join(...)
np.random.randint(10)

Gegenbeispiel - schlägt fehl:

import urllib

urllib.request.urlopen(...)

Konventionen für Imports

  • alle imports sollten am Anfang einer Python-Datei stehen
  • die imports sollten in drei Gruppen geteilt werden:
    • standard Library
    • andere Libraries
    • projektinterne Module

PIP und PyPI

PIP und PyPI

  • PyPI: Python Package Index: offizielles Repository für installierbare Python-Pakete
  • PIP: Paketmanager

PIP

einfache Verwendung aus dem Terminal:

pip install package_a package_b

PyPI

Website des Python Package Index:

https://pypi.org/

PIP und PyPI

Ãœbung:

Verwandle den folgenden Markdown-String ind HTML - suche hierfür ein passendes Paket von PyPI

markdown_string = """
# Important packages

- requests
- numpy
- sqlalchemy
"""

PIP und PyPI

mögliche Lösung:

pip install markdown
import markdown

html_string = markdown.markdown(
    markdown_string
)

Lokale Module

Lokale Module

wir können lokale Python-Dateien als Module importieren

Beispiel: lokale Datei messages.py

import messages

print(messages.message1)

Lokale Module

Zusammenfassung von Modulen in Pakete (via Ordnern)

Beispiel: Ordner phrases/, Dateien phrases/messages.py und phrases/greetings.py

from phrases import greetings

print(greetings.greeting1)

Auflösen von Imports

Suchreihenfolge von Imports:

  • Verzeichnis, in dem das ursprünglich ausgeführte Python Skript liegt
  • Standardlibrary
  • externe Libraries

Vermeide Namensgleichheit mit existierenden Modulen / Paketen!