1. Hello World

Sobald man eine Programmiersprache lernt, wird von jedem Vortragenden das Programm Hello World! aufgerufen bzw. man lernt dieses zu programmieren.

Alle, die eine Programmiersprache von Begin an lernen möchten, sind froh, wenn Sie dieses erste kleine Programm geschrieben haben.

Dieses Programm klingt trivial und ist es auch. Aber in Wirklichkeit geht es bei Hello World! nicht unbedingt um den Programmcode, sondern eher darum, dass das zur Programmentwicklung notwendige Umfeld eingerichtet wird. Dazu zählt die Installation von Python und ggf. die des Editors.

In diesem Kapitel werden wir uns mit den arbeiten im Terminal als auch in einem Editor beschäftigen.

Keine Angst vor dem Terminal

Falls Sie bereits einmal mit anderen Programmiersprachen gearbeitet haben, sind Sie es vielleicht gewöhnt, dass alle Arbeiten in einer grafischen Benutzeroberfläche erledigt werden kann. Das tifft bei Python nicht zu.
Zwar können Sie ihren Code in einer modernen Entwicklungsumgebung oder in einer einfachen Entwicklungsumgebung entwicklen, viele administrative Schritte müssen aber in einem Terminal oder wie in Windows unter einer Command oder PowerShell erfolgen.

1.1. Python installieren

Wenn Sie Linux als Betriebssystem gewählt haben, so ist meist schon Python installiert. Bei Windows oder MacOS müssen Sie auf die Python.org Seite wechseln und sich dort die neuest Version downloaden, bevor Sie mit dem Kurs anfangen können.

1.2. „Hello World!“ in der Python-Shell

Python kann nicht nur in traditioneller Art und Weise ausgeführt werden, sondern kann auch im Terminal ausgeführt werden.

Sollten Sie mit dem Produkt „PyCharm“ aus dem Hause JetBrains arbeiten, so stellt dieses Produkt eine spezielle Python-Shell Umgebung direkt zur Verfügung. Arbeiten Sie mit einer normalen Shell oder einem Command Fenster unter Windows, so starten Sie die Ausführung unter Linux oder MacOS mit „python3„, in Windows mit dem Befehl „python“.

Hello World in der Shell

Hello World in der pyCharm Shell

Bislang sieht das Arbeiten in der Shell wie eine kleine Spielerei aus, aber Sie hat Vorteile.

Sie können z.B. einen kompletten Code mit Variablen, Berechnungen oder zum Testen in der Shell ausführen, ohne Probleme zu haben.

Wenn Sie eigene Variablen in der Shell definieren, können Ausgaben sogar ohne den Befehl print ausgegeben werden.

name = 'Test'
'Hallo ' + name + '!'

Ausserdem eignet sich die Shell für mathematische Berechnungen. Für ganze Zahlen gibt es in Python keinerlei Einschränkungen, wie die Berechnungen von 25, 2100, und 21000 beweisen.

Auch für Zeichenketten bietet sich die Shell an, aber damit werden wir uns in späteren Kapiteln beschäftigen.

So einfach wie eine Zeichenkette können auch Listen oder anderen elementaren Python-Datenstrukturen benutzt werden.

1.3. „Hello, World!“ als eigenständiges Script

Python ist so einfach aufgebaut, das Sie zum schreiben eines Scripts einen einfachen Text Editor benutzen können. Das Script wird dann in der Shell aufgerufen. Sie müssen nur auf 2 Dinge achten.

In der 1. Zeile muss ein Shebang eingetragen sein (ein Hinweis für den Compiler, wo der Interpretor gefunden werden kann, z.B.: Perl, TCL, Bash, Python usw).
Möchten Sie wissen, wo sich der jeweilige Interpretor befindet, so können Sie dieses mit dem Befehl „which python3“ herausfinden.

Der Shebang ist nur für die Systeme Linux und macOS wichtig. Windows ignoriert diese Zeile als Kommentar.

Das Script muss mit der Endung „.py“ abgespeichert werden.

Fehler „unable to open X Server“

Sollten Sie beim Start eines Python Scripts unter macOS oder Linux diese Fehlermeldung erhalten,
dann haben SIe die Shebang Zeile vergessen.

1.3.1. Ein weiteres Beispiel:

Wir nehmen unseren Beispiel Code „Hello World“ als Vorlage und speichern uns diesen als „HelloName.py“ ab.

#!/usr/bin/env python3
# Beispieldatei HelloName.py
import time, locale
name = input('Geben Sie einen Namen ein: ')
print('Hallo %s!' & name)

# Datum und Uhrzeit in aktueller Lokalisierung
locale.setlocale(locale.LC_ALL, '')
time = time.strftime('Heute ist %A, der %d. %B.')
print(time)

Dieser Programmcode enthält viele Anweisungen, die Sie bislang noch nicht kennengelernt haben, aber Ihre Bedeutung ist leicht zu verstehen:

  • import liest zwei Python Erweiterungen (Module) ein.
    time stellt Funktionen im Umgang mit Datum und Uhrzeit zur Verfügung.
    locale kümmert sich um die loakalisierung, also um die Anpassung an landesspezifische Einheiten
  • input nimmt die Eingaben über die Tastatur entgegen und speichert diese in einer Variable.
    Zusätzlich gibt Input den in den Klammern gesetzte Zeichenkette am Bildschirm aus.
  • print gibt Hallo %s! aus, wobei %s durch den Inhalt der vorabgesetzten Variable ersetzt wird.
  • locale.setlocale(…) weisst Python an, die Spracheinstellungen des Betriebssystemes zu verwenden. Ohne diese Anweisung würde alles in amerikanischer Form ausgegeben werden.
  • time.strftime(…) ist eine Methode, die Datums und Zeitangaben in die jeweilige Landessprache formatiert.
  • print gibt anschliessend den gespeicherten Wert aus.

1.4. Elementare Syntaxregeln

1.4.1. Anweisungen

Python Anweisungen werden in der Regel einzeilig geschrieben. Im Gegensatz zu vielen anderen Programmiersprachen werden sie nicht durch ein Smikolon (;) oder ein anderes Zeichen abgeschlossen.

Mehrzeilige Anweisungen sind aber auch erlaubt, wenn Anfang und Ende durch Klammern eindeutig hervorgeht. Sollte Python die mehrzeilige Struktur nicht erkennen (was leider die Regel ist), so müssen diese Anweisungen mit dem Trennzeichen Backslash (\) gebildet werden.

print('abc', 
      'efg')
a = 1 + 2 + \
    3 + 4

Anweisungen dürfen mit einem Semikolon (;) abgeschlossen werden, ist aber nur dann zwingend notwendig, wenn Sie mehrere Anweisungen in einer Zeile schreiben wollen.

a = 1; b = 2; c = 3

Diese obrige Dreifachanweisung können Sie aber auch in einer anderen Art und Weise schreiben.

a, b, c = 1, 2, 3

Wie Sie sehen, werden die Variablen und Ihre Werte hier mit einem Komma (,) getrennt. Dadurch wird intern ein Tupel gebildet, doch damit werden Sie sich später befassen.

Beide Schreibweisen sind korrekt.

1.4.2. Blockelemente

Wie in jeder anderen Programmiersprache kann auch Python mit Blockelementen umgehen. Am Anfang steht eine Anweisung, wenn diese erfüllt ist, dann wird Python diesen Anweisungsblock ausführen, ansonsten wird Python diesen Block überspringen. Sollte eine zweite Anweisung vorhanden sein, so wird Python versuchen diese auszuführen, sofern die Bedingung erfüllt wurde.

if xxx:
    anweisung1a
    anweisung1b
else:
    anweisung2a
    anweisung2b
    anweisung2c

Richtig einrücken

Für das Ausmass der Einrückung gibt es keine starren Regeln. Ein Zeichen reicht offziell aus, aber aufgrund der lesbarkeit werden mindestens 4 Zeichen empfohlen
Bitte benutzen Sie keine Tabulatorenzeichen. Durch Tabulatorenzeichen nimmt Python an, ein vielfaches von 8 Zeichen zu benutzen.

Sie können diese Blockelemente auch direkt nach der Anweisung ausführen. Beachten Sie, das bei mehreren Elementen im Anweisungsblock die durch ein Semikolon (;) getrennt werden müssen.

if xxx: anweisung

if xxx: anweisung1a; anweisung1b

1.4.3. Print

Die Anweisung print haben Sie bereits kennengelernt. Damit können Sie unkompliziert Variableninhalte und/oder Textnachrichten ausgeben.

Obwohl print in Zukunft weniger benutzt werden wird, da man eher die Resulte direkt in Dateien oder in eine grafische Benutzeroberfläche schreiben wird, gehen wir in diesem Bereich auf print ein.

Print kann noch viel mehr, als man sich vorstellen kann. Klassisch übergibt man die Anweisung print, gefolgt von einer runden Klammer, in der eine oder mehrere Paramter mit übergeben werden.

print(1, 2, 3/4, 'abc', 2==3)
1, 2, 0.75, abc, False

print('1/7 ist', 1/7)
1/7 ist 0.1428571428571428

x, y, z = ['eine', 'Liste'], ('ein', 'Tupel'), {'ein', 'Set'}
print(x, y, z)
['eine', 'Liste'] ('ein', 'Tupel') {'ein', 'Seit'}

print kennt 3 optionale Parameter:

  • sep stellt eine Zeichenkette ein, die zwischen Parametern ausgegeben wird – standardmässig ‚ ‚.
  • end definiert die Zeichenkette, die nach dem letzten Parameter ausgegeben wird – standardmässig ‚\n‘
  • file bestimmt, wo die Ausgabe durchgeführt wird. Normalerweise werden die Ausgaben zur Standardausgabe umgeleitet, file gibt die Möglichkeit, die Ausgabe in eine Textdatei zu schreiben.
print(1, 2, 3, sep='---')
1---2---3

print(1, 2, 3, sep=';', end='.\nEOF\n')
1;2;3
EOF

f = open('out.txt', 'w')
print(1, 2, 3, file=f)
f.close()

1.4.4. Input

Während print Ausgaben in einem Terminalfenster durchführt, bzw. in ein File schreibt, kann input Daten Ihrer Tastatureingaben in einer Variable speichern und dann verarbeiten.

input gibt zuerst den im optionalen Parameter angegebenen Text aus und erwartet dann eine Eingabe die mit return abeschlossen wird.

name = input('Geben Sie einen Namen ein: ')
print('Der eingegebene Name lautet: ', name)

Leere Eingaben, also ein Return ohne Text wird mit einem EOFError quittiert.

1.4.5. Module und „import“

Gerade für Einsteiger wirkt Python gross und übermächtig, in Wirklichkeit sind alle implementierten Funktionen aber überschaubar.

Wenn man zusätzliche Funktionen benötigt, als Beispiel für Mathematiche Berechnungen, so kann und müssen diese vor der Verwendung importiert werden.

Dafür gibt es verschiende Syntaxvarianten, aber ich werde hier nur auf die wichtigsten eingehen.

  • import modulname Diese Anweisung liest das Modul und danach kann mit einer defininierten Schreibweise modulname.funktionsname() darauf zugegriffen werden.
    Mit import m1, m2, m3 können auch mehrere Module importiert werden
  • import modulname as m Bei dieser Variante können die im Module definierten Funktionen in der Form m.funktionsname() verwendet werden. Gerade bei längeren Modulnamen minimiert dies des Tippaufwand und macht den Code übersichtlicher.
  • from modulname import n1, n2. Bei dieser Variante können einzelne oder mehrere Funktionen oder Klassen n1 oder n2 ohne das Vorstellen des Modulnamens verwendet werden.
  • from modulname import * Diese Anweisung import alle Funktionen aus dem Modul, welche nicht mit __ beginnen. Vorsicht: Mit dieser Variante kann es passieren, das Sie unbeabsichtigt den Inhalt gleichnamiger Variablen überschreiben.

Import Anweisungen werden immer am Anfang eines Python Scripts gesetzt. Module können weitere Module importieren, Python merkt sich, welche Module bereits eingelesen wurden und vermeidet somit einen neuerlichen Import bereits importierter Module.

import sys
print(sys.path)

['',
 '/usr/lib/python36.zip',
 '/usr/lib/python3.6',
 '/usr/lib/python3.6/lib-dynload',
 '/usr/local/lib/python3.6/dist-packages',
 '/usr/lib/python3/dist-packages']

Namenskonflikte zwischen Ihrem Script und einem Modul

Vermeiden Sie im lokalen Verzeichnis Dateinamen, die mit Modulnamen übereinstimmen.
Wenn Sie als Beispiel in enem Python Script import csv ausführen und es im lokalen Verzeichnis die Datei csv.py gibt, dann wird diese anstelle des gewünschten Python-Moduls importiert.

Kommentare

Einfache Kommentare werden mit dem Zeichen # eingeleitet und reichen bis zum Ende der Zeile

# Das ist ein Kommentar
print('abc')              # Das ist noch ein Kommentar
# Mit ''' (3* ') oder """ (3* ") können Sie mehrzeilige Kommentare darstellen.

Wenn Sie einen mehrzeiligen Kommentar richtig plazieren (z.B. unmittelbar nach der Definition einer Funktion oder Klasse) dann gelten diese als Docstrings und werden durch das intenere Python Dokumentationssystem ausgewertet.

Weitere Informationen zu Docstrings finden sie hier:
PEP 257 – Docstring Conventions | peps.python.org