Programmieren mit Python 3

Sie wollen noch mal die Einführung lesen(?)

"Hello,world!" in Python 3 erläutert

So wird das Programm aussehen, dass Sie am Ende dieses Kapitels erstellt haben werden:

pythonHelloWithName.jpg

Wenn Sie bis hierhin durchgehalten haben, haben Sie das "Schlimmste" schon geschafft. Sie haben immerhin ein voll funktionsfähiges Programm geschrieben, das ich Ihnen zugegebenermaßen "vorgekaut" habe, das die Standard-Funktionen einer modernen GUI-App(likation) unterstützt. Daher folgt als nächstes eine Erläuterung, was die einzelnen Zeilen dieses Programms bewirken, in Form eines kommentierten Quelltexts. Kommentare beginnen in Python immer mit dem Hash-Zeichen (#) alles danach bis zum Zeilenende ist Kommentar (wird vom Python-Interpreter ignoriert) und wird in IDLE mit roter Schrift dargestellt (Farbe kann man allerdings ändern, daher ist es auf Ihrem System evtl. eine andere Farbe). Außerdem wird das Programm geringfügig erweitert.

Empfehlung(!): Laden Sie den Quelltext (Source) unten mittels "Copy & Paste" in IDLE (die Zeilennummern am Anfang dürfen Sie aber NICHT mit kopieren!), dann haben Sie den Vorteil des Syntax-Highlightings, dass ich Ihnen in dieser Webseite leider noch nicht bieten kann (ich versuche da was zu finden, weiß aber noch nicht, wie ich das in HTML/PHP realisieren kann - ich möchte möglichst ohne JavaScript auskommen, weil das nicht jeder installiert hat/ bzw. zulässt - die wunderbare Sprache "Python", die man auch als HTML-Server-Sprache verwenden kann, lässt mein Provider leider nicht zu :-( ).

ACHTUNG: UNIX-Nutzer: Sie müssen in der ersten Zeile des Programms das erste Zeichen, NUR(!) den ersten Hash (#) UNBEDINGT löschen!
1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  ##!/usr/bin/python3  # oder heisst es /usr/bin/python ? Hab kein UNIX installiert. # Obige Zeile ist der "Shebang" fuer UNIXoide Betriebssysteme, wodurch # man dieses Programm einfach mit dem Dateinamen ausfuehren kann. Evtl. # muss der Pfad angepasst werden, falls der Pyhton 3 Interpreter nicht # unter /usr/bin liegt. Unter Windows hat dies keine Bedeutung, hier # erreichen Sie das, indem sie diese Datei mit der Endung .pyw speichern. # Ein GUI(!) "Hello, world!" fuer Python 3 kommentiert # und etwas erweitert. (GUI: Graphical User Interface) # Alles (*) vom Grafischen (GUI) Toolkit einbinden (importieren): from tkinter import * # Achten Sie auf die Gross-/Kleinschreibung bei # "tkinter" ! ! ! In Version 2.x hiess das TKinter # ---^--- import sys # Systemfunktionen einbinden (zum beenden benoetigt) # Ein Tkinter-Fenster erstellen: win=Tk() # Achten Sie auf die Gross-/Kleinschreibung bei "Tk"! # hier ist es gleichgeblieben (s. o.) # Fenster groesser machen, damit wir es leichter finden: win.geometry("500x192") # Jetzt geben wir dem Fenster (der Titelleiste) noch einen Namen: win.wm_title("Hello, world! in Python 3") # beachten Sie: win=Tk(...) und dann hier win.wm_title(...) - so einfach # Jetzt erstellen wir den "Button" (Schaltflaeche): btnHello = Button(win, text= """ Hello, world! Klicken, um diese App(likation) zu beenden """, command=sys.exit) # ruft die Methode sys.exit() auf, die das Programm # beendet, wenn der Button angeklickt wird btnHello.pack() # ohne diese Zeile wird der Button nicht gezeichnet #Fertig! win.mainloop() # Hiermit lassen wir unsere App(likation) laufen, wenn # sie nicht unter Idle (der Python Entwicklungsumgebung) # laeuft. # Alles andere macht die Applikation selbst (Beenden, Fenster # verschieben/vergroessern). Die Zeilen von: # # btnHello = ... # bis einschliesslich # btnHello.pack() # # kann man auch noch weglassen. Dann kann man das Programm nur ueber # den "X"-Button in der Titelleiste beenden. (Der Button wird dann nicht # in das Fenster gezeichnet.) # p. s.: Ich habe mich bemueht alle Umlaute in diesem Quelltext zu # umschreiben. Aber bei Python 3.x ist das gar nicht mehr # notwendig - IM GEGENSATZ ZU Python 2 (wo das selbst # in Kommentaren teilweise zu Fehlern fuehrte). Versuchen Sie es! # T R O T Z D E M sollten sie zumindest in Variablen- und Methodennamen # KEINE Umlaute, Akzentbuchstaben, ... verwenden, auch wenn es geht.

Legen Sie in IDLE ein neues File an und fügen Sie obigen Quelltext mit Copy & Paste ein (Zeilennummern dürfen Sie nicht mit kopieren ; man kann, darauf habe ich geachtet, so markieren, dass die Zeilennummern NICHT selektiert [markiert] sind!), damit Sie die Vorteile des Syntax-Highlightings nutzen können. Speichern Sie die Datei unter einem Namen mit Endung .py bzw. .pyw (Windows) und rufen Sie diese Datei auf (z. B. mit Doppelklick im Windows Explorer auf die Datei).

Der Text zwischen den 3-fachen Anführungszeichen (Zeilen 30-34) ist ein String (Zeichenfolge). Normalerweise begrenzt man Strings in Python mit Double Quotes (") oder Single Quotes ('). Dann dürfen aber keine Zeilenumbrüche in dem String enthalten sein, Begrenzt man einen String zwischen """ (drei doppelten Anführungszeichen), dann darf er echte Zeilenumbrüche enthalten, alle anderen Formatierungszeichen gelten aber auch innerhalb eines solchen Strings. Möchte man die Bedeutung der speziellen Formatierungssequenzen aufheben, muss man sogenannte "Raw-Strings" verwenden, indem man vor die Anführungszeichen/Apostrophe noch ein kleines r schreibt, z. B. r"""Ein
roher String\n.""" würde ausgeben:

Ein
roher String\n.

Ohne das r davor, würde stattdessen durch '\n' ein Zeilenumbruch eingefügt. Auch unter Windows, obwohl Windows normalerweise '\r' und '\n' als Zeilenendezeichen erwartet. Das 'r' darf man mit allen Arten von String-Begrenzern verwenden (r"...", r'...', r'''...''')

Jetzt haben Sie vermutlich verstanden, wie obiges Programm funktioniert, aber normalerweise will man ja in einem Programm eine Aufgabe ausführen, die nicht eine eingebaute Standard-Aktion, wie das Beenden des Programms ist. Sehen Sie sich hierzu Zeile 35 an. Statt die Systemfunktion "sys.exit()" aufzurufen, können Sie eine selbst geschriebene Methode (Funktion/Prozedur) aufrufen.



Eigene Methoden (Funktionen, Prozeduren) in Python

Eine eigene Funktion (Methoden sind Funktionen in einer Klasse - eigene Klassen verwenden wir bislang noch nicht) erstellt man in Python mit dem Keyword (Schlüsselwort) def, z. B.:

def meineDoWhatIAmThinkingFunktion(argument_1, argument_2): # Doppelpunkt am Ende(!) # Hier erfolgen (gleichmaessig eingerueckt!) die Anweisungen # der Funktion (Methode, Prozedur) # # Soll die Methode einen Wert zurueckgeben, z. B. "Die Antwort" auf die Frage # nach "nach dem Leben, dem Universum und dem ganzen Rest" (siehe Wikipedia # "42 (Antwort)") dann verwenden Sie return mit einem Rueckgabewert: return 42 # Hier ist die Funktion zu Ende, Python erkennt das an der Einrueckungstiefe. # In Python muessen Sie richtig einruecken, auch bei "if ... # else ... endif, Schleifen usw.! Die Einrueckungstiefe ist ein Syntaxelement!" # hier kommen jetzt ganz normale Anweisungen wie z. B.: pi=3.14

Diese Funktion können Sie jetzt folgendermaßen aufrufen:

antwort = meineDoWhatIAmThinkingFunktion("Frage:","Was ist der Sinn...")

Die Anzahl der Argumente einer Funktion ist beliebig von 0 Argumenten (keine Argumente) bis "soviel Sie wollen". Beim Aufruf müssen Sie nur so viele Argumente, da nennt man es häufig auch Parameter, angeben, wie in der Funktionsdefinition angegeben sind. Wobei das kann man in Python auch auf verschiedene Arten umgehen - eine genaue Erklärung würde jetzt aber zu weit führen.

Jetzt haben wir so ziemlich alles zusammen, um ein "richtiges" Programm zu schreiben, die fehlenden Elemente werden im nächsten Abschnitt erklärt. Vorab noch ein wichtiger Hinweis: Funktionen (Prozeduren gibt es nicht in Python, aber eine Funktion muss keinen Wert zurückgeben) müssen vor ihrem ersten Aufruf definiert sein - d. h. sie müssen vor dem "Hauptprogramm" stehen.



Python Programm mit Ein-  UND  Ausgabe auf dem Bildschirm

ACHTUNG: UNIX-Nutzer: Sie müssen in der ersten Zeile des Programms das erste Zeichen, NUR(!) den ersten Hash (#) UNBEDINGT löschen!

1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  ##!/usr/bin/python3 # Benoetigte System-Module importieren: from tkinter import * import sys # Hier schreiben wir jetzt unsere eigene Funktion fuer den Button: def myFunc(): # Die Methode darf keine Parameter haben! Doppelpunkt beachten! returnString = "Hello, " # Jetzt holen wir uns, was in unserem "Entry"-Feld (das wir unten # angelegt haben) steht: tempString=entName.get() # Jetzt fuegen wir das an unseren returnString an und gleich noch # das Ausrufezeichen hinterher: returnString = returnString + tempString + "!" # Und jetzt fuegen wir das ganze am ENDe in die Listbox ein, die # wir unten angelegt haben: lbxGreetings.insert(END, returnString) # # Wenn eine Funktion (wie diese) keinen Wert zurueck gibt, benoetigen # wir keine return Anweisung, duerfen sie aber (ohne Argument) schreiben: #return # Sie koennen das erste #-Zeichen in dieser Zeile optional entfernen # Der Rest ist jetzt wieder unser Programm von vorhin, mit einigen # Ergaenzungen (insbesondere haben wir zwei neue "Widgets" (grafische # Elemente einer Grafischen Benutzeroberflaeche) hinzugefuegt: # Entry: Damit kann der Benutzer einen String eingeben # Listbox: Damit kann der Programmierer (SIE) etwas ausgeben # Ausserdem haben wir den Text des Buttons und natuerlich dass Kommando, # dass der Button bei einem Klick ausfuehren soll, geaendert: # Ein Tkinter-Fenster erstellen: win=Tk() win.geometry("500x100") # Wir verkleinern das Fenster etwas win.wm_title("Hello, world! Mit Namensausgabe in Python 3") # Jetzt erstellen wir den Button: btnHello = Button(win, text="Print a Greeting for:", command=myFunc) # jetzt rufen wir hier unsere eigene Methode # myFunc() von oben auf, die den Text, der in dem # Entry Feld steht, ausliest, mit diesem Text den # Begruessungs-String erstellt und ihn an das Ende # der Listbox anfuegt btnHello.pack() # ohne diese Zeile wird der Button nicht gezeichnet # Wir benoetigen eine Moeglichkeit, einen Namen einzugeben, das geht z. B. # mit der "Entry"-Klasse (was eine Klasse ist, wird spaeter mal erklaert, # bzw. schlagen Sie es selbst nach): entName=Entry(win) # Wir wollen, dass das Eingabefeld der Klasse "Entry" in # unserem Fenster "win" platziert wird (Entry ist die Klasse) entName.pack() # Ausserdem benoetigen wir noch eine Moeglichkeit fuer die Ausgabe, dazu # verwenden wir die Klasse "Listbox": lbxGreetings=Listbox(win) # der Parameter "win" ist wie bei entName, unser Fenster lbxGreetings.pack() win.mainloop() # App(likation) laufen lassen

ACHTUNG/WARNING: Wenn Sie das Programm in einen Editor wie Notepad eingeben, speichern und aufrufen, funktioniert es evtl. nicht. Laden Sie es in Idle, dort bekommen Sie entweder beim Laden oder Speichern einen Hinweis wegen der Zeichencodierung. Bestätigen Sie diese, danach sollte das Programm laufen. Sorry - es ist leider verdammt kompliziert mit den diversen Zeichencodierungen und mit Python. Python ab 3.0 benötigt (IMHO) UTF-8, Python 2.x dagegen ANSI (einen reinen 8-Bit Code). Solange keine speziellen Zeichen (wie z. B. die deutschen Umlaute vorkommen, ist ANSI identisch mit UTF-8, die ersten 128 Zeichen halt).

Jetzt können Sie in das Eingabefeld (Entry) einen Namen eingeben und (nein, nicht ENTER drücken, soweit sind wir noch nicht) auf den Button "Print a Greeting for:" klicken, und in der Listbox unten wird eine Begrüßung am Ende hinzgeügt. Wenn Sie jetzt viele "Begrüßungen hinzufügen, werden sie die untersten nicht sehen können und es kommt auch nicht automatisch ein Scroll-Balken rechts. Trotzdem können Sie bereits "scrollen"! Bewegen Sie den Mauszeiger einfach über die Listbox und drehen Sie das Mausrad. Oder klicken Sie die Listbox an und nutzen sie die Cursor-(Pfeil-)Tasten auf Ihrer Tastatur. Wie man einen "Scrollbar" hinzufügt, kommt später bzw. wird Ihnen als "Exercise" überlassen ;-)

Wie Sie sehen "Programmieren in Python" ist nicht schwer. Sie haben jetzt vielleicht eine bis maximal 4 Stunden benötigt, um diese triviale Einführung nachzuvollziehen und haben bereits ein Programm mit grafischer Oberfläche(!), in dem SIE Benutzereingaben verarbeitet haben und danach das Ergebnis der Bearbeitung ausgegeben haben, erstellt.

Das ist das Grundprinzip jedes Programms (neudeutsch "App")

Im nächsten Kapitel schreiben wir dann ein "richtiges Programm": Einen Tischrechner.