Python 3 Lernen Tutorial Workshop
Warum benötige ich Resilienz, Geduld und Verständnis, wenn ich eine Programmiersprache lernen möchte?
Um Dir zu erklären, woher das Ei kommt, musst Du über das Huhn Bescheid wissen.
Entweder akzeptierst Du, dass es vor dem Ei schon ein Huhn gab, oder Du lässt Dein Qi durch Stressgedanken unterbrechen, weil Dir noch niemand erklärt hat, woher das Ei kommt und das nun zuerst da war… das Huhn oder das Ei.
So ist es auch mit Sprachen:
Du wirst viele Beispiele vorfinden und viele Elemente wurden Dir zuvor noch nicht beigebracht.
Das kann frustrieren, gehört jedoch zum Lernweg dazu. Akzeptiere Syntax und einige „leichte unzufriedenstellende „Erklärungen und vertraue darauf, dass es sich am Ende erklären und lichten wird.
Genug philosophiert, wie programmieren und starten wir nun unser erstes Programm?
Wir fangen mit einem Beispiel an und widmen uns dann einer kurzen Erläuterung.
Als Erstes denken wir uns ein Wort aus:
z.B. DiesIstMeineVariable und speichern dort eine Zeichenkette/String die „Hallo Welt“ ausgibt:
Öffne Dein Terminal und starte die Python Shell über
python3
Gebe dort folgendes aus:
DiesIstMeineVariable = „Hallo Welt“
print(DiesIstMeineVariable)
Die Variable ist also ein Speicherort für Deine Daten.
Du kannst Sie fast beliebig verwenden.
Sie sollten nicht zu lang sein und keine reservierten Schlüsselwörter enthalten.
Diese sind :
False def if raise
None del import return
True elif in try
and else is while
as except lambda with
assert finally nonlocal yield
break for not
class from or
continue global pass
Gewöhne Dir am Anfang an, Deine Variablen mit „mein“ oder sonstigen Zusatz zu definieren und Du wirst hier keine Schwierigkeiten haben.
Zudem sollten sie Aussagekräftig sein, w.z.B.
Kunden_Datenbank
Debitor_Datenbank
Anzahl_Kunden
AnzahlKunden
Wie haben berieits über Zeichenketten gesprochen und haben hier das Schlüsselwort „String“ erwähnt.
Strings sind Zeichenketten.
In unserer Variable haben wir also eine Zeichenkette gespeichert.
Zeichenketten haben einige Besonderheiten .
Sie werden mit Anführungsstriche gekennzeichnet
„Hallo Welt“
Alle Zeichen innerhalb der Anführungsstiche werden als Zeichenkette wahrgenommen und vorerst als normale Speicherdaten verarbeitet.
Aber auch hier gibt es Ausnahmen.
Wir sehen uns sofort zwei Beispiele an:
print(„Hallo Welt“)
print(„Hallo \nWelt“)
Du erkennst sicherlich schon die Unterschiede und viele Worte tun hier nicht mehr Not.
mit \ kannst Du sogenannte „Escape Charakter“ definieren.
Es erspart Dir zum Beispiel mehrere Print-Befehle auszuführen, um unterschiedliche Zeilen zu bedienen.
Zudem kannst Du darüber auch Anführungszeichen verwenden, ohne damit Deine Zeichenkette zu zerstören.
Zum Beispiel
Lasse folgenden Satz über Print ausgeben
Mein Programm heisst „Hallo Welt!“
Probiere es erst und lese dann weiter:
Wie hast Du es vielleicht umgesetzt:
print (“ Mein Programm heisst „Hallo Welt!“ “ )
Wie bereits angedeutet akzeptiert und tolleriert unser Interpreter und Meister alles zwischen den Anführungsstrichen.
Allerdings deutet er unseren Anfang und das Ende absolut falsch.
Was er sieht ist
print( „Mein Programm heist“
Er hat ein Anfang und ein Ende gefunden und erwartet danach das ENDE des Print-Befehls also ) .
Doch plötzlich kommt eine weitere Zeichenkette „Welt“ “ ) und damit kann er nichts anfangen.
Somit müssen wir diese zusätzlichen Anführungsstriche tolerierbar machen.
Dies geschieht ebenfalls mit Escape – Charakter
Korrekt wäre:
print (“ Mein Programm heisst \“Hallo Welt!\“ “ )
Also ein Backslass sorgt innerhalb einer Zeichenkette “ …. “ für Ausnahmen.
Folgende Escape-Charakter gibt es
\‘ | Single Quote | Try it » |
\\ | Backslash | Try it » |
\n | New Line | Try it » |
\r | Carriage Return | Try it » |
\t | Tab | Try it » |
\b | Backspace | Try it » |
\f | Form Feed | |
\ooo | Octal value | Try it » |
\xhh | Hex value |
Wir schreiben unsere erste ausführbare Python-Datei.
Öffne den Text-Editor Deines Vertrauens oder den Atom-Editor
Trage dort folgenden Code ein:
print(„Dieses Progrann addiert 2 Werte miteinander“)
print(„Folgende Zahlen werden berechnet \n zwei + fünf“)
print(2+5)
print(“ Wir können dies auch über Variablen lösen“)
meine_zahl1 = 2
meine_zahl2 = 5
mein_ergebnis = meine_zahl1+meine_zahl2
print(ergebnis)
Speichere diesen Code als erstesprogramm.py ab.
Öffne Deinen Browser, geh in den jeweiligen Ordner und rufe Dein Programm über den Befehl : python3 erstesprogramm.py ab.
Die Ausgabe sollte wie folgt sein:
Dieses Progrann addiert 2 Werte miteinander
Folgende Zahlen werden berechnet
zwei + fünf
7
Wir können dies auch über Variablen lösen
7
Es ist egal, ob wir die Addition sofort als print-Ausgabe ausgeben, oder über eigenst erstellte Variablen durchführen.
Nun, das Programm ist selbsterklärend, daher nutzen wir die Zeit, um
Dich jetzt etwas zu verwirren !
Schreibe ein Programm mit dem folgenden Code, doch führe ihn noch nicht aus:
print(„Folgende Zahlen werden ausgegeben \n zwei“ + fünf“)
print(„2″+“5“)
Was wird die Ausgabe sein ?
Du kannst Dir sicher schon denken, wenn ich Dir diese Frage stelle, dann ….
… und ja. das Ergebnis wird 25 sein.
Aber warum ?
Ich habe Dir bereits die Eigenschaften von Zeichenketten erläutert.
Alles zwischen den Anführungszeichen wird vom Interpreter als String und reine Zeichenkette wiedergegeben. Ihm ist es nun egal, ob dort 2 oder zwei steht.
Er wertet die 2 lediglich als unwichtiges Zeichen und nicht mehr als eine ganze Zahl.
Also gibt er hier auch nur die jeweiligen Zahlen wieder.
Mit print(„2″+“5“ fügt er also nur die zwei Zeichen langweilig aneinander, ohne damit arithmetische Operationen durchzuführen.
Also fügt er die 2 und 5 zusammen, daraus entsteht 25.
Klar ? Wenn nicht…… schaue Dir die Unterschiede erneut an.
Warum ist so etwas wichtig ?
Wir schreiben auch sofort unser nächstes Programm und erweitern dies durch die User-Eingabe:
Schreibe dazu folgenden Code :
dein_name = input(„Wie lautet Dein Name?“)
print(“ Hallo “ + dein_name + “ Trage 2 Zahlen ein, die addiert werden sollen:“)
print(„Gib Deine erste Zahl ein“)
meine_erstezahl = input()
print(„Gib Deine zweite Zahl ein“)
meine_zweitezahl = input()
meine_Addionsvariable = meine_erstezahl+meine_zweitezahl
print(„Die Addition Deiner vorgeschlagenen Zahlen ergibt“)
print(meine_Addionsvariable)
Vielleicht hast Du es Dir schon denken können, aber durch „input“ wird über die Konsole eine Eingabeaufforderung gefordert.
Darum geht es hier aber tatsächlich nicht.
Tatsächlich prüfen wir hier schon, ob Du ordentlich aufgepasst hast und lassen Dich gleichzeitig in eine Falle laufen.
Durch
dein_name = input(„Wie lautet Dein Name?“)
haben wir eine Zeichenkette in der Variable „dein_name“ gespeichert.
in
meine_erstezahl = input(„Erste Zahl:“)
hingegeben eine Zahl vom Typ Integer, also eine ganze Zahl.
Würden wir bei den Zahlen die Anführungszeichen verwenden, so würde der Interpreter diese auch als solche interpretieren und das Ergebnis wäre ebenfalls nicht korrekt .
Bei größeren Berechnungen wird die Fehlererkennung sehr kompliziert, da man es oft schnell überliest, gerade als Anfänger!
In Python sind STRINGS unveränderlich.
Bedeutet: Sind sie einfach erstellt worden, kann man sie nicht mehr ändern.
Jede sichtbare ‚Veränderung hat immer einen neuen String zu Folge.
Wie viele Strings gibt oder gab es nach folgender Ausgabe
print(„Hello“ + “ World“ )
„Hello“ ist unser erster String mit + fügen wir gedanklich einen weiteren String, nämlch
„World“ hinzu.
Allerdings muss Python darauf einen weiteren String erstellen : „Hello World“
Somit waren im Speicher 3 Strings vorgesehen:
„Hello“
„World“
„Hello World“
Ein ähnliches Verhalten, sieht man auch in anderen Programmiersprachen, wie zum Beispiel in Java.
Mit Leichtigkeit haben wir uns nun schon einige Funktionen der Klasse STRING angeschaut und erfolgreich angewandt.
String ist eine Funktion, die bereits in der Python-Programmiersprache stark verankert ist.
Anbei einige Methoden, die uns lehren mit Strings Konfortabler umzugehen.
Als Entwickler wirst Du mit zahlreichen Zeichenketten konfrontiert werden, daher ist der korrekte und gute Umgang mit
Strings essentiell .
Beispielprojekte
Web-Crawler :
Ein Web-Crawler ruft den Quellcode einer Seite auf und findet dort HTML vor.
Der Browsertitle ist zum Beispiel
<title> IRC-Mania.de </title>
Welche Schwierigkeiten haben wir hier ?
Wir müssen den Title Tag erkennen und entfernen.
Wir müssen zwischen den Title-Tags prüfen, ob dort noch andere Tags vorhanden sind.
Noch komplizierter wird es bei Auswertungen innerhalb der Homepage.
Also fangen wir mir einfachen aber wichtigen Methoden an.
Wir werden in Zukunft alle Zeichenketten in Strings legen und diese dort genauer untersuchen.
Gleichzeitig werde ich den Code über Kommentare dokumentieren.
Durch ## kann man eine Zeile Dokumentieren, ohne dass Python diese Zeilen wertet
Zum Beispiel :
mein_dokubeispiel= „Hallo“ ## Dieser Text ist nur für mich
Python verwertet nur mein_dokubeispiel= „Hallo“
Die Zeile „## Dieser Text ist nur für mich “ ist lediglich für Entwickler interessant.
Darüber dokumentieren wir nun unseren Code, damit er auch später nachvollziehbar ist.
Wir widmen uns nun der Methode „len()“ von String.
Mit len() können wir die Länger eines Strings bestimmen.
meine_variable = „Hallo“ # Hallo hat 5 Zeichen, die Länge ist also 5
print len(meine_variable) # Wir übergeben unsere Variable einer bereits bekannten Funktion len() und erhalten als Ausgabe 5. Probiere es aus
Wir können aber auch einzelne Zeichen unseres Streings ausgeben.
z.B. über
print meine_variable[0] ## Bildschirmausgabe H
print meine_variable[1] ##
print meine_variable[2]
print meine_variable[3]
print meine_variable[4]
print meine_variable[5]
Wie bereits gelernt, müssen/sollten wir Integer-Zahlen anders behandeln als Zeichenketten
str() ist eine Methode, um Zahlen z.B. innerhalb eines Strings zu integrieren.
mein_durchmesser=365
mein_text = Mein Durchmesser beträgt: + str(mein_durchmesser) + „cm“
Eine alternative zu dieser Schreibweise gibt es nicht. Man könnte lediglich drei getrennte print-Ausgaben durchführen, wenn man str() nicht nutzen möchte.
mein_text = Mein Durchmesser beträgt: + mein_durchmesser + „cm“
wird hier in einen Fehler hineinlaufen.
In diesem Fall ist es ein „Typ-Error“
„TypeError: can only concatenate str (not „int“) to str“
Die wichtigsten Stringmethoden wirst Du vermutlich in jedem Projekt nutzen.
lower() oder upper
Beispiel meinString.lower() gibt den übergebenen Strink in kleinbuchstaben zurück .
Dies wird in der Praxis verwendet, um zum Beispiel alle Benutzernamen gleich gespeichert zu haben.
Oder keine Groß und Kleinschreibung bei der eMail-Adresse zu zu lassen.
meinString.strip() bei dieser Funktion werden die Whitespaces entfernt.
Dies wird zum Beispiel genutzt, um Spam vorzubeigen. Der String Besuche mich auf W e Bs eite. DE wird zum Beispiel besser prüfbar pber
isalpha
isgitit
isspace
startswith(“other‘)
find(‚test‘)
split(‚delim‘)
Python-Slicing
Darunter versteht man einen String in Scheiben zu aufzuteilen, damit man ihn so
bearbeiten kann, wie man ihn benötigt.
Sehen wir uns den String „Python“ an.
Der String hat 6 Buchstaben, somit 6 Zeichen.
Wir müssen in der Lage sein, jedes Zeichen gesondert bearbeiten zu können.
Zumbeispiel einzelne Buchstaben zu ersetzen, sofern sie z.B. fehlerhaft sind, oder herauskopieren, falls notwendig.
In fast jeder Programmiersprache, zählen wir immer ab 0 .
PYTHON hat 6 Zeichen,somit 0 – 5
P Y T H O N
0 1 2 3 4 5
Codebeispiel
meinString(„PYTHON“)
Nehmen wir nun an, wir möchten eine Textmanipulation bei TH vornehmen.
Dann müssen wir den String über Position 2 und 3 angreifen.
meinString(„2:3)!
2:3 sagt somit aus von… bis .
Bei langen Strings können wir auch von hinten beginnen.
Dann müssen wir mit negativen Beträgen arbeiten.
Wir haben bereits festgestellt, dass wir immer bei 0 anfangen zu zählen.
Hat ein String also 6 Zeichen, dann ist der letzte Zeichen 5 , denn 0,1,2,3,4,5 = 6 Zeichen.
Sprich x-1 .
Umgesetzt auf unsere Aufgabe bedeutet dies nun:
mein.String(-3:-2)
Python Listen:
Rezepte , Kundendatenbanken, für all diese Vorhaben, nutzen wir auch mit Stift und Papier
Listen:
Auch Python hat eigene Listen-Methoden.
Methoden und Funktionen haben wir bereits kennengelernt, sie nutzen oft runde Klammern () .
Listen – Datenstrukturen erkennen wir zum Beispiel an den Eckigen Klammern.
Zum Beispiel :
Zutaten=[‚Zucker‘,Salz,’Butter‘]
Wir haben hier also eine Variable mit mehreren Elementen gefüttert.
Durch das Format erkennen wir ein Array / Liste .
Wir greifen wir nun auf diese Variable zu ?
Ähnlich, wie auf den bereits bekannten Variablen.
Bei direkter Ausgabe nehmen wir erneut Print zur Hilfe.
Unser Code-Beispiel wird nun alle 3 Elemente ausgeben:
Auch hier analysieren wir kurz unsere Liste.
Wir haben 3 Elemente gespeichert, also 0-te Elelemt, 1-Element und das 2-te Element.
print Zutaten[0]
print Zutaten[1]
print Zutaten[2]
Die Ausgabe ist dementsprechend :
Zucker
Salz
Butter
Listen können nicht kopiert werden, sie werden referenziert.
Wo ist der Unterschied.
Sehen wir uns normale Variablen mit Integerwerten an.
a=5 //a hat den Wert 5
b=a // B erhält den Wert von a, ist jedoch nun eigenständig änderbar.
a=10 // a ändert den Wert auf 10
prin(b) / b hat weiterhin den Wert 5 .
Wieder zurück zu den Listen, gerne ein ähnliches Beispiel
a=[1,2,3,4] // a hat 4 Elemente, 1,2,3,4
b= a // B Refernziert lediglich auf a, es gibt keine eigenständige Kopie!
a= [1,2] // a wurden auf 2 neue Elemente gesetzt, welchen Wert hat nun b?
print(b)
Python – Kontrollstrukturen „for “ „in“
Oft werden wir Listen vorfinden, oder erstellen, die sehr große Datenmengen beinhalten.
Kontrollstrukturen wie zum Beispiel „for“ und in“ helfen uns, die einzelnen Elemente zu prüfen und ggf. zu verwenden.
Ein einfaches Beispiel.
Wir haben zwei Listen in unserem Programm: spenden und spender.
Eine Liste beinhaltet eingehende Spenden und eine andere Liste führt die Spendernamen.
spender = ["Thomas", "Michael", "Peter"]
spenden = [ 100,400,20,10 ] # Jedes Element repräsentiert einen Spendenbetrag, z.B. 100 Euro
Nun möchten wir jedoch wissen, ob ein gewisser Name bereits als Spender aufgetreten ist:
Dies lösen wir mit einer for in -Abfrage.
Der dazugehörige Codeabschnitt:
spender = ["Thomas", "Michael", "Peter"]
if 'Thomas' in spender:
print("Spender ist vorhanden")
Dieses Beispiel ist bereits selbsterklärend.
Mit IF prüfen wir ob ein Zielstring auf die Liste „Spender“ anwendbar ist oder nicht.
Wenn der Suchstring vorkommt, wird „Spender ist vorhanden “ ausgegeben.
Die einzige Python-Haken ist hier innerhalb der Formatierung zu suchen.
Due Abfragekontrollstruktur endet mit einem Doppelpunkt.
Die darunter liegende Zeile muss sich darauf hin einrücken.
Wieviel wurde insgesamt gespendet.
spenden = [ 100,400,20,10 ] # Jedes Element repräsentiert einen Spendenbetrag, z.B. 100 Euro
gesamt =0 # Unsere Zählvariable wird grundsätzlich auf 0 gesetzt, um Fehler zu vermeiden
for num in spenden:
gesamt += num
print(gesamt)
Nun ist hier ein vordefiniertes Keyword.
"for num in spenden:" wir durchsuchen unsere Liste nach numerischen Zeichen und addieren diese in der Variable "gesamt" .
Tupel.
Auch Tupel sind, wie Listen, Datenstrukturen, um Daten in Form von Elementen zu orgranisieren und zusammen zu fassen.
Wie auch Listen, können Tupel alle Arten von Typen speichern. Sei es Interzahlen, oder Strings / Chars .
Sie unterscheiden sich lediglich in Ihrer Langlebigkeit. Tupel sind unsterblich, können also nicht verändert werden.
Wie oben bereits gezeigt, können wir Listen hingeben manipulieren und leeren. Somit gehören diese zu den veränderbaren Datenobjekten.
Unser Eingangsbeispiel bezüglich der Spenden und der Spender sind mit Tupeln kopierbar.
Lediglich anhand der Schreibweise können wir Tupel von Listen unterscheiden !
Denn hier nutzen wir runde Klammern ()
spender = ("Thomas", "Michael", "Peter")
spenden = ( 100,400,20,10 )
Das wäre unser Beispiel für Tupel.
Der Unterschied: Diese Datensammlung ist nun unabänderlich. Wir können diese Liste nicht verändern.
Daher wäre eine Spendensammlung hier keine gute Idee.
Tuep eigenen sich für feste Werte, wie ein Koordinatensystem innerhalb eines Spiels. Usw.
Tupel sind für heterogene Daten, Listen für homogene Daten.
Tipel sind schneller und verbrauchen weniger Speicher.
Eine Liste alloziert mehr Speicher, da sie erweiterbar ist.
Dictionaries
Über Dictionaries können wir Wertepaare kombinieren.
Der erste Wert wird als Schlüssel oder Keys gekennzeichnet, der zweite Wert ist der Wer bzw. Value
Wir erkennen diese Datenstrukturen an dem Klammerpaar {} und an der jeweiligen Wertezuweisung.
Wir erinnerun uns an unsere beiden Listen „spenden“ und „spender“ .
Beide Listen wurden unabhängig von einander geführt.
Es Beträge konnten keinem Spender zugeordnet werden.
Beide Listen wurden getrennt voneinander manipulier.
Bei Dictionaries ist dies nicht möglich
Wir prüfen sofort unser Beispiel, Erläuterungen folgen.
spendenaktion={'Thomas':100,'Thomas':400,'Peter':10}
Unsere Keys sind hierbei die Namen und die Werte sind die jeweiligen Spendenbeträge.
Wir sehen hier paare getrennt durch einen Doppelpunkt:
In diesem Fall im Format: „String“:Integer.
Nun können wir wie folgt die Wertezuordnung abfragen.
Möchten wir zum Beispiel wissen, wieviel Thomas gespendet hat, so können wir dies mit :
print(spendenaktion[„Thomas“]) #Ergebnis ist 100
abfragen.
Alternativ ist es möglich die Werte abzufragen, um diese dann weiterverarbeiten zu können.
Zum Beispiel :
topspender =spendenaktion[„Thomasl“]
Schaut man sich die dictionaries an, so fällt einem auch eine Getter-Methode auf.
topspender =spendenaktion[„Thomasl“]
print(topspender)