8. Unterrichtsblock
Python If…Else & Bedingte Anweisungen
Python unterstützt die üblichen logischen Bedingungen aus der Mathematik:
- Gleich:
a == b
- Ungleich:
a != b
- Kleiner als:
a < b
- Kleiner oder gleich:
a <= b
- Größer als:
a > b
- Größer oder gleich:
a >= b
Diese Bedingungen können auf verschiedene Weise verwendet werden, am häufigsten in „if-Anweisungen“ und Schleifen. Eine „if-Anweisung“ wird mit dem if
-Schlüsselwort geschrieben.
If-Anweisung:
a = 33
b = 200
if b > a:
print("b ist größer als a")
In diesem Beispiel werden zwei Variablen als Teil der if -Anweisung (a und b) verglichen, um zu prüfen, ob b
größer als a
ist. Da a 33 und b 200 ist , wissen wir, dass 200 größer als 33 ist, und so geben wir auf dem Bildschirm aus, dass „b größer als a“ ist.
Einrückung
Python vererwendet Einrückungen (Leerzeichen am Anfang einer Zeile), um den Bereich im Code zu definieren. Andere Programmiersprachen verwenden zu diesem Zweck oft geschweifte Klammern.
If-Anweisung ohne Einrückung (wird einen Fehler auslösen):
a = 33
b = 200
if b > a:
print("b ist größer als a") # wird einen Fehler auslösen
Elif
Das Schlüsselwort elif
ist Pythons Art zu sagen: „Wenn die vorherigen Bedingungen nicht wahr waren, dann versuche diese Bedingung“.
a = 33
b = 33
if b > a:
print("b ist größer als a")
elif a == b:
print("a und b sind gleich")
In diesem Beispiel ist a gleich b , also ist die erste Bedingung nicht wahr. Die elif
Bedingung jedoch schon, also wird auf dem Bildschirm ausgegeben, dass „a und b gleich sind“.
Else
Das Schlüsselwort else
fängt alles ab, was nicht auf die vorhergehenden Bedingungen zutrifft.
a = 200
b = 33
if b > a:
print("b ist größer als a")
elif a == b:
print("a und b sind gleich")
else:
print("a ist größer als b")
# Eine "Shorthand" if else-Anweisung mit 3 Bedingungen:
a = 330
b = 330
print("A") if a > b else print("=") if a == b else print("B")
And
Das Schlüsselwort and
ist ein logischer Operator und wird verwendet, um bedingte Anweisungen zu kombinieren:
Prüfung, ob a
größer als b
ist UND ob c
größer als ist a
:
a = 200
b = 33
c = 500
if a > b and c > a:
print("Beide Bedingungen sind wahr")
Oder
Das or
Schlüsselwort ist ein logischer Operator und wird verwendet, um bedingte Anweisungen zu kombinieren:
Prüfung, ob a
größer ist als b
, ODER ob a
größer ist als c
:
a = 200
b = 33
c = 500
if a > b or a > c:
print("Eine der Bedingungen ist wahr")
Nicht
Das not
Schlüsselwort ist ein logischer Operator und wird verwendet, um das Ergebnis der bedingten Anweisung umzukehren:
Prüfung, ob a
NICHT größer ist als b
:
a = 33
b = 200
if not a > b:
print("a ist NICHT größer als b")
Verschachteltes wenn
Man kann if
Anweisungen innerhalb von if
Anweisungen haben, dies wird als verschachtelte if
Anweisungen bezeichnet.
x = 41
if x > 10:
print("Größer als 10")
if x > 20:
print("und auch größer als 20.")
else:
print(", aber nicht größer als 20.")
Die Pass-Anweisung
if
Anweisungen dürfen nicht leer sein. Wenn jedoch aus irgendeinem Grund eine if
Anweisung ohne Inhalt bleibt, fügt man die pass
Anweisung ein, um eine Fehlermeldung zu vermeiden.
a = 33
b = 200
if b > a:
pass
Aufgabe
- Erstelle drei Listen mit Automarken.
- Die erste Liste enthält 3 japanische Automarken, die zweiten Liste enthält 4 amerikanische Automarken und die dritte Liste enthält 5 deutsche Automarken.
- Schreibe eine Anweisung, die prüft ob die zweite, oder dritte Liste mehr Marken enhtält und führe die erste Liste mit der größeren der beiden weiteren Listen zusammen.
Weitere Aufgaben
- Alter prüfen: Schreibe ein Programm, das nach dem Alter des Benutzers fragt und überprüft, ob der Benutzer älter als 18 Jahre ist. Wenn ja, soll das Programm ausgeben: „Du bist volljährig.“ Andernfalls soll es ausgeben: „Du bist noch nicht volljährig.“
- Gerade oder ungerade Zahl: Erstelle ein Programm, das eine Zahl vom Benutzer anfordert und überprüft, ob diese Zahl gerade oder ungerade ist. Gib entsprechend eine Meldung aus: „Die Zahl ist gerade.“ oder „Die Zahl ist ungerade.“
- Temperaturbewertung: Schreibe ein Programm, das nach einer Temperatur in Grad Celsius fragt. Wenn die Temperatur über 30 Grad liegt, soll das Programm ausgeben: „Es ist ziemlich heiß.“ Liegt sie unter 10 Grad, soll es ausgeben: „Es ist ziemlich kalt.“ Für Temperaturen dazwischen: „Die Temperatur ist angenehm.“
- Benutzername überprüfen: Erstelle ein Programm, das einen Benutzernamen anfordert. Wenn der eingegebene Name „Admin“ ist, soll das Programm ausgeben: „Hallo Admin, willkommen zurück!“ Bei jedem anderen Namen soll es ausgeben: „Hallo [Benutzername], schön dich zu sehen!“
- Bewertungssystem: Schreibe ein Programm, das nach einer Bewertung zwischen 1 und 5 fragt. Wenn die Bewertung 4 oder 5 ist, gib aus: „Danke für die hohe Bewertung!“ Bei 2 oder 3: „Danke für deine ehrliche Meinung.“ Und bei einer Bewertung von 1: „Es tut uns leid, dass du unzufrieden bist.“
While Schleifen
Python hat zwei einfache Schleifenbefehle:
while
-Schleifenfor
– Schleifen
Mit der While- Schleife können wir eine Reihe von Anweisungen ausführen, solange eine Bedingung wahr ist. Folgende Schleife gibt i aus, solange i kleiner als 6 ist:
i = 1
while i < 6:
print(i)
i += 1
Hinweis: Man muss
i
erhöhen, sonst wird die Schleife für immer fortgesetzt.
Die while
-Schleife erfordert, dass relevante Variablen bereit sind. In diesem Beispiel müssen wir eine Indizierungsvariable i definieren , die wir auf 1 setzen.
Die Break-Anweisung
Mit der break
-Anweisung können wir die Schleife auch dann stoppen, wenn die while
-Bedingung wahr ist:
Verlassen der Schleife, wenn i
gleich 3 ist:
i = 1
while i < 6:
print(i)
if i == 3:
break
i += 1
Die Continue-Anweisung
Mit der continue
-Anweisung können wir die aktuelle Iteration stoppen und mit der nächsten fortfahren:
Fahren Sie mit der nächsten Iteration fort, wenn i 3 ist:
i = 0
while i < 6:
i += 1
if i == 3:
continue
print(i)
Die else-Anweisung
Mit der else
-Anweisung können wir einen Codeblock einmal ausführen, wenn die Bedingung nicht mehr erfüllt ist. Die folgende Anweisung gibt eine Nachricht aus, sobald die Bedingung falsch ist:
i = 1
while i < 6:
print(i)
i += 1
else:
print("i ist nicht länger kleiner als 6")
Aufgabe
Versuche eine while Schleife zu bauen, welche die Inhalte der zusammengeführten Liste von Autos aus der ersten Lektion ausgibt.
Weitere Aufgaben
- Zählen bis 10: Schreibe ein Programm, das Zahlen von 1 bis 10 ausgibt. Verwende eine while-Schleife, um jede Zahl in aufsteigender Reihenfolge anzuzeigen.
- Benutzereingabe akzeptieren: Erstelle ein Programm, das den Benutzer kontinuierlich nach seinem Namen fragt, bis er „Stopp“ eingibt. Bei jeder anderen Eingabe soll das Programm mit „Hallo [Benutzername]!“ antworten.
- Summe der Eingaben: Schreibe ein Programm, das Zahlen vom Benutzer anfordert und diese aufsummiert. Die Schleife soll so lange weiterlaufen, bis der Benutzer 0 eingibt. Am Ende gib die Gesamtsumme der eingegebenen Zahlen aus.
- Passwortüberprüfung: Erstelle ein Programm mit einer vordefinierten Passwort-Variable (z.B. „Passwort123“). Das Programm soll den Benutzer so lange nach dem Passwort fragen, bis er das korrekte Passwort eingibt. Bei korrekter Eingabe soll das Programm ausgeben: „Passwort akzeptiert.“
- Multiplikationstabelle: Schreibe ein Programm, das eine Zahl vom Benutzer anfordert und dann die Multiplikationstabelle dieser Zahl bis zum 10-fachen ausgibt. Verwende eine while-Schleife, um jede Zeile der Tabelle zu generieren.
For-Schleifen
Eine for
-Schleife wird zum Iterieren über eine Menge (das ist entweder eine Liste, ein Tupel, ein Dictionary, ein Set oder einen String) verwendet.
Dies ähnelt weniger dem Schlüsselwort
for
in anderen Programmiersprachen und funktioniert eher wie eine Iteratormethode, wie sie in anderen objektorientierten Programmiersprachen zu finden ist.
Mit der for
-Schleife können wir eine Reihe von Anweisungen ausführen, einmal für jedes Element in einer Liste, einem Tupel, einer Menge usw. Folgendes Programm gibt Früchte in einer Liste aus:
obst = ["Apfel", "Banane", "Birne"]
for x in obst:
print(x)
Die for
-Schleife erfordert keine vorab zu setzende Indizierungsvariable.
Schleife durch einen String laufen lassen
Auch Strings sind iterierbare Objekte. Sie enthalten eine Folge von Zeichen. Durchläuft die Buchstaben des Wortes „Banane“ mit einer Schleife:
for x in "Banane":
print(x)
Die Break-Anweisung
Mit der break
-Anweisung können wir die Schleife stoppen, bevor sie alle Elemente durchlaufen hat. Folgende Anweisung beendet die Schleife, wenn x
„Banane“ ist:
obst = ["Apfel", "Banane", "Birne"]
for x in obst:
print(x)
if x == "Banane":
break
Folgende Anweisung verlässt die Schleife, wenn x
„Banane“ ist. Dieses Mal jedoch vor der print
-Anweisung:
obst = ["Apfel", "Banane", "Birne"]
for x in obst:
if x == "Banane":
break
print(x)
Die Continue-Anweisung
Mit der continue-Anweisung können wir die aktuelle Iteration der Schleife stoppen und mit der nächsten fortfahren. Banane nicht ausgeben:
obst = ["Apfel", "Banane", "Birne"]
for x in obst:
if x == "Banane":
continue
print(x)
Die range()-Funktion
Um eine Reihe von Codes eine bestimmte Anzahl von Malen zu durchlaufen, können wir die Funktion range()
verwenden. Die Funktion range()
gibt eine Folge von Zahlen zurück, die standardmäßig bei 0 beginnt und (standardmäßig) um 1 erhöht wird und bei einer bestimmten Zahl endet.
Verwendung der Funktion range()
:
for x in range(6):
print(x)
Zu beachten ist, dass
range(6)
nicht die Werte von 0 bis 6 sind, sondern die Werte von 0 bis 5.
Die Funktion range()
hat standardmäßig 0 als Startwert. Es ist jedoch möglich, den Startwert durch Hinzufügen eines Parameters anzugeben: range(2, 6) , was Werte von 2 bis 6 (aber nicht einschließlich 6) bedeutet:
Verwendung des Startparameters:
for x in range(2, 6):
print(x)
Die Funktion range()
erhöht die Sequenz standardmäßig um 1, es ist jedoch möglich, den Inkrementwert durch Hinzufügen eines dritten Parameters anzugeben: range(2, 30, 3 )
:
Erhöhen Sie die Sequenz mit 3 (Standard ist 1):
for x in range(2, 30, 3):
print(x)
Else in der For-Schleife
Das else
Schlüsselwort in einer for
Schleife gibt einen Codeblock an, der ausgeführt werden soll, wenn die Schleife beendet ist. Folgendes Beispiel gibt die Zahlen von 0 bis 5 aus und gibt eine Nachricht aus, wenn die Schleife beendet ist:
for x in range(6):
print(x)
else:
print("Beendet!")
Hinweis: Der
else
Block wird NICHT ausgeführt, wenn die Schleife durch einebreak
Anweisung gestoppt wird.
Unterbrechen der Schleife, wenn x 3
ist. Beobachte, was mit dem else
Block passiert:
for x in range(6):
if x == 3:
break
print(x)
else:
print("Beendet!")
Verschachtelte Schleifen
Eine verschachtelte Schleife ist eine Schleife innerhalb einer Schleife.
Die „innere Schleife“ wird einmal für jede Iteration der „äußeren Schleife“ ausgeführt:
Drucken Sie jedes Adjektiv für jede Frucht:
adjektiv = ["rot", "groß", "gut"]
obst = ["Apfel", "Banane", "Kirsche"]
for x in adjekiv:
for y in obst:
print(x, y)
Die Pass-Anweisung
for
Schleifen können nicht leer sein, aber wenn man aus irgendeinem Grund eine for
Schleife ohne Inhalt hat, fügen man die pass
Anweisung ein, um einen Fehler zu vermeiden.
for x in [0, 1, 2]:
pass
Aufgabe
Baue o.g. Codes nach
Weitere Aufgaben
- Listenelemente ausgeben: Schreibe ein Programm, das eine Liste von Namen (z.B. [„Anna“, „Ben“, „Clara“]) hat. Verwende eine for-Schleife, um jeden Namen in der Liste auszugeben.
- Summe einer Zahlenreihe: Erstelle ein Programm, das die Summe aller Zahlen von 1 bis 10 berechnet und ausgibt. Verwende dazu eine for-Schleife, um durch die Zahlen zu iterieren und eine Variable, um die Summe zu speichern.
- Gerade Zahlen finden (mit if-else): Schreibe ein Programm, das Zahlen von 1 bis 20 durchläuft und mithilfe einer if-else Anweisung innerhalb der for-Schleife überprüft, ob eine Zahl gerade ist. Für jede gerade Zahl soll das Programm ausgeben: „[Zahl] ist gerade.“
- Anzahl der Buchstaben zählen: Erstelle ein Programm, das einen Text (String) vom Benutzer anfordert und mithilfe einer for-Schleife die Anzahl der Buchstaben im Text zählt (Leerzeichen nicht mitzählen). Gib die Anzahl am Ende aus.
- Tabelle mit verschachtelten Schleifen: Schreibe ein Programm, das eine 5×5 Tabelle mit Zahlen ausgibt. Verwende dazu verschachtelte for-Schleifen: die äußere Schleife für die Zeilen und die innere Schleife für die Spalten. Jede Zelle soll den Wert
(Zeilennummer * Spaltennummer)
enthalten.
Machinelle Lernanwendung zur Bilderkennung
Zielanwendung
- Das Programm soll lernen, Bilder von Hunden und anderen Tieren zu unterscheiden.
- Benötigt wird ein binärer Klassikfikator (Klassifikatoren, die in zwei Gruppen sortieren)
- Perzeptron (Übliches Werkzeug, um so einen Klassifikator zu bauen)
Vortrag aus der letzten Stunde
- Wir benötigen gelabelte Daten
- Die Werten sollen nicht doppelt vorkommen
- Die Werte sollen in einer bestimmten Reihenfolge aufrufbar sein
- Man soll die Werte auch einem bestimmten Schlüssel zuordnen können
Hierfür verwenden wir ein Dictionary mit mehreren Listen, die wir einem Schlüssel zuordnen. Somit können wir mit Indexwerten in jeder Liste arbeiten.
# Menge als Dictionary mit mehreren Listen
beine = [4, 4, 4, 4, 2]
groesse = [35.6, 28.4, 55.9, 46.1, 5.2]
breite = [32.2, 18.5, 42.8, 39.3, 4.1]
farbe = ["Braun", "Schwarz", "Beige", "Weiß", "Rot"]
label = ["Hund", "Hund", "Hund", "Hund", "nicht Hund"]
feature = {
'beine': beine,
'groesse': groesse,
'breite': breite,
'farbe': farbe,
'label': label
}
Aufgabe
Gib einen Sammelwert aus o.g. Menge aus und anschließend einen Einzelwert.
Welche Werte können innerhalb eines Perzeptrons verarbeitet werden?
In unser Dictionary haben sich zwei Schlüssel-Wert-Paare eingeschlichen, die so noch nicht verarbeitet werden können. Eines der Schlüssel-Wert-Paare kann für die weitere Verrabeitung konvertiert werden. Das andere für unser einfaches Beispiel nicht.
Aufgabe
Diskutiere die o.g. Schlüssel-Wert-Paare mit anderen Klassenkameraden und sortiere eines der Schlüssel-Wert-Paare aus und benenne das andere Schlüssel-Wert-Paar, welches vor der Verarbeitung im Perzeptron noch konvertiert werden muss.
Begründe die Entscheidungen.
Effizientere Mengen mit NumPy (Numerisches Python)
Da wir für das Trainieren große Datenmengen benötigen, reichen unsere Dictionarys und Listen nicht aus und wir bedienen uns sog. Arrays und Matritzen aus der Bibliothek NumPy (sonst dauert das Trainieren mehrere Wochen / Monate)
Arrays aus NumPy sind bis zu 50 mal schneller als Listen & Dictionarys aufgrund der optimierten Speicher und Serverarchitekturen der NumPy-Rechner.
- Arrays sind geordnete, änderbare Mengen
- Matritzen sind zweidimensionale Arrays, also Arrays von Arrays
Aufgabe
Erstelle ein Dictionary mit Deinen Lieblingsfilmen / Lieblingsspielen / Lieblingsbüchern und versuche die einzelnen Werte in Listen zu speichern.