Python unter Linux: Erste Schritte

Aus Wikibooks
Zur Navigation springen Zur Suche springen

Hallo, Welt![Bearbeiten]

Ein einfaches Hallo, Welt!-Programm sieht in Python folgendermaßen aus:

#!/usr/bin/python
print "Hallo, Welt!"

Speichern Sie diese Datei unter zum Beispiel erstes.py und geben Sie der Datei Ausführungsrechte über chmod u+x erstes.py. Anschließend können Sie das Programm mit ./erstes.py in einer Linux-Shell ausführen:

Align=none Ausgabe

user@localhost:~$ ./erstes.py
Hallo, Welt!

Die erste Zeile enthält den sogennanten Shebang, eine Zeile, die in der Shell den passenden Interpreter für das folgende Skript aufruft. Die zweite Zeile enthält die erste Python-Anweisung. Der Text innerhalb der Hochkommata wird ausgegeben. print fügt ein New-Line-Zeichen an.

#!/usr/bin/python
print "Hallo,",
print "Welt!"

Dieses Skript erzeugt die gleiche Ausgabe, jedoch sorgt das Komma dafür, daß statt eines New-Line-Zeichens ein Leerzeichen eingefügt wird.

Align=none Ausgabe

user@localhost:~$ ./erstes1.py
Hallo, Welt!

Python können Sie auch im interaktiven Modus benutzen. Diese Art, Python aufzurufen eignet sich besonders dann, wenn Sie kleine Tests vornehmen wollen:

Align=none Ausgabe

user@localhost:~$ python
Python 2.7.3 (default, Feb 27 2014, 20:00:17)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print "Hallo, Welt"
Hallo, Welt
>>>

>>> ist die Eingabeaufforderung. Wenn Sie diese sehen, dann können Sie direkt loslegen. Drücken Sie am Ende der Eingabe Return, so wird die Programmzeile ausgeführt.

Umlaute[Bearbeiten]

Falls Sie jetzt schon mit dem Code experimentiert haben, wird Ihnen unter Umständen aufgefallen sein, dass die Ausgabe der Umlaute nicht korrekt war: Sie bekamen eine Fehlermeldung zu sehen. Folgender Code behebt das Problem:

#!/usr/bin/python
# -*- coding: iso-8859-1 -*-
print "Über Sieben Brücken..."
Align=none Ausgabe

user@localhost:~$ ./umlaute.py
Über Sieben Brücken...

Die Zeile coding: iso-8859-1 enthält die Zeichensatzkodierung, die Sie im gesamten Quellcode verwenden dürfen. Welche Kodierung Sie verwenden, hängt von den von Ihnen benutzten Programmen ab. Statt iso-8859-1 können Sie selbstverständlich auch utf-8 oder eine andere von Ihnen bevorzugte Codierung verwenden.

Eingaben[Bearbeiten]

Eingaben auf der Shell werden mit dem Befehl raw_input() entgegengenommen:

#!/usr/bin/python
print "Wie ist Ihr Name?",
Name = raw_input()
print "Ihr Name ist", Name
Align=none Ausgabe

user@localhost:~$ ./eingabe1.py
Wie ist Ihr Name? Rumpelstilzchen
Ihr Name ist Rumpelstilzchen

Name ist hierbei eine Variable von Typ String. Sie muss nicht explizit vereinbart werden, sondern wird erzeugt, wenn sie gebraucht wird.

Man kann raw_input() ein Argument mitgeben. Dadurch erspart man sich die erste print-Anweisung. Die Ausgabe ist dieselbe wie im ersten Beispiel.

#!/usr/bin/python
Name = raw_input("Wie ist Ihr Name? ")
print "Ihr Name ist", Name

Weitere Ausgaben[Bearbeiten]

Neben Zeichenketten können Sie auch Zahlen eingeben, diese Zahlen werden von raw_input() jedoch als Zeichenketten behandelt, eine Konversion macht aus ihnen ganze Zahlen:

#!/usr/bin/python
Alter = int(raw_input("Wie alt sind Sie? "))
print "Sie sind", Alter, "Jahre alt."
Align=none Ausgabe

user@localhost:~$ ./ausgabe1.py
Wie alt sind Sie? 100
Sie sind 100 Jahre alt.

Alter soll eine ganze Zahl werden, deswegen schreiben wir um das Ergebnis der Eingabe eine Konvertierungsaufforderung. int(String) erzeugt aus einem String eine Zahl, wenn der String nur aus Ziffern besteht.

Beim Experimentieren mit diesem Programm fällt auf, daß es bei der Eingabe von nicht-Ziffern abstürzt:

Align=none Ausgabe

user@localhost:~$ ./ausgabe1.py
Wie alt sind Sie? abc
Traceback (most recent call last):
  File "ausgabe1.py", line 2, in <module>
    Alter = int(raw_input("Wie alt sind Sie? "))
ValueError: invalid literal for int() with base 10: 'abc'

Diesem Problem wollen wir in einem späteren Kapitel auf die Spur kommen, wenn es um Ausnahmebehandlung geht. Konvertierungen von Datentypen besprechen wir im nächsten Kapitel.

Eine andere Art, die Ausgabe dieses Programmes zu formatieren, sind Formatstrings:

#!/usr/bin/python
# -*- coding: utf-8 -*-
Name = raw_input("Wie heißen Sie? ")
Alter = int(raw_input("Wie alt sind Sie? "))
print "Sie heißen %s und sind %d Jahre alt." % (Name, Alter)
Align=none Ausgabe

user@localhost:~$ ./ausgabe2.py
Wie heißen Sie? Rumpelstilzchen
Wie alt sind Sie? 109
Sie heißen Rumpelstilzchen und sind 109 Jahre alt.

Hier bedeutet ein %s einen String, %d eine ganze Zahl. Die Variablen, welche die so erzeugten Lücken füllen, werden am Ende des Strings nachgeliefert, wobei das Prozentzeichen die Argumentenliste einleitet. Die dem String übergebenen Argumente werden in Klammern als so genanntes Tupel, darauf kommen wir noch zu sprechen, angeführt.

Das Prozentzeichen hat insgesamt drei Bedeutungen: Als mathematische Operation ist es ein Modulo-Operator, als Trennzeichen in Formatstrings leitet es die Argumentenliste ein und als Formatierungssymbol zeigt es an, dass nun ein Argument folgt.

Elementare Datentypen[Bearbeiten]

Strings können explizit durch ein vorangestelltes u als UTF-8-Strings erklärt werden, Strings, in denen Steuerzeichen vorkommen, die als Text ausgedruckt werden sollen, muss hingegen ein r vorangestellt werden:

#!/usr/bin/python
# -*- coding: utf-8 -*-

UTFText = u'Dies\u0020ist\u0020UTF-8'
RoherText = r'Noch\tein\tText\nMit\u0020Steuerzeichen!'
NormalerText = 'Ein\tText\nMit Steuerzeichen!'

print UTFText
print RoherText
print NormalerText
Align=none Ausgabe

user@localhost:~$ ./ed1.py
Dies ist UTF-8
Noch\tein\tText\nMit\u0020Steuerzeichen!
Ein Text
Mit Steuerzeichen!

Innerhalb von UTFText werden UTF-8-Zeichen, in diesem Fall das Leerzeichen, eingefügt. Der Text RoherText wird mitsamt Steuerzeichen ausgegeben, während bei NormalerText die Steuerzeichen interpretiert werden. Es werden hier ein Tab und eine Neue Zeile eingefügt.

Zahlen werden so behandelt, wie man es sich naiv vorstellt:

#!/usr/bin/python

a = 3
b = 7
print a + b, a - b, b % a, b / a

c = 3.14
print "%f**2 = %f" % (c, c**2)
Align=none Ausgabe

user@localhost:~$ ./ed2.py
10 -4 1 2
3.140000**2 = 9.859600

Der Ausdruck b % a ist die Modulo-Operation, der Ausdruck c**2 hingegen berechnet das Quadrat von c.

Funktionen und Module[Bearbeiten]

Funktionen dienen dazu, wiederkehrenden Code zu gliedern und so die Programmierung zu vereinfachen. Meist werden in Funktionen Dinge berechnet, oft geben Funktionen das Rechnungsergebnis wieder preis. Eine solche Rechnung ist s = sin(3,14):

#!/usr/bin/python

import math

s = math.sin(3.14)
print s
Align=none Ausgabe

user@localhost:~$ ./fumu.py
0.00159265291649

Hier wird das gesamte Modul math importiert. Einzig die Sinusfunktion wird gebraucht, das Ergebnis der Rechnung wird zuerst in die Variable s übernommen und anschließend auf dem Bildschirm dargestellt. Auf Module werden wir noch detailliert in einem eigenen Kapitel zu sprechen kommen.

Kommentare[Bearbeiten]

Kommentare helfen dabei, den Quellcode leichter zu verstehen. Als Faustregel soll soviel wie nötig, so wenig wie möglich im Quellcode dokumentiert werden. Wie ein Programm funktioniert, sollte ersichtlich sein, was aber ein Abschnitt warum tut, soll dokumentiert werden.

#!/usr/bin/python

"""Das folgende Programm berechnet
 die Summe zweier Zahlen"""

# Zahlen eingeben
a = raw_input("Bitte eine Zahl eingeben: ")
b = raw_input("Bitte noch eine Zahl eingeben: ")

# in ganze Zahlen konvertieren
aZahl = int(a)
bZahl = int(b)

# Summe berechnen und ausgeben
summeZahl = aZahl + bZahl
print summeZahl

Der erste Kommentar wird mit """ eingeleitet und geht so lange, auch über mehrere Zeilen, bis wieder """ vorkommt. Kommentare, die mit # beginnen gehen bis zum Ende der Zeile.

Einrückungen[Bearbeiten]

Eine Besonderheit von Python ist, dass zusammengehöriger Code gleich gruppiert wird. Blöcke werden anders als in anderen Programmiersprachen nicht etwa durch Schlüsselwörter[1] oder durch spezielle Klammern[2] gekennzeichnet, sondern durch Einrückung.

Als Vorgriff auf das Kapitel Kontrollstrukturen zeigen wir ihnen, wie zwei print-Anweisungen gruppiert werden.

#!/usr/bin/python

a = 0
if a < 1:
    print "a ist kleiner als 1"
    print "noch eine Ausgabe"

Die beiden print-Anweisungen gehören zusammen, weil sie die gleiche Einrückung haben. Beide werden nur ausgeführt, wenn der zu if gehörende Ausdruck wahr ist.

Zusammenfassung[Bearbeiten]

Sie haben nun die grundlegenden Merkmale von Python kennengelernt und können bereits einfache Programme schreiben. In den folgenden Kapitel werden wichtige Grundlagen für die nächsten Schritte behandelt, zum Beispiel Datentypen und Kontrollstrukturen, Funktionen, Module und Objekte. Damit wird es möglich, komplexere Programme zu schreiben, die eine Strukturierung in sinnvolle Abschnitte, Wiederholungen und Entscheidungen ermöglichen. Es folgen Zugriff auf Dateien und reguläre Ausdrücke, mit denen man sein Linux schon sinnvoll erweitern kann. Danach sehen wir weiter … ;-)

Anmerkungen[Bearbeiten]

  1. z. B. begin und end in Pascal
  2. Die geschweiften Klammern in C, C++ und Java sind typisch für viele Sprachen