Wie bei jedem Handwerk gibt es auch beim Programmieren gewisse Werkzeuge die man benötigt um eine Applikation zu erstellen. Das erste Werkzeug, dass ein angehender Programmierer verwendet ist wahrscheinlich ein Text-Editor. In diesem Programm schreibt man dann wie schon der Name andeutet Text, so-genannten Code, in einer bestimmten Programmiersprache. Je nach Programmiersprache beschreibt der Code entweder
Ein Programmiersprache ist wesentlich einfacher aufgebaut als eine menschliche Sprache. Das mag zu dem Gedanken verleiten, dass es einfacher ist einem Computer als einer Person beizubringen, wie ein bestimmtes Problem aussieht (deklarative Programmierung) oder wie es zu lösen ist (imperative Programmierung). Das ist aber ein Trugschluss. Im Endeffekt benötigt der Computer (durch die Einfachheit der Programmiersprache) eine wesentlich genauere Beschreibung als ein Mensch, führt diese aber dafür (im Normalfall) fehlerfrei und äußerst schnell durch.
Der „fertige“ Code wird entweder
Üblicherweise findet, zur Optimierung der Geschwindigkeit eines Programms, auch bei der Interpreter-Variant eine Übersetzung in maschinen-nahen Code statt. Als Programmierer muss man sich dabei aber – im Gegensatz zur Compiler-Variante – üblicherweise keine Gedanken machen.
Wie schon in einführenden Teil beschrieben ist ein Text-Editor oder auch kurz Editor eines der wesentlichen Werkzeuge eines Programmierers. Von einer Textverarbeitung (wie z.B. “Word”, “LibreOffice” oder “Google Docs”) unterscheidet sich ein Texteditor, dadurch, dass man damit wirklich nur Text schreiben kann. Eine Formatierung oder das Einfügen von Bildern ist nicht möglich.
Als essentielles Werkzeug ist ein Texteditor Teil der Standard-Installation vieler Betriebssystemen:
Theoretisch wäre es also möglich z.B. einfach Notepad zu verwenden und darin zukünftige Programmier-Projekte zu verwirklichen.
In der Praxis verwendet man aber üblicherweise einen speziell für die Programmierung angepassten Texteditor (manchmal auch Code-Editor genannt).
Während man heutzutage als Anwender meist eine grafische Benutzeroberfläche (GUI: Graphical User Interface) verwendet, ist es als Programmierer üblich für viele Aufgaben in einer text-basierten Oberfläche (CLI: Command Line Interface) zu erledigen. Diese hat den Vorteil, dass man hier (wesentlich leichter als in einem GUI) Schritte, wiederum mittels Programmierung, automatisieren kann. Das heißt auch bei den Text den man bei einer textbasierten Oberfläche eingibt handelt es sich um Code in einer bestimmten Programmiersprache.
Um eine kleine Einführung in eine text-basierte Oberfläche zu geben schauen wir uns hier an wie man unter Windows Software mittels CLI installiert. Dazu installieren wir als erstes „Windows Terminal“ in der Powershell. Dabei handel es sich um einem Command-Line-Interpreter für die Programmiersprache PowerShell.
Das Programm PowerShell öffnen
Den folgenden Text (Code) in das PowerShell-Fenster einfügen
und dann mittels ⏎ (Return) ausführen.
winget
handelt es sich hierbei um ein Programm (Befehl) zum Suchen und Installieren von Software, die in diesem Zusammenhang auch als Paket bezeichnet wird.install
teilt man winget
mit, dass es ein Paket installieren soll.--
) id
mit dem Argument Microsoft.WindowsTerminal
spezifiziert-
) e
wiederum gibt an, dass das das genau (exakt) das Paket Microsoft.WindowsTerminal
installiert werden sollZeit zum auf die Schulter klopfen, nachdem du im 2. Schritt (wahrscheinlich) dein erstes PowerShell-„Programm“ geschrieben hast
Um zu sehen ob die Installation von „Windows Terminal“ funktioniert hat suchen wird nach dem Programm Windows Terminal (einem mehr oder weniger modernerer Ersatz des Programms PowerShell) und führen es aus.
Nun wollen wir in einem zweiten Schritt einen Code-Editor installieren. Ein beliebtest Programm ist dabei Visual Studio Code von Microsoft.
Da wir nicht genau wissen wie das Paket für Visual Studio heißt suchen wir mit dem Befehl Kommando/Argument search
nach dem Paket
Die Anführungszeichen (Single Quotes) sorgen dabei dafür, dass der Text als als Ganzes interpretiert wird und nicht als die 3 Argumente Visual
, Studio
und Code
.
Die Ausgabe des obigen Befehls/Code sollte nun die gefunden Pakete/Software anzeigen
Name Id Version Source
------------------------------------------------------------------------------------------
Visual Studio Code XP9KHM4BK9FZ7Q Unknown msstore
Visual Studio Code - Insiders XP8LFCZM790F6B Unknown msstore
Microsoft Visual Studio Code Microsoft.VisualStudioCode 1.65.2 winget
Microsoft Visual Studio Code Insiders Microsoft.VisualStudioCode.Insiders 1.66.0 winget
Wir entscheiden uns für das Paket mit der Id Microsoft.VisualStudioCode
und installieren dieses mit dem Befehl
Am obigen Befehl sehen wir, dass die Reihenfolge von Option (e
und id
) normalerweise keine Reihenfolge spielt. Weiters können wir feststellen, dass wir statt des Gleichheitszeichen zur Trennung der Option id
und des dazugehörigen Arguments (Microsoft.VisualStudioCode
) auch einfach Leerzeichen verwendet werden können.
Bevor wir nun Visual Studio Code öffnen und unser erstes Python-Programm erstellen sollten wir noch den Python-Interpreter installieren.
Eine Suche mittels
zeigt und, dass die richtige Id des Programms wohl Python.Python.3
ist
Wir installieren Python 3 mittels:
Der obige Befehl zeigt uns, dass man die Option id
auch weglassen kann und winget
in diesem Fall annimmt, dass es sich beim Argument Python.Python.3
um den Namen des Pakets handelt.
Zum Schluss unser ersten Ausflug in die Programmiersprache PowerShell wollen wir noch das Programm „Hello, World!“ schreiben. Dabei handelt es sich um ein ein typische erstes Programm, dass den Text (String) „Hello, World!“ auf dem Bildschirm ausgibt. Im Wikipedia-Artikel zur Programmiersprache PowerShell sehen wir, dass der Befehl Write-Output
verwendet werden kann um einen Text auf dem Bildschirm auszugeben. Eine typische Implementierung (Realisierung eines Problems in Code) von „Hello, World!“ in PowerShell-Code könnte also z.B. so aussehen:
Die doppelten Anführungszeichen erfüllen dabei den gleichen Zweck wie die einfachen Anführungszeichen beim Befehl winget search 'Visual Studio Code'
. Der Text Hello, World!
wird als einzelnes Argument interpretiert und nicht als die zwei Argumente Hello,
und World!
.
Nachdem wir „Hello, World!“ schon in PowerShell geschrieben haben, wollen wir das gleiche Programm nun in der Programmiersprache Python implementieren. Der Code dafür kann z.B. so aussehen
Wir sehen, dass der übliche Befehl (Funktion) zum Ausgeben eines Texts (String) in Python print
heißt. Das Argument des Befehls "Hello, World!"
wird hier, wie auch in der PowerShell, unter doppelte (oder einfache) Anführungszeichen gesetzt. Damit wird in Python angezeigt, dass es sich um einen Text (String/Zeichenkette) und nicht um einen Befehl (wie z.B. bei der Funktion print
) handelt.
Wir haben num verschiedene Möglichkeiten unser Programm auszuprobieren. Eine der Möglichkeiten ist die Ausführung direkt im Python-Interpreter.
Python-Interpreter öffnen
python
eingeben und mittels ⏎ (Return) bestätigenDen Code von oben in den Interpreter kopieren und dann mittels ⏎ (Return) ausführen
Der Text „Hello, World!“ wird unter dem Code ausgegeben
>>> print("Hello, World!")
Hello, World!
Bisher haben wir Code nur direkt im Interpreter ausgeführt ohne diesen vorher in einer Text-Datei zu speichern. Angesichts dessen, dass der bisherige Code nur eine Zeile lang war – dieser Code wird auch oft als “one liner” bezeichnet – war das auch nicht wirklich nötig.
Nun wollen wir den Code unseres „Hello, World!“-Programms mittels Visual Studio Code speichern und ausführen.
print("Hello, World!")
einfügenhello.py
speichernBei einem “Integrated Development Environment” handelt es sich um ein Programm, dass den Alltag eines Programmierers erleichtern soll. Dazu bündelt dieses üblicherweise Werkzeuge wie z.B.
in einer Oberfläche. Der Übergang von Texteditor mit Zusatz-Fähigkeiten wie z.B. das Ausführen des Codes in einem Schritt zu einer IDE ist dabei relativ fließend. Manche Leute würden z.B. Visual Studio Code auch schon als IDE bezeichnen.
Beliebte IDEs für die Entwicklung von Python-Code sind z.B.
winget
winget uninstall
winget
Software auf deinem Computer auf den neuesten Stand bringen kannstBisher haben wir den meisten Code direkt im Powershell- oder Python-Interpreter (python
) geschrieben. Dabei geben wir eine oder mehrere Zeilen von Code ein und führen diese – üblicherweise nach der Eingabe mittels Return ⏎ – aus. Diese Art der Eingabe-Oberfläche wird oft auch als sogenannte REPL (Read-Eval-Print Loop) bezeichnet.
Wie bei vielen anderen interpretierten Sprachen existieren auch bei Python alternative REPLs, die das Arbeiten mit Code nochmals vereinfachen können. Eine solche REPL mit dem Namen ptpython
wollen wir nun installieren. Dazu verwenden wir pip
, einen Package-Manager für Python. Ähnlich wie winget
(und viele andere Package-Manager) kann man das Sub-Kommando install
dazu verwenden Software zu installieren:
Nach der Installation können wir ptpython
mittels Eingabe des Befehls
verwenden und uns mit der Bedienung davon ein wenig vertraut machen. Wie wir im Verlauf noch sehen werden bietet ptpython
in Vergleich zur Standard-REPL (python
) Funktionen wie Autovervollständigung und Syntax-Highlighting.
Bei einem Ausdruck (Expression
) handelt es sich um ein (üblicherweise relativ kurzes) Stück Code, dass ausgewertet werden kann und dann ein bestimmtes Ergebnis eines bestimmten Datentyps liefert.
Einer der einfachsten Varianten von Ausdrücken sind Konstanten. Diese kennt man eventuell auch schon aus dem Mathematik-Unterricht. Hier mal ein paar Beispiele:
Konstante/Ausdruck | Datentyp |
---|---|
True |
bool (Boolscher Wert) |
1234 |
int (Ganzzahl) |
12.34 |
float (Gleitkommazahl) |
"1234" |
str (Zeichenkette) |
'1234' |
str (Zeichenkette) |
Um heraus zu finden welchen Typ ein bestimmter Ausdruck hat kann man die Funktion type
verwenden:
<class 'bool'>
<class 'int'>
<class 'float'>
<class 'str'>
<class 'str'>
Diverse Funktionen wie z.B. abs
, min
und Operatoren wie z.B. +
, -
, **
(Potzenz) können ebenfalls Teil eines Ausdrucks sein.
3
'12'
8
123
12.3
12.4
-1
Wie man bei der Funktion min
sieht werden die Argumente einer Funktion in Python durch Beistriche getrennt.
❔ Warum unterscheidet sich das Ergebnis des ersten und des zweiten Ausdrucks?
❔ Um welche mathematische Operation handelt es sich bei
**
?❔ Welchen Wert ermitteln die Funktionen
min
,max
undabs
?❔ Welche Typen haben die (Ergebnisse der) obigen Ausdrücke?
Operationen wie +
oder **
können ebenfalls als Funktion angesehen werden, die
+
, -
, *
) besitzen undSo gibt es neben dem Operator +
z.B. auch eine Funktion mit mehr oder weniger gleicher Funktionalität mit dem Namen add
:
from operator import add # Funktion add importieren
add(1, 2) # Argumente nach Funktion (Postfix-Notation)
# 3
1 + 2 # Argumente vor und nach Funktion (Infix-Notation)
# 3
Neben den von Haus aus sichtbaren Funktionen/Operatoren, wie z.B. abs
und -
, gibt es noch viele andere Funktionen/Operatoren, die erst importiert werden müssen bevor man sie verwenden kann. Ein Beispiel dafür sehen wir in der ersten Zeile des obigen Codeblocks in dem die Funktion add
aus dem Modul operator
importiert wird.
Ein weitere Neuerung im obigen Text sind Kommentare. Diese beginnen in Python mit dem Zeichen #
. Der Text hinter diesem Zeichen (bis zum Zeilenende) wird vom Interpreter ignoriert. Kommentare dienen z.B. dazu zu dokumentieren,
warum ein bestimmte Löung für ein Problem gewählt wurde,
welche Probleme auftreten könnten oder
auch wie ein bestimmtes Problem gelöst wurde.
Dabei sollte man darauf achten keine trivialen Kommentare zu schreiben. Ein Kommentar wie z.B.
ist höchstens für absolute Programmierneulinge interessant. Das soll natürlich keine Aufforderung sein keine Kommentare zu schreiben. Kommentare und andere Form der Dokumentation sind ein essentieller Teil guter Software.
Jede Funktion in Python übernimmt eine bestimmte Anzahl von Argumenten und returniert einen Rückgabewert. Dabei ist zu beachten, dass die Anzahl von Argumenten auch 0 sein kann. Eine Funktion kann auch None
retunieren. Dieser Wert vom Typ NoneType
steht im Endeffekt für „keinen Wert“. Schauen wir uns die Eingabewerte von Funktionen und Operatoren an Hand von ein paar Beispielen an.
3
Die Operation +
übernimmt hier zwei Argumente vom Typ int
und gibt die Summe dieser Werte 3
(Typ int
) zurück. Die Operation +
ist auch auf andere Datentypen wie z.B. float
und str
definiert. Bei nachfolgendem Ausdruck:
5.5
handelt es sich beim ersten Argumenten wiederum um eine Ganzzahl (int
) und beim zweiten Argument um eine Gleitkommazahl (float
). Beim Rückgabewert von 5.5
handelt es sich wiederum um eine Gleitkommazahl. Die Operation +
ist auch auf Strings definiert, wobei hierbei die String aneinandergefügt werden:
'Hello, World'
Beim Rückgabewert handelt es sich wiederum um einen String:
<class 'str'>
Manche Funktionen können auch eine beliebige Anzahl von Argumenten übernehmen. Eine dieser Funktionen ist min
:
-10
-2
Zum Schluss wollen wir uns noch die Funktion print
ansehen, die wir schon verwendet haben um die Zeichenkette “Hello, World!” auf dem Bildschirm auszugeben. Diese kann wiederum eine beliebige Anzahl von Argumenten übernehmen und gibt diese auf dem “Standard Output” (stdout
), also üblicherweise dem Bildschirm, getrennt durch Leerzeichen aus. Die Funktion gibt dabei aber keinen Wert zurück (None
).
Hello, World
Hello, World
<class 'NoneType'>
- ❔ Warum gibt der Interpreter beim Aufruf des zweiten Ausdrucks sowohl den Typ des Ausdrucks (
<class 'NoneType'>
) als auch den Text “Hello, World” aus?
Die Funktion print
kann auch ohne Argumente aufgerufen werden. Das sorgt dafür, dass ein leere Zeile (ein Zeilenvorschub) auf stdout
ausgegeben wird.
One
Two
❔ Wie lautet das Ergebnis der untenstehenden Ausdrücke?
❔ Welchen Typ haben die ausgewerten Ausdrücke?
Falls die Ausdrücke Funktionen/Operatoren enthalten:
❔ Welchen Typ haben die Argumente der verwendeten Funktionen/Operatoren?
❔ Wie lautet der Typ des Rückgabewertes der ausgewerteten Funktionen/Operatoren?
Versuche die Aufgabe als erstes im Kopf zu lösen und gib diese danach im Python-Interpreter ein um dein Ergebnis zu überprüfen.
Welche Aufgaben, die noch nicht besprochenen Funktionen (wie z.B.
float
) übernehmen, kannst du dabei feststellen indem du diese inklusive erster Klammer – also z.B.float(
– inptpython
eingibst. Eine andere Möglichkeit ist in der Python-Dokumentation nach der jeweiligen Funktion zu suchen.
Eine, wie wir später noch sehen werden, in Programmiersprachen sehr wichtige Art Aufgabe übernehmen Vergleichsoperatoren. Diese Arten von Operatoren
vergleichen zwei Argumente und
geben ein Ergebnis vom Typ bool
, also entweder True
oder False
zurück.
Der häufigste Vergleichsoperator ist wohl ==
der seine zwei Argumente auf Gleichheit überprüft:
False
True
False
True
Der genau entgegengesetzte Operator zu ==
ist !=
und überprüft ob die Ausdrücken links und rechts nicht gleich (unterschiedlich) sind.
False
True
True
False
- ❔ Wie lautet das Ergebnis der untenstehenden Ausdrücke?
Neben Gleichheit kann man bestimmte Ausdrücke, wie z.b. Zahlen, auch mit
<
(kleiner) ,<=
(kleiner gleich) ,>
(größer), oder>=
(größer gleich)vergleichen.
True
False
True
True
True
- ❔ Wie lautet das Ergebnis der untenstehenden Ausdrücke?
Boolsche Ausdrücke, also Ausdrücke die entweder den Wert True
oder False
annehmen sind ein wichtiger Bestandteil praktisch jedes Programms. Um boolsche Ausdrücke miteinander zu kombinieren kann man boolsche Operatoren verwenden. Hier wollen wir kurz auf die wichtigsten dieser Operatoren:
not
,and
, undor
eingehen.
not
Der Operator not
(nicht) wandelt einen boolschen Ausdruck in das Gegenteil um. Das heißt
not True
wird False
undnot False
wird True
.Hierzu ein paar Beispiele:
True
True
True
False
Die Klammern ()
im zweiten Ausdruck können dabei auch wegelassen werden, da >=
stärker bindet – also vorher ausgewertet wird – wie not
. Eine Liste der Prioritäten der verschiedenen Operatoren in Python, also welche Operatoren früher oder später ausgeführt werden, findet sich z.B. hier.
and
Mittels des Operators and
kann man zwei boolsche Ausdrücke miteinander verbinden. Dabei wird der kombinierte Ausdruck genau dann wahr (True
) wenn die Ausdrücke links und rechts von and
wahr sind:
False
False
False
True
True
Den Umstand, dass and
genau dann True
zurückliefert wenn beide Operanden (Eingabewerte) von and
den Wert True
besitzen, kann man auch in einer sogenannte Wahrheitstabelle festhalten:
Linker Operand | Rechter Operand | Ergebnis |
---|---|---|
False |
False |
False |
False |
True |
False |
True |
False |
False |
True |
True |
True |
or
Im Gegensatz zu and
werden zwei mit or
verbundener Ausdrücke genau dann True
wenn einer (oder beide) der Eingabe-Ausdrücke True
sind:
Linker Operand | Rechter Operand | Ergebnis |
---|---|---|
False |
False |
False |
False |
True |
True |
True |
False |
True |
True |
True |
True |
Dazu wieder ein paar Beispiele:
False
True
False
Zum Abschluss wollen wir hier ein paar zusammengesetzte Audrücke als erstes im Kopf und dann in einer Python-REPL auswerten.
• ❔ Wie lautet das Ergebnis der untenstehenden Ausdrücke?
• ❔ In welcher Reihenfolge werden die Teilausdrücke ausgewertet?
• ❔ In welchen Fall kann man bei den Operatoren
and
undor
auf eine Auswertrung eines der Operanden verzichten wenn man das Ergbenis des anderen Operand schon kennt?