Wilkommen in meinem Python-Crashkurs (von Konrad). Wenn ihr die euch präsentierten Code-Beispiele verstanden habt, könnt ihr mit ihnen herumspielen.
print() ist eine Funktion. Sie gibt den Wert, der in den Klammern steht, als Text aus. In Jupyter Notebook erscheint der Text dann unter dem Code. print() kann auch mehrere Werte nehmen, die dann mit einem Komma getrennt sind. Die Funktion print() hat keinen Rückgabewert.
ein Rückgabewert ist ein Wert, den eine Funktion zurückgibt. Diesen kann man dann weiter benutzen , um ihn z.B. einer Variable(was das ist lernen wir später) zuzuweisen oder eine Funktion mit ihm aufzurufen
Alles was nach einem # in der gleichen Zeile steht ist ein Kommentar
Es gibt verschiedene Datentypen, davon schauen wir uns jetzt Strings(das ist roher Text, der mit ""-Zeichen umgeben ist) und Zahlen an.
print(5)
print("ich mag Boote")
print("die Superzahl ist",6)
#strings und integer können beide durch print() ausgegeben werden
5 ich mag Boote die Superzahl ist 6
Mache jetzt die Übung 1
mit der Funktion type() kann man den Datentyp eines Wertes erfahren. Der Datentyp wird als Rückgabewert zurückgegeben. (Diese Funktion wird in richtigen Programmen so gut wie nie benutzt, aber es ist gut zu Wissen, wie man den Datentyp eines Wertes erfahren kann)
Man unterscheidet zwischen ganzen Zahlen(integer, kurzgesagt int) und Kommazahlen(float)
print(type(3))#integer, also ganze Zahl
print(type(3.0))#float, also Kommazahl
print(type("3"))#string, weil es in Anführungszeichen ist
<class 'int'> <class 'float'> <class 'str'>
Es gibt Rechenoperationen.
print(1+1)#plus
print(4-3)#minus
print(5*5)#mal
print(8/7)#durch
print(2**5)#exponent
print(11%5)#modulo. Lernt man nicht in der Schule, ist aber für Programmierer wichtig. Es ist wie teilen mit Rest, aber der Rest ist das Ergebnis.
2 1 25 1.1428571428571428 32 1
Mache jetzt Übung 2
Mit Strings können keine Mathematische Operationen durchgeführt werden. Trotzdem passiert etwas, wenn man + oder * auf einen String anwendet.
Wenn ein String + gerechnet wird, wird der Text zusammengefügt.
Wenn ein String mit einem Integer zusammen * gerechnet wird, wird der Text soundsoviel mal kopiert
print("bla"+" blubb")
print("bla"*5)
bla blubb blablablablabla
Wenn mehrere Rechenoperatoren in einer Codezeile verwendet werden, git punkt vor strich und links vor rechts.
Man kann die Reihenfolge aber durch runde Klammern ändern. Es können beliebig viele runde Klammern verwendet werden.
print(1+2*3)
print((1+2)*3)
7 9
mache jetzt die Übung 3
Der operator / gibt immer eine Float zurück.
Der Ergebnistyp der anderen Rechenoperatoren hängt davon ab, ob die Rechenoperation mit Integern oder mit Floats durchgeführt wird.
Wenn ein Integer und ein Float in der gleichen Operation verwendet werden, wird der Integer in ein Float umgewandelt.
print(type(1+1))#zwei integer
print(type(1.0+1.0))#zwei floats
print(type(1+1.0))#integer und float, durch Typenumwandlung wurde der integer aber zu float umgewandelt
<class 'int'> <class 'float'> <class 'float'>
Aber kann man auch absichtlich Variablen ineinander umwandeln? ja.
int() um etwas zu Integer umzuwandeln
float() um etwas zu float umzuwandeln
str() um etwas zu string umzuwandeln
Wenn int() oder float() etwas bekommt, was nicht als Zahl erkannt wird, gibt es einen Fehler.
print(type(int(1.0)))#float zu int
print(type(int("1")))#string zu int
print(type(float(1)))#int zu float
print(type(float("4.5")))#string zu float
print(type(str("45")))#int zu string
<class 'int'> <class 'int'> <class 'float'> <class 'float'> <class 'str'>
Es gibt Variablen. (gespeicherte Werte, die immer verändert werden können)
Man weist ihnen mit dem Gleichzeichen einen Wert zu
baum=1+2
Man kann den Wert von der Variable benutzen, wenn man ihren Namen in den Code schreibt
baum=6
print(baum*3)
18
mache jetzt Übung 4
Es gibt Anweisungen, um den Code abzukürzen, wenn eine Variable auf sich selbst plus/minus/mal/durch/modulo etwas anderes gesetzt wird. In den folgenden Codebeispielen werden diese Abkürzungen vorgestellt.
a=0
a=a+1
print(a)
#tut das Gleiche wie
a=0
a+=1
print(a)
1 1
a=5
a=a-2
print(a)
#tut das Gleiche wie
a=5
a-=2
print(a)
3 3
a=2
a=a*2
print(a)
#tut das Gleiche wie
a=2
a*=2
print(a)
4 4
a=6
a=a/2
print(a)
#tut das Gleiche wie
a=6
a/=2
print(a)
3.0 3.0
a=8
a=a%6
print(a)
#tut das Gleiche wie
a=8
a%=6
print(a)
2 2
zusammengefasst heißt das, zum Abkürzen gibt es +=, -=, *=, /= und %= .
Die Funktion input() fragt den Benutzer des Programms nach einem Wert und hält das Programm an, bis der Benutzer einen Wert eingibt und die Enter-Taste drückt. Der Wert, den der Benutzer eingegeben hat, wird von der Funktion zurückgegeben.
Man kann einen Wert in die Klammern von input() schreiben. Dieser wird ausgegeben.
eingabe=input("Wie heißt du?")
print("Hallo, "+eingabe)
Wie heißt du?Abcde Hallo, Abcde
Der Rückgabewert von input() ist immer ein String. Wenn du etwas mathematisches damit machen will, musst du ihn erst umwandeln.
dieZahl=input("was ist deine Zahl? ")
print("Deine Zahl hoch Zwei ist",float(dieZahl)**2)
was ist deine Zahl? 2 Deine Zahl hoch Zwei ist 4.0
mache Aufgabe 5
Es gibt sogenannte Module, die Zusatzfunktionen bereitstellen. Eins von denen Heißt "math".
Man importiert sie durch das Wort import
import math
mit math kann man zum Beispiel die Wurzel ziehen, aufrunden und abrunden.
(wenn du nur zu der nächstweiten Zahl runden willst, brauchst du das Math-modul nicht, da kannst du einfach die Funktion round() verwenden)
import math
print(math.sqrt(4))#Wurzel ziehen
print(math.floor(1.2))#abrunden
print(math.ceil(1.2))#aufrunden
2.0 1 2
jetzt probieren wir das Modul random aus
import random
random.randint(40,50) #gibt eine zufällige Zahl von 40 bis 50 aus
42
Mache jetzt Übung 6
Es gibt einen weiteren Datentyp, den Typ Bool (auch Boolean, Wahrheitswert oder boolescher Wert genannt). Ein bool ist entweder True(wahr) oder False(falsch)
print(type(True))
<class 'bool'>
Auf bools können logische Operationen durchgeführt werden.
not (nicht) kehrt einen Wert um
and (und) wird zwischen zwei Bools geschrieben und gibt zurück, ob beide wahr sind
or (oder) wird zwischen zwei Bools geschrieben und gibt zurück, ob eins von beiden wahr ist
print(not False)
print(True and True)
print(True or False)
print(True and False)
True True True False
Variablen(vor Allem Zahlen) können verglichen werden. Dafür tut man einen Vergleichsoperator zwischen zwei Zahlen. Das Vergleichen gibt einen Boolschen Wert zurück.
Es gibt == (beide Werte sind gleich),
und es gibt > (der erste Wert ist größer als der zweite Wert)
und es gibt < (der erste Wert ist kleiner als der zweite Wert)
und es gibt >= (der erste Wert ist größer als der zweite Wert oder beide Werte sind gleich)
und es gibt <= (der erste Wert ist kleiner als der zweite Wert oder beide Werte sind gleich)
und es gibt !=(beide Werte sind verschieden)
print(1==1)
print(1<1)
print(2>1)
print(3>=4)
print(4!=5)
True False True False True
Hier kommt der Nutzen von Bools:If-Verzweigungen ("if" bedeutet "wenn" auf Englisch)
Der Code einer If-Verzweigung wird nur ausgeführt, wenn der gegebene boolsche Wert wahr ist.
Nach einer If-Verzweigung kann noch eine Else-Verzweigung("else" bedeutet "ansonsten" auf Englisch) kommen. Diese wird ausgeführt, wenn die If-Verzweigung nicht ausgeführt wurde, weil ihr boolescher Wert False war.
Man schreibt if bool:
und rückt den Code, der von der If-Verzweigung betroffen ist, mit der Tab-Taste ein. Danach schreibt man(nur wenn man eine else-Verzweigung braucht) else:
und rückt den Code, der von der Else-Verzweigung betroffen ist, ein.
Zahl=float(input("was ist deine Zahl? "))
if Zahl>10:
print("deine Zahl ist größer als 10")
else:
print("deine Zahl ist nicht größer als 10")
was ist deine Zahl? 2 deine Zahl ist nicht größer als 10
Es ist auch möglich, nach einer If-Verzweigung Elif zu schreiben. Elif ist kurz für Else If
Elif überprüft einen booleschen Wert, aber nur, wenn die vorherige If- oder Elif-Verzweigung false war und deshalb nicht ausgeführt wurde. Wenn der boolesche Wert wahr ist, wird der Code ausgeführt.
Man schreibt einfach elif bool:
tier=input("Wähle ein Tier ")
if tier=="Schaf":
print("Du hast ein Schaf gewählt")
elif tier=="Schlange":
print("Du hast eine Schlange gewählt")
elif tier=="Blobfisch":
print("Du hast einen Blobfisch gewählt")
elif tier=="Mammut":
print("Du hast ein Mammut gewählt")
else:
print("Du hast ein anderes Tier gewählt")
Wähle ein Tier Mammut Du hast ein Mammut gewählt
mache jetzt Übung 7
Jetzt kommt die While-Schleife.
Die While-Schleife überprüft einen booleschen Wert und führt den betroffenen Code aus, wenn der boolesche Wert wahr ist. Dann überprüft die While-Schleife nochmal den booleschen Wert und führt den Code nochmal aus, wenn der boolesche Wert wahr ist. Das geht immer so weiter bis der boolesche Wert nach einem Durchlauf falsch ist.
Du musst vorsichtig sein, dass du keine endlose While-Schleife schreibst.
Die While-Schleife schreibt man while bool:
und der betroffene Code wird eingerückt.
x=0
while x<10:
print(x)
x+=1
print("Schleife fertig")
0 1 2 3 4 5 6 7 8 9 Schleife fertig
Arrays, auch Liste genannt, sind eine Datenstruktur. Die Daten im Array haben eine bestimmte Position. Die Position ist eine ganze Zahl. Man kann arrays neu erstellen, indem man die Werte in eckige Klammern tut und mit Kommas trennt (oder einfach nur leere eckige Klammern schreibt, dann gibt es ein leeres Array). Es ist in python egal, welchen Datentyp die Werte haben und es können auch mehrere Datentypen in dem gleichen Array sein. Ja, ein Array kann auch ein anderes Array enthalten.
Anmerkung: In diesem Kurs meine ich mit den Wörtern "Array" und "Liste" das Gleiche. In anderen Programmiersprachen gibt es einen Unterschied zwischen Array und Liste.
a=["rot","blau",40]
Auf ein Element in einem Array wird zugegriffen, indem man den Namen des Arrays schreibt, dann eckige Klammern und die Nummer des Eintrags. Vorsicht, die Numerierung fängt mit 0 an
a=["a","b","c","d"]
print(a[2])
c
Du kannst auf mehrere Elemente eines Arrays zugreifen, indem du :
in die eckigen Klammern schreibst.
schreibe [x:]
, um alle Elemente ab der x-ten Stelle anzuzeigen (einschließlich x)
schreibe [:x]
um alle Elemente bis zur x-ten Stelle anzuzeigen (nicht einschließlich x)
schreibe [x:y]
um alle Elemente von x bis y anzuzeigen (einschließlich x aber nicht einschließlich y)
a=[1,2,3,4,5]
print(a[2:])
print(a[:3])
print(a[1:4])
[3, 4, 5] [1, 2, 3] [2, 3, 4]
Die Länge eines Arrays lässt sich durch die Funktion len()
feststellen
b=[0,1,2,3,4,5]
len(b)
6
Hier ein Beispiel, in dem Arrays ausgegeben werden.
Staedte=["Darmstadt","Düsseldorf","Brandenburg"]
Bewertungen=[6,5,7]
z=0
while z<3:
print(Staedte[z],Bewertungen[z])
z+=1
Darmstadt 6 Düsseldorf 5 Brandenburg 7
mache jetzt Übung 8
Das gerade gezeigte Stück code lässt sich mithilfe der for-Schleife noch kürzer machen.
Eine For-Schleife schreibt man for neueVariable in liste:
Für jedes Element in der Liste wird das eingerückte Stück Code nochmal neu ausgeführt. Bei jedem Durchlauf ist die neueVariable ein anderes Element der Liste. Die neue Variable wird häufig i
genannt.
for i in ["rot","blau","grün","gelb"]:
print(i)
rot blau grün gelb
Wenn jemand in einer For-Schleife eine Zahlenfolge will, kann das vereinfacht werden durch die Funktion range()
Die Funktion range() benötigt mindestens einen Eingabewert und hat maximal drei Eingabewerte. Sie wird anstatt einer Liste in das For-Statement eingefügt.
Nur ein Eingabewert: gibt eine Zahlenfolge aus, die mit 0 anfängt und weitergeht, bis der Wert des Eingabewertes erreicht ist(dieser ist dann nicht in der Zahlenfolge).
for i in range(5):
print(i)
0 1 2 3 4
Zwei Eingabewerte: gibt eine Zahlenfolge aus, die mit dem Wert des ersten Eingabewertes anfängt und bis zu dem Wert des zweiten Eingabewertes weitergeht(dieser nicht inklusive)
for i in range(2,10):
print(i)
2 3 4 5 6 7 8 9
Drei Eingabewerte: gibt Zahlen vom ersten Eingabewert(inklusive) bis zum zweiten Eingabewert(nicht inklusive) aus, die Größe der Schritte ist der dritte Eingabewert.
for i in range(1,30,4):
print(i)
1 5 9 13 17 21 25 29
Hier das Codebeispiel Städtebewertung mit einer For-Schleife
Staedte=["Darmstadt","Düsseldorf","Brandenburg"]
Bewertungen=[6,5,7]
for i in range(3):
print(Staedte[i],Bewertungen[i])
Darmstadt 6 Düsseldorf 5 Brandenburg 7
Mache jetzt die Aufgaben 9, 10 und 11
Du kannst einem Array ein Element hinzufügen, indem du nameDesArrays.append(wert)
benutzt.
array=[1,2,3,4]
array.append(5)
print(array)
[1, 2, 3, 4, 5]
Es gibt auch die Funktion ´nameDesArrays.pop()`. Diese Funktion tut zwei sachen auf einmal: Sie entfernt das letzte Element eines Arrays und sie gibt das entfernte Element als Rückgabewert.
a=[1,2,3,4,5,6,7]
print(a.pop(),"wurde entfernt")
print(a,"bleibt übrig")
7 wurde entfernt [1, 2, 3, 4, 5, 6] bleibt übrig
Außerdem kann man mit der Rechenoperation +
zwei Arrays zusammenfügen.
a=[1,2,3,4]
b=[5,6,7,8]
c=a+b
print(c)
[1, 2, 3, 4, 5, 6, 7, 8]
mache Aufgabe 12
Hier kommt ein wichtiger Teil von Python, das Definieren von Funktionen.
Um funktionen zu definieren schreibst du def funktion(argument1,argument2):
Du kannst die Argumente beliebig nennen und kannst beliebig viele benutzen. Es ist auch möglich, gar kein Argument zu benutzen. Der eingerückte Code ist der Code deiner Funktion.
Die Argumente existieren nur innerhalb der Funktion und wenn die Funktion zu ende ist verschwinden sie.
Um deine Funktion aufzurufen schreibst du den Namen der Funktion und danach runde Klammern. In den Klammern schreibst du die Argumente der Funktion, oder du lässt die Klammern leer wenn die Funktion keine Argumente nimmt.
Wenn du willst, dass die Funktion einen Wert zurückgibt, schreibst du return wert
.
return beendet die Funktion sofort. Wenn nach dem return noch mehr Code Steht, wird dieser nicht ausgeführt.
def malZwei(zahl):
return zahl*2
print(malZwei(2))
print(malZwei(3))
4 6
Hier ist etwas, das bei Funktionen zu beachten ist: Wenn eine Liste in eine Funktion gegeben wird, wird die Liste nicht kopiert.
Der Name des Arguments, durch das du der Funktion die Liste übermittelt, ist neu, zeigt aber auf die gleiche Liste. Die Liste gibt es nur einmal im Speicher.
Das heißt: wenn du einer Funktion eine Liste übermittelst und die Liste in der Funktion änderst, änderst du auch die ursprüngliche Liste.
hier ein Beispiel
liste=["altes Element"]
def sinnloseFunktion(l):
l.append("neues Element")
print(liste)
sinnloseFunktion(liste)
print(liste)
['altes Element'] ['altes Element', 'neues Element']
Um eine Liste zu kopieren, schreibst du nameDerListe.copy()
Hier ist der gleiche Code, aber die Liste wird in der Funktion kopiert und nur die Kopie wird verändert
liste=["altes Element"]
def sinnloseFunktion(l):
l2=l.copy()
l2.append("neues Element")
print(liste)
sinnloseFunktion(liste)
print(liste)
['altes Element'] ['altes Element']
mache Aufgabe 13, 14 und 15
Ein interessantes Konzept mit Funktionen ist Rekursion. Rekursion bedeutet, dass eine Funktion sich selbst aufruft. Dies passiert, bis die Funktion sich nicht mehr selbst aufruft, weil eine bestimmte Bedingung erfüllt ist. Diese Bedingung heißt Rekursionsanker. Nachdem der Rekursionsanker erreicht wurde, gibt die Funktion ihr Ergebnis an die übergeordnete Funktion zurück, die auf das Ergebnis wartet. Die übergeordnete Funktion macht weiter, bis auch sie ihr Ergebnis an die nächste übergeordnete Funktion zurückgibt. Irgendwann ist die Funktion erreicht, die die Rekursion gestartet hat.
Hier ist zum Beispiel eine Funktion, die alle Zahlen von 1 bis X miteinander multipliziert. Das geht auch mit einer Schleife, aber hier ist der rekursive Ansatz.
def ultimulti(zahl): #in der Mathematik heißt diese Funktion "Fakultät"
if(zahl==1):
return 1
else:
return ultimulti(zahl-1)*zahl
print(ultimulti(10))
3628800
Hier ist Quicksort(ein fortgeschrittener Algorithmus zum Sortieren). Quicksort funktioniert rekursiv.
import random
def neueUnsortierteListe():
neueListe=[]
for i in range(100):
neueListe.append(random.randint(0,100))
return neueListe
def quicksort(liste):
kleiner=[]
groesser=[]
gleich=[]
pivot=liste[0]
for e in liste:
if e==pivot:
gleich.append(e)
elif e<pivot:
kleiner.append(e)
else:
groesser.append(e)
if(len(kleiner)>1):
kleiner=quicksort(kleiner)
if(len(groesser)>1):
groesser=quicksort(groesser)
return kleiner+gleich+groesser
unsortierteListe=neueUnsortierteListe()
print(unsortierteListe)
sortierteListe=quicksort(unsortierteListe)
print(sortierteListe)
[48, 95, 46, 24, 43, 67, 2, 19, 46, 61, 25, 80, 2, 93, 44, 19, 1, 59, 89, 67, 98, 81, 71, 3, 79, 24, 63, 26, 55, 59, 58, 62, 8, 82, 28, 12, 71, 82, 4, 8, 46, 66, 29, 78, 24, 32, 74, 23, 78, 88, 99, 0, 88, 86, 76, 42, 61, 53, 81, 64, 25, 32, 87, 69, 2, 44, 75, 61, 64, 84, 47, 76, 74, 88, 54, 85, 15, 4, 16, 58, 97, 59, 32, 14, 91, 42, 33, 87, 65, 62, 33, 42, 20, 13, 42, 97, 55, 61, 84, 11] [0, 1, 2, 2, 2, 3, 4, 4, 8, 8, 11, 12, 13, 14, 15, 16, 19, 19, 20, 23, 24, 24, 24, 25, 25, 26, 28, 29, 32, 32, 32, 33, 33, 42, 42, 42, 42, 43, 44, 44, 46, 46, 46, 47, 48, 53, 54, 55, 55, 58, 58, 59, 59, 59, 61, 61, 61, 61, 62, 62, 63, 64, 64, 65, 66, 67, 67, 69, 71, 71, 74, 74, 75, 76, 76, 78, 78, 79, 80, 81, 81, 82, 82, 84, 84, 85, 86, 87, 87, 88, 88, 88, 89, 91, 93, 95, 97, 97, 98, 99]
Ich stelle euch einen weiteren Datentyp vor: das dictionary. Ein Dictionary ist eine Datenstruktur, die Schlüssel und dazugehörige Werte hat. Jedem Schlüssel wird ein Wert zugewiesen. Schlüssel können zum Beispiel vom Datentyp String, Integer, Float oder Boolean sein, aber sie können nicht Listen oder Dictionaries sein. Die dazugehörigen Werte können alles sein, auch Dictionaries und Listen.
Ein Dictionary wird durch {}
gekennzeichnet.
Wenn es nötig ist, dass ein Schlüssel in einem Dictionary aus mehreren Werten besteht, wird die Datenstruktur "tuple" verwendet. Auf Tuples gehe ich hier nicht genauer ein.
d={"blume":"rose"}#dictionary definieren, das schon Werte enthält
d["blaetter"]=6#element verändern
print(d)#dictionary ausgeben
print(d["blume"])#bestimmtes Element ausgeben
{'blume': 'rose', 'blaetter': 6} rose
Mache Aufgabe 16