Python-Lektion 3 - Bedingte Anweisungen
Document Details
Uploaded by LuxuriantLyric512
IU Internationale Hochschule Bad Honnef
Tags
Related
- Python Programming PDF
- Test2Review - Python Intro to IFs (2) PDF
- SDU University CSS 115: Python Programming Fundamentals Fall 2024 Lecture 4 PDF
- Introduction to Programming in Python: Conditionals I PDF
- A Practical Introduction to Python Programming PDF
- Cours Python - Chapitre 3 - Structures de contrôle PDF
Summary
Diese Python-Lektion behandelt bedingte Anweisungen und boolesche Ausdrücke. Sie erklärt den Unterschied zwischen Anweisungen und Ausdrücken sowie die Verwendung von Vergleichsoperatoren in Python, um boolesche Ausdrücke zu erstellen.
Full Transcript
# Bedingte Anweisungen und boolesche Ausdrücke Oft ist es erforderlich, ein Programm so zu gestalten, dass ein bestimmtes Codestück nur dann ausgeführt wird, wenn eine bestimmte Bedingung gegeben ist. Beispielsweise soll die Fußballanwendung von Mehmet und Lea eine Liste sämtlicher Spieler:innen ei...
# Bedingte Anweisungen und boolesche Ausdrücke Oft ist es erforderlich, ein Programm so zu gestalten, dass ein bestimmtes Codestück nur dann ausgeführt wird, wenn eine bestimmte Bedingung gegeben ist. Beispielsweise soll die Fußballanwendung von Mehmet und Lea eine Liste sämtlicher Spieler:innen eines Teams ausgeben können, in der die designierten Mitglieder der Anfangself grafisch oder durch ein zusätzliches Textelement hervorgehoben werden. Wie lässt sich dies bewerkstelligen? Wie kann das Programm dazu veranlasst werden, einfach nur den Namen auszugeben, wenn die betreffende Person beim Anpfiff auf der Ersatzbank sitzt, und umgekehrt den Namen mit Hervorhebung anzuzeigen, wenn es sich um ein Mitglied der Startelf handelt? Hier kommt die sogenannte if-Anweisung ins Spiel. Dabei handelt es sich um eine bedingte Anweisung, die zunächst einen Ausdruck auswertet und nur dann die auf die if-Anweisung folgenden Codezeilen ausführt, falls die Auswertung den Wahrheitswert True (wahr) ergibt. Liefert die Auswertung dagegen den Wert False (falsch), werden die restlichen Zeilen der if-Anweisung übersprungen. ## Boolesche Ausdrücke Bevor wir uns näher mit der Struktur der if-Anweisung befassen, müssen wir zunächst verstehen, was wahre bzw. falsche Ausdrücke in diesem Zusammenhang bedeuten. Dafür ist es wiederum erforderlich, dass wir uns den Unterschied zwischen einer Anweisung und einem Ausdruck vergegenwärtigen: Eine Anweisung ist eine Codezeile, die vom Interpreter ausgeführt wird; dagegen handelt es sich bei einem Ausdruck um einen Codeausschnitt, dem der Interpreter durch Auswertung einen bestimmten Wert zuordnet. Bei einem sogenannten booleschen oder logischen Ausdruck kann dessen Wert entweder als wahr (in Python: True) oder falsch (in Python: False) interpretiert werden. Und genau wie numerische Ausdrücke werden auch boolesche Ausdrücke mithilfe von Operatoren gebildet, die in diesem Fall **Vergleichsoperatoren** genannt werden. In Python werden die Vergleichsoperatoren folgendermaßen dargestellt: | Operator | Beschreibung | Syntax | |---|---|---| | == | Gleich: Der Interpreter prüft, ob der Wert des Arguments auf der linken Seite des Operators gleich dem Zahlenwert des Arguments auf der rechten Seite des Operators ist. Wenn dies der Fall ist, erhält der Ausdruck den Wahrheitswert True, ansonsten den Wahrheitswert False. | a==b | | != | Ungleich: Der Interpreter prüft, ob die Argumente auf der linken Seite und rechten Seite des Operators voneinander verschiedene Werte aufweisen. Wenn dies der Fall ist, erhält der Ausdruck den Wahrheitswert True, ansonsten den Wert False. | a!=b | | > | Größer als: Hier prüft der Interpreter, ob der Wert des Arguments auf der linken Seite des Operators den Wert des Arguments auf der rechten Seite des Operators übersteigt. Ist dies der Fall, wird True zurückgeliefert. Ansonsten erhält der Ausdruck den Wahrheitswert False. | a>b | | >= | Größer oder gleich: Hier prüft der Interpreter, ob der Wert des Arguments auf der linken Seite des Operators den Wert des Arguments auf der rechten Seite des Operators übersteigt oder mit diesem identisch ist. Ist dies der Fall, wird True zurückgeliefert. Ansonsten erhält der Ausdruck den Wahrheitswert False. | a>=b | | < | Kleiner als: Hier prüft der Interpreter, ob der Wert des Arguments auf der linken Seite des Operators den Wert des Arguments auf der rechten Seite des Operators unterschreitet. Ist dies der Fall, wird True zurückgeliefert. Ansonsten erhält der Ausdruck den Wahrheitswert False. | a<b | | <= | Kleiner oder gleich: Hier prüft der Interpreter, ob der Wert des Arguments auf der linken Seite des Operators den Wert des Arguments auf der rechten Seite des Operators unterschreitet oder mit diesem identisch ist. Ist dies der Fall, wird True zurückgeliefert. Ansonsten erhält der Ausdruck den Wahrheitswert False. | a<=b | ## if-Anweisungen In dem gegebenen Beispiel handelt es sich um eine einzelne Zeile, die das Wort "(Starter)" auf dem Bildschirm ausgibt, um so jene Spieler:innen zu markieren, die Teil der Startelf sind. Wie Sie sicherlich bemerkt haben, ist die entsprechende Zeile um vier Leerzeichen gegenüber den restlichen Inhalten der Zelle eingerückt. Daran erkennt der Python-Interpreter, dass es sich um den sogenannten Körper der obigen if-Anweisung handelt und dass die darin enthaltenen Anweisungen nur dann ausgeführt werden sollen, wenn die Bedingung der if-Anweisung erfüllt ist bzw. wenn der in ihrer Kopfzeile angegebene boolesche Ausdruck den Wahrheitswert True ergibt. Liefert die Auswertung des Ausdrucks dagegen den Wert False, ist dieser Teil der if-Anweisung zu ignorieren. Grundsätzlich können Sie hier beliebig viele Codezeilen einfügen. Sie müssen lediglich darauf achten, dass diese durch eine Einrückung von standardmäßig vier Leerzeichen abgehoben sind. Zwar können Sie prinzipiell auch größere oder kleinere Abstände wählen, doch ist es empfehlenswert, nicht vom Standard abzuweichen. In jedem Fall sollten Sie unbedingt beachten, dass alle Zeilen im Körper einer if-Anweisung auf identische Weise eingerückt sein müssen. (Sie können also nicht einer Zeile vier und der nächsten fünf Leerzeichen voranstellen; der gesamte Anweisungskörper muss bündig gesetzt sein.) ## else-Zweig Hier enthält der Code zwei if-Anweisungen: eine erste für den Fall, dass der Wert der Variablen my_number kleiner als 10 ist, und eine zweite für den Fall, dass der Variablenwert gleich oder größer als 10 ist. Allerdings ist diese Lösung ziemlich umständlich und kann mithilfe eines sogenannten else-Zweigs deutlich vereinfacht werden. Dabei ist zu berücksichtigen, dass ein else-Zweig immer auf eine if-Anweisung folgen muss und nicht für sich allein stehen kann. Wie Sie bereits wissen, wird der Code im Körper einer if-Anweisung ausgeführt, wenn der als Bedingung fungierende boolesche Ausdruck bei der Auswertung den Wahrheitswert True erhält. Im Gegensatz dazu wird der Code im Körper eines else-Zweigs ausgeführt, wenn der logische Ausdruck der zugehörigen if-Anweisung den Wahrheitswert False erhält. Dementsprechend ist es möglich, die zweite if-Anweisung aus unserem Beispiel durch einen else-Zweig zu ersetzen, um das Programm effizienter und übersichtlicher zu machen: ## elif-Zweig Das oben dargestellte Programm bittet die Benutzer:innen zunächst um die Eingabe einer Zahl, wobei der mithilfe der input-Funktion eingelesene Wert direkt in eine Ganzzahl umgewandelt wird. Dadurch ist dafür gesorgt, dass der Inhalt der Variablen my_number mit numerischen Werten verglichen werden kann und nicht jedes Mal konvertiert werden muss. Anschließend beginnt die Abarbeitung der if-Anweisung. Hierbei wird zunächst geprüft, ob der Wert der Variablen my_number kleiner als null ist. Sollte dies zutreffen, wird der Code im Körper des if-Blocks ausgeführt – mit der Folge, dass sowohl der elif-Zweig als auch der else-Zweig unbeachtet bleiben. Ist der Wert der Variablen jedoch nicht kleiner als null, geht der Interpreter zur Auswertung des elif-Zweigs über. Dessen Bedingung ist erfüllt, wenn die Variable my_number den Wert null aufweist. In diesem Fall werden die im Körper des elif-Zweigs enthaltenen Zeilen ausgeführt, während der else-Zweig übersprungen wird. Andernfalls wird der Code im Körper des else-Zweigs ausgeführt. ## Schleifen Beim Programmieren werden Sie häufiger feststellen, dass bestimmte Aktionen für alle Elemente eines spezifischen Zahlen- oder Wertebereichs wiederholt werden müssen. Um eine solche wiederholte Befehlsausführung im Programmcode umzusetzen, gibt es in Python das Konzept der Schleife. Schauen wir uns zunächst Schleifen an, die auf einem sogenannten range-Objekt basieren. ### range-Objekt Grundsätzlich erzeugt dies eine Zahlenreihe, deren spezifische Ausprägung durch drei numerische Parameter bestimmt werden kann: * **Startwert:** Dieser optionale Wert gibt an, bei welcher Zahl die range mit der Erstellung der Zahlenreihe ansetzen soll. Wenn Sie diesen Parameter weglassen, wird automatisch die Zahl 0 als Startwert gewählt. * **Endwert:** Dies ist der einzige obligatorische Parameter. Er teilt dem range-Objekt mit, an welchem Punkt die Zahlenreihe enden soll. Dabei wird der angegebene Endwert selbst nicht mehr in die Reihe mit aufgenommen, die folglich mit dem vorherigen Element abschließt. * **Schrittweite:** Dieser optionale Parameter gibt an, wie groß der Abstand zwischen zwei aufeinanderfolgenden Zahlen der Reihe sein soll. Wenn Sie diesen Parameter weglassen, wird die Schrittweite automatisch auf 1 gesetzt. ## While-Schleifen Eine weitere gängige Schleife in Python ist die sogenannte while-Schleife, deren Kopfzeile aus dem Schlüsselwort while und einem booleschen Ausdruck besteht. Hier wird der im Schleifenkörper enthaltene Code immer wieder aufs Neue ausgeführt, solange die Auswertung des als Bedingung fungierenden Ausdrucks den Wahrheitswert True ergibt. Erweist sich der Ausdruck dagegen als falsch (False), wird die Schleife verlassen und der Interpreter setzt die Ausführung des Programms in der ersten Codezeile nach dem Schleifenkörper fort. ## Iteratoren und List Comprehensions For- und while-Schleifen sind wichtige Tools für alle Programmierer:innen und bieten sich immer dann an, wenn bestimmte Schritte oder Abläufe mehrmals nacheinander ausgeführt werden müssen. Das gilt grundsätzlich auch für die Fälle, in denen beispielsweise alle Einträge eines Sets oder einer Liste nacheinander bearbeitet werden sollen. Allerdings lassen sich derartige Anwendungsszenarien erheblich einfacher realisieren, wenn Sie zusätzlich auf ein weiteres nützliches Python-Feature zurückgreifen: Iteratoren. ### Iteratoren Iteratoren bieten Ihnen die Möglichkeit, die Einträge einer Liste, eines Tupels oder eines Dictionary in einer Schleife zu durchlaufen und nacheinander abzurufen. Sie können einen entsprechenden Iterator erstellen, indem sie die iter-Funktion aufrufen und dabei den Namen der betreffenden Liste bzw. des betreffenden Tupels oder Dictionarys als Parameter angeben: ### List Comprehensions Genau wie bei der klassischen Listenerstellung mit einer konventionellen for-Schleife fungiert der Ausdruck n*n also auch bei der Definition der List-Comprehension als Berechnungsvorschrift für die Elemente der neuen Liste. In beiden Fällen wird jeweils jeder einzelne Wert aus der Liste my_numbers abgerufen, der Variablen n zugewiesen und mit sich selbst multipliziert. Dann wird das Ergebnis der neuen Liste my_new_numbers hinzugefügt. Comprehensions erweisen sich beim Programmieren als äußerst nützlich, weil sie Ihnen die Möglichkeit bieten, die Werte einer bestehenden Liste auf der Grundlage einer Berechnungsvorschrift zu modifizieren und dann direkt in einer neuen Liste zu speichern. Dabei können Sie sogar bestimmte Elemente der Ausgangsliste überspringen, indem Sie im Anschluss an die for-Schleife eine entsprechende if-Anweisung einfügen. So lässt es sich beispielsweise bewerkstelligen, dass eine Quadratzahl (n*n) nur dann in die neue Liste aufgenommen wird, wenn ihr Ausgangswert (n) kleiner als 20 ist: