Grundlagen

Lernziele

  • Erlernen Sie die Grundlagen der Programmiersprache Python

Einführung in Python

In diesem Abschnitt erklären wir anhand von Beispielen die Grundlagen der Python-Programmierung. Wir arbeiten mit dem Notebook aus dem vorherigen Kapitel weiter.

Geben Sie in einer Codezelle Folgendes ein und führen Sie die Zelle aus

print("Hello, World")
Hello, World

Das Notebook hat den Inhalt der Zelle gelesen, ihn als Python-Code interpretiert, ausgeführt und die Antwort unter der Zelle gedruckt.

Um Hilfe zu einem beliebigen Python-Objekt zu erhalten, fügen Sie ihm zwei Fragezeichen hinzu:

print??
Signature: print(*args, sep=' ', end='\n', file=None, flush=False)

Docstring:

Prints the values to a stream, or to sys.stdout by default.



sep

  string inserted between values, default a space.

end

  string appended after the last value, default a newline.

file

  a file-like object (stream); defaults to the current sys.stdout.

flush

  whether to forcibly flush the stream.

Type:      builtin_function_or_method

oder verwenden Sie die Funktion help().

help(print)
Help on built-in function print in module builtins:

print(*args, sep=' ', end='\n', file=None, flush=False)
    Prints the values to a stream, or to sys.stdout by default.

    sep
      string inserted between values, default a space.
    end
      string appended after the last value, default a newline.
    file
      a file-like object (stream); defaults to the current sys.stdout.
    flush
      whether to forcibly flush the stream.

Machen Sie sich noch keine Gedanken über die Begriffe „Python-Objekt“ und „Funktion“. Ihre genaue Bedeutung wird in zukünftigen Übungseinheiten geklärt.

Kommentare

Es ist oft nützlich, Ihrem Code erklärenden Text hinzuzufügen. Dieser Text sollte vom Python-Interpreter übersprungen werden. Python verwendet das # Zeichen für Kommentare. Alles zwischen dem # Zeichen und das Ende der Zeile wird ignoriert:

print("Hello, ") # print("World")
Hello, 

Wenn Sie diese Zelle ausführen, wird nur die erste print-Funktion ausgeführt, da die zweite vom Python-Interpreter als Kommentar behandelt wird. Verwenden Sie Kommentare, um komplizierte oder nicht offensichtliche Teile des Codes zu dokumentieren.

Variablen

In Python besteht eine Variable aus einem Objekt und seinem Namen. Das Gleichheitszeichen (=) wird verwendet, um einem Objekt einen Namen zuzuordnen. Variablennamen können aus Groß- und Kleinbuchstaben, Ziffern und Unterstrichen bestehen, dürfen jedoch nicht mit einer Ziffer beginnen. Hier erstellen wir eine Reihe von Variablen namens height, width usw.

# Eigenschaften eines Buches mit A4-Seiten
height = 0.21022 # in [m] <- weil Einheiten nicht offensichtlich sind
width = 0.29730 # in [m]
nb_pages = 434
title = "The life of Edgar"

Mithilfe von Variablen können neue Variablen definiert werden. Berechnen wir die Oberfläche der Buchseiten.

area = nb_pages * height * width
print("Oberfläche des Buches '", title, "' is", area)
Oberfläche des Buches ' The life of Edgar ' is 27.124308204

Alle Python-Variablen haben einen Typ, der definiert, wie sie verwendet werden können. Beispielsweise können ganze Zahlen (int in Python) oder Gleitkommazahlen (float) für mathematische Operationen verwendet werden und Zeichenfolgen (str) können zur Manipulation von Textteilen verwendet werden. Wenn Sie nicht sicher sind, welchen Typ eine bestimmte Variable hat, überprüfen Sie dies mit der Funktion type.

print(type(area))
print(type(nb_pages))
print(type(title))
<class 'float'>
<class 'int'>
<class 'str'>

Die Verwendung von Variablen mit dem falschen Typ in einer Operation schlägt fehl.

title + area
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[36], line 1
----> 1 title + area

TypeError: can only concatenate str (not "float") to str

Der Python-Interpreter informiert Sie darüber, dass ein TypeError aufgetreten ist und wo er aufgetreten ist. Im Python-Sprachgebrauch wurde ein TypeError ausgelöst.

Python ist dynamisch typisiert. Das bedeutet, dass eine Variable ihren Typ ändern kann, wenn sich ihr Objekt ändert. Das Folgende gilt in Python.

x = height
print(type(x))
x = nb_pages
print(type(x))
x = title
print(type(x))
<class 'float'>
<class 'int'>
<class 'str'>

In Python gibt es einige vordefinierte Spezialvariablen. true, false, None und andere. Sie existieren immer und können nicht geändert werden. None zeigt an, dass kein Wert existiert.

Boolesche Variablen

Boolesche Variablen werden verwendet, um die Wahrheit einer Aussage darzustellen. Sie können über die speziellen Variablen true (wahr) und false (falsch) direkt zugewiesen werden.

abe_lincoln_lies = False
pinocchio_lies = True

Alternativ kann der Wahrheitswert das Ergebnis eines Python-Ausdrucks sein. Wenn der Wert einer Variablen ungleich None ist (im Fall von Zeichenfolgen oder Containern: nicht leer), wird der Ausdruck im Allgemeinen als true betrachtet, andernfalls als false.

print(bool(area))
print(bool(0))
True
False

Die Ergebnisse von Vergleichen sind ebenfalls boolesch.

print(height == width) # Gleichheitsvergleich
print(height < width)  # größer als der Vergleich
print(height != width)  # Ungleichheitsvergleich
False
True
True

Module

Python verfügt über eine große Bibliothek mit Modulen, die Sie importieren können, um auf zusätzliche Variablen und Funktionen zuzugreifen. Die Module, die wir in diesem Kurs am häufigsten verwenden werden, sind + numpy, das grundlegende Paket für wissenschaftliches Rechnen mit Python. + scipy, Sammlung von Software für Mathematik, Naturwissenschaften und Ingenieurwesen + matplotlib, eine 2D-Plotbibliothek

Module können mit Hilfe der import-Anweisung auf unterschiedliche Weise importiert werden. Die einfachste Form ist einfach import <Modulname>.

import numpy

Nach dem Import sind alle Variablen von „numpy“ als numpy.<var> zugänglich.

print(numpy.pi)
print(numpy.sin(numpy.pi/2))
3.141592653589793
1.0

Es kann lästig sein, immer <Modulname>.<Variablenname> einzugeben. Sie können Ihnen das Leben erleichtern, indem Sie selektive Importe oder Alias-Importe verwenden. Bei selektiven Importen importieren Sie nur die Variablen, die Sie interessieren.

from numpy import log, e
print(log(e))
1.0

Bei Alias-Importen geben Sie einem Modul einen kürzeren Namen.

import numpy as np
np.cos(np.pi)
-1.0

Schließlich können selektiver und Alias-Import auch kombiniert werden.

from numpy import pi as PI
print(PI)
3.141592653589793

Container

Bisher haben wir nur einfache, einzelne Variablen betrachtet. Sehr oft ist es jedoch praktisch, Variablen zu gruppieren und als eine Einheit zu behandeln. Hier werden wir uns insbesondere zwei Containertypen ansehen, die liste und das dictionary (Wörterbuch).

Listen

Eine list ist ein eindimensionaler, geordneter Container von Python-Objekten. Die Syntax zum Erstellen einer Liste ist eckige Klammern ([]).

my_list = [6, 24.5, True, "Hakuna Matata"]
print(my_list)
[6, 24.5, True, 'Hakuna Matata']

Die Variablen in einer Liste werden als Elemente bezeichnet und können jedes Python-Objekt sein, sogar eine andere Liste.

my_new_list = [1, PI, my_list, None]
print(my_new_list)
[1, 3.141592653589793, [6, 24.5, True, 'Hakuna Matata'], None]

Listen können mit der Methode extend erweitert werden, oder einzelne Elemente können mit der Methode append an sie angehängt werden.

my_list = [1, 2, 3]
my_list.extend([4, 5, 6])
print(my_list)

# Beachten Sie den Unterschied
my_list = [1, 2, 3]
my_list.append([4, 5, 6])
print(my_list)

my_list = [1, 2, 3]
my_list.append(4)
print(my_list)
[1, 2, 3, 4, 5, 6]
[1, 2, 3, [4, 5, 6]]
[1, 2, 3, 4]
Indizierung

Häufig möchten Sie auf einzelne Elemente oder einen Teil einer Liste zugreifen. In Python erfolgt dies über eckige Klammern ([]).

my_list = [1, 2, 3, 4, 5, 6, 8, 9]
print(my_list[0])
print(my_list[1])
1
2

Beachten Sie, dass die Listenindizes bei Null beginnen, d. h. der Index des ersten Listenelements ist 0. Sie können eine Liste auch rückwärts indizieren, indem Sie negative Indizes verwenden.

print(my_list[-1])
print(my_list[-2])
9
8

Wenn Sie auf einen Ausschnitt (Slice) der Liste, zugreifen möchten, definieren Sie einen Indexbereich, indem Sie einen Start- und einen Stoppindex angeben. Diese werden durch durch einen Doppelpunkt (:) getrennt.

print(my_list[2:5])
print(my_list[5])
[3, 4, 5]
6

Beachten Sie, dass das Element my_list[5] nicht Teil der ausgewählten Unterliste ist. Ein Slice ist so definiert, dass es am Startindex inklusive und am Stopindex des Slice exklusiv ist.

Wenn Sie entweder den Start- oder den Stoppindex weglassen, wählt Python sinnvolle Standardwerte.

print(my_list[:3])   # die ersten drei Punkte
print(my_list[-2:])  # die letzten 2 Artikel
print(my_list[:])    # alle Artikel
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[20], line 1
----> 1 print(my_list[:3])   # die ersten drei Punkte
      2 print(my_list[-2:])  # die letzten 2 Artikel
      3 print(my_list[:])    # alle Artikel

NameError: name 'my_list' is not defined

Darüber hinaus kann ein Slice auch einen dritten Parameter haben: den Schritt. Dies kann nützlich sein, wenn Sie beispielsweise jeden dritten Artikel anzeigen möchten.

print(my_list[0:-1:3])
[1, 4, 8]

Ebenso wie Indizes kann der Schritt auch ein negativer Wert sein. Eine einfache Möglichkeit, eine Liste umzukehren, besteht darin, einen Schritt von -1 zu verwenden.

print(my_list[::-1])
[9, 8, 6, 5, 4, 3, 2, 1]

Zusätzlich zum Elementzugriff können Indizes auch zum Ändern oder Entfernen von Elementen zur bzw. aus der Liste verwendet werden.

print(my_list)
my_list[2] = "A"
print(my_list)
my_list[3:5] = ['x', True]
print(my_list)
del my_list[5]
print(my_list)
[1, 2, 3, 4, 5, 6, 8, 9]
[1, 2, 'A', 4, 5, 6, 8, 9]
[1, 2, 'A', 'x', True, 6, 8, 9]
[1, 2, 'A', 'x', True, 8, 9]

Wörterbücher

Ein Wörterbuch (dict) ist eine ungeordnete Sammlung von Schlüssel/Wert-Paaren. Das bedeutet, dass in einem Wörterbuch jedes Schlüsselobjekt mit einem Wertobjekt verknüpft ist. Schlüssel müssen innerhalb eines Wörterbuchs eindeutig sein, aber mehrere Schlüssel können auf denselben Wert verweisen.

Die Syntax zum Erstellen eines Wörterbuchs besteht aus geschweiften Klammern ({}), die Schlüssel:Wert-Paare umgeben

my_dict = {"height": height, "width": width, "title": title}
print(my_dict)
{'width': 0.2973, 'height': 0.21022, 'title': 'The life of Edgar'}

Sie können auf Wertobjekte in einem Wörterbuch zugreifen, indem Sie deren Schlüssel als Index verwenden

print(my_dict["title"])
The life of Edgar

Sie können den Inhalt eines Diktats auch über die Tasten ändern

my_dict["weight"] = 379.8e-3 # in kg
my_dict["nb_pages"] = nb_pages
del my_dict["weight"]
print(my_dict)
{'width': 0.2973, 'nb_pages': 434, 'height': 0.21022, 'title': 'The life of Edgar'}

Wenn Sie versuchen, auf einen nicht vorhandenen Schlüssel zuzugreifen, wird ein KeyError ausgelöst

del my_dict["hakuna matata"]
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-31-b85b46565a4a> in <module>()
----> 1 del my_dict["hakuna matata"]

KeyError: 'hakuna matata'
print(my_dict[24])
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-32-40f0f7df6cb7> in <module>()
----> 1 print(my_dict[24])

KeyError: 24

Python teilt Ihnen mit, dass die Schlüssel hakuna matata und 24 nicht im Wörterbuch vorhanden sind.

Diskussion

Sie sollten etwas über Variablen und Typen in Python gelernt haben und gesehen haben, dass Python eine dynamisch typisierte Sprache ist, in der Variablen ihren Typ ändern können.

Sie verstehen, wie Sie benötigte Variablen aus externen Modulen importieren, und ohne genau zu wissen, was eine Python-Funktion ist, haben Sie die Funktionen print, type, numpy.cos und mehrere andere verwendet.

Sie wissen, wie man Listen- und Wörterbuchcontainer erstellt und diese mithilfe von Indizes manipulieren kann.

In diesem Kurs lernen Sie gerade so viel Python, dass Sie unsere Übungen zur Numerik von Differentialgleichungen bewältigen können. Wenn Sie daran interessiert sind, eine umfassendere Grundlage für die Durchführung wissenschaftlicher numerischer Berechnungen zu erhalten, ist das Buch Effective Computation in Physics eine hervorragende Ressource. Zögern Sie nicht, uns bei Fragen zu kontaktieren.