Konditionale

Zuletzt aktualisiert am 2025-10-31 | Diese Seite bearbeiten

Geschätzte Zeit: 25 Minuten

Übersicht

Fragen

  • Wie können Programme verschiedene Dinge für verschiedene Daten tun?

Ziele

  • Korrektes Schreiben von Programmen, die if- und else-Anweisungen und einfache boolesche Ausdrücke (ohne logische Operatoren) verwenden.
  • Verfolgen Sie die Ausführung von nicht verschachtelten Konditionalen und Konditionalen in Schleifen.

Benutze if Anweisungen, um zu kontrollieren, ob ein Codeblock ausgeführt wird oder nicht.


  • Eine if-Anweisung (richtiger: eine bedingte Anweisung) steuert, ob ein Codeblock ausgeführt wird oder nicht.
  • Die Struktur ähnelt der einer for-Anweisung:
    • Die erste Zeile beginnt mit if und endet mit einem Doppelpunkt
    • Körper, der eine oder mehrere Anweisungen enthält, wird eingerückt (normalerweise um 4 Leerzeichen)

PYTHON

mass = 3.54
if mass > 3.0:
    print(mass, 'is large')

mass = 2.07
if mass > 3.0:
    print (mass, 'is large')

AUSGABE

3.54 is large

Konditionale Bedingungen werden oft innerhalb von Schleifen verwendet.


  • Es macht wenig Sinn, eine Bedingung zu verwenden, wenn wir den Wert kennen (wie oben).
  • Nützlich, wenn wir eine Sammlung zu verarbeiten haben.

PYTHON

masses = [3.54, 2.07, 9.22, 1.86, 1.71]
for m in masses:
    if m > 3.0:
        print(m, 'is large')

AUSGABE

3.54 is large
9.22 is large

Verwenden Sie else, um einen Codeblock auszuführen, wenn eine if Bedingung nicht wahr ist.


  • else kann nach einem if verwendet werden.
  • Ermöglicht die Angabe einer Alternative, die ausgeführt werden soll, wenn der if Zweig nicht genommen wird.

PYTHON

masses = [3.54, 2.07, 9.22, 1.86, 1.71]
for m in masses:
    if m > 3.0:
        print(m, 'is large')
    else:
        print(m, 'is small')

AUSGABE

3.54 is large
2.07 is small
9.22 is large
1.86 is small
1.71 is small

Verwenden Sie elif, um zusätzliche Tests zu spezifizieren.


  • Vielleicht möchten Sie mehrere Alternativen anbieten, jede mit ihrem eigenen Test.
  • Verwenden Sie elif (kurz für “else if”) und eine Bedingung, um diese anzugeben.
  • Immer verbunden mit einem if.
  • Muss vor else stehen (das ist der “catch all”).

PYTHON

masses = [3.54, 2.07, 9.22, 1.86, 1.71]
for m in masses:
    if m > 9.0:
        print(m, 'is HUGE')
    elif m > 3.0:
        print(m, 'is large')
    else:
        print(m, 'is small')

AUSGABE

3.54 is large
2.07 is small
9.22 is HUGE
1.86 is small
1.71 is small

Bedingungen werden einmal getestet, in der Reihenfolge.


  • Python durchläuft die Zweige der Bedingung der Reihe nach und testet sie.
  • Die Reihenfolge ist also wichtig.

PYTHON

grade = 85
if grade >= 90:
    print('grade is A')
elif grade >= 80:
    print('grade is B')
elif grade >= 70:
    print('grade is C')

AUSGABE

grade is B
  • Geht nicht automatisch zurück und wertet neu aus, wenn sich Werte ändern.

PYTHON

velocity = 10.0
if velocity > 20.0:
    print('moving too fast')
else:
    print('adjusting velocity')
    velocity = 50.0

AUSGABE

adjusting velocity
  • Verwenden Sie oft Konditionale in einer Schleife, um die Werte von Variablen zu “entwickeln”.

PYTHON

velocity = 10.0
for i in range(5): # execute the loop 5 times
    print(i, ':', velocity)
    if velocity > 20.0:
        print('moving too fast')
        velocity = velocity - 5.0
    else:
        print('moving too slow')
        velocity = velocity + 10.0
print('final velocity:', velocity)

AUSGABE

0 : 10.0
moving too slow
1 : 20.0
moving too slow
2 : 30.0
moving too fast
3 : 25.0
moving too fast
4 : 20.0
moving too slow
final velocity: 30.0

Erstellen Sie eine Tabelle mit den Werten von Variablen, um die Ausführung eines Programms zu verfolgen.


i 0 . 1 . 2 . 3 . 4 .
velocity 10.0 20.0 . 30.0 . 25.0 . 20.0 . 30.0
  • Das Programm muss eine print-Anweisung außerhalb des Schleifenkörpers haben, um den Endwert von velocity anzuzeigen, da sein Wert durch die letzte Iteration der Schleife aktualisiert wird.
Wichtig

Zusammengesetzte Beziehungen mit and, or und Klammern

Oft will man, dass eine Kombination von Dingen wahr ist. Sie können Beziehungen innerhalb einer Bedingung mit and und or kombinieren. Um das obige Beispiel fortzusetzen, nehmen wir an, Sie haben

PYTHON

mass     = [ 3.54,  2.07,  9.22,  1.86,  1.71]
velocity = [10.00, 20.00, 30.00, 25.00, 20.00]

i = 0
for i in range(5):
    if mass[i] > 5 and velocity[i] > 20:
        print("Fast heavy object.  Duck!")
    elif mass[i] > 2 and mass[i] <= 5 and velocity[i] <= 20:
        print("Normal traffic")
    elif mass[i] <= 2 and velocity[i] <= 20:
        print("Slow light object.  Ignore it")
    else:
        print("Whoa!  Something is up with the data.  Check it")

Genau wie in der Arithmetik können und sollten Sie Klammern verwenden, wenn es eine mögliche Mehrdeutigkeit gibt. Eine gute allgemeine Regel ist es, immer Klammern zu verwenden, wenn man and und or in derselben Bedingung mischt. Das heißt, anstelle von:

PYTHON

if mass[i] <= 2 or mass[i] >= 5 and velocity[i] > 20:

verwenden Sie eine der folgenden Formulierungen:

PYTHON

if (mass[i] <= 2 or mass[i] >= 5) and velocity[i] > 20:
if mass[i] <= 2 or (mass[i] >= 5 and velocity[i] > 20):

so ist es für den Leser (und für Python) völlig klar, was Sie wirklich meinen.

Aufgabe

Tracing Execution

Was gibt dieses Programm aus?

PYTHON

pressure = 71.9
if pressure > 50.0:
    pressure = 25.0
elif pressure <= 50.0:
    pressure = 0.0
print(pressure)

AUSGABE

25.0
Aufgabe

Trimmen von Werten

Füllen Sie die Lücken aus, so dass dieses Programm eine neue Liste erstellt, die Nullen enthält, wenn die Werte der ursprünglichen Liste negativ waren, und Einsen, wenn die Werte der ursprünglichen Liste positiv waren.

PYTHON

original = [-1.5, 0.2, 0.4, 0.0, -1.3, 0.4]
result = ____
for value in original:
    if ____:
        result.append(0)
    else:
        ____
print(result)

AUSGABE

[0, 1, 1, 1, 0, 1]

PYTHON

original = [-1.5, 0.2, 0.4, 0.0, -1.3, 0.4]
result = []
for value in original:
    if value < 0.0:
        result.append(0)
    else:
        result.append(1)
print(result)
Aufgabe

Verarbeitung kleiner Dateien

Ändern Sie dieses Programm so, dass es nur Dateien mit weniger als 50 Datensätzen verarbeitet.

PYTHON

import glob
import pandas as pd
for filename in glob.glob('data/*.csv'):
    contents = pd.read_csv(filename)
    ____:
        print(filename, len(contents))

PYTHON

import glob
import pandas as pd
for filename in glob.glob('data/*.csv'):
    contents = pd.read_csv(filename)
    if len(contents) < 50:
        print(filename, len(contents))
Aufgabe

Initialisierung

Ändern Sie dieses Programm so, dass es den größten und den kleinsten Wert in der Liste findet, unabhängig davon, wie groß der ursprüngliche Wertebereich ist.

PYTHON

values = [...some test data...]
smallest, largest = None, None
for v in values:
    if ____:
        smallest, largest = v, v
    ____:
        smallest = min(____, v)
        largest = max(____, v)
print(smallest, largest)

Was sind die Vor- und Nachteile dieser Methode, um den Bereich der Daten zu bestimmen?

PYTHON

values = [-2,1,65,78,-54,-24,100]
smallest, largest = None, None
for v in values:
    if smallest is None and largest is None:
        smallest, largest = v, v
    else:
        smallest = min(smallest, v)
        largest = max(largest, v)
print(smallest, largest)

Wenn Sie == None anstelle von is None geschrieben haben, funktioniert das auch, aber Python-Programmierer schreiben immer is None wegen der besonderen Art und Weise, wie None in dieser Sprache funktioniert.

Man kann argumentieren, dass ein Vorteil dieser Methode darin besteht, den Code lesbarer zu machen. Ein Nachteil ist jedoch, dass dieser Code nicht effizient ist, da es innerhalb jeder Iteration der Schleifenanweisung for zwei weitere Schleifen gibt, die jeweils über zwei Zahlen laufen (die Funktionen min und max). Es wäre effizienter, jede Zahl nur einmal zu durchlaufen:

PYTHON

values = [-2,1,65,78,-54,-24,100]
smallest, largest = None, None
for v in values:
    if smallest is None or v < smallest:
        smallest = v
    if largest is None or v > largest:
        largest = v
print(smallest, largest)

Jetzt haben wir eine Schleife, aber vier Vergleichstests. Es gibt zwei Möglichkeiten, die Schleife weiter zu verbessern: Entweder werden in jeder Iteration weniger Vergleiche durchgeführt, oder es werden zwei Schleifen verwendet, die jeweils nur einen Vergleichstest enthalten. Die einfachste Lösung ist oft die beste:

PYTHON

values = [-2,1,65,78,-54,-24,100]
smallest = min(values)
largest = max(values)
print(smallest, largest)
Hauptpunkte
  • Verwenden Sie if-Anweisungen, um zu kontrollieren, ob ein Codeblock ausgeführt wird oder nicht.
  • Konditionale Bedingungen werden oft innerhalb von Schleifen verwendet.
  • Verwenden Sie else, um einen Codeblock auszuführen, wenn eine if Bedingung nicht wahr ist.
  • Verwenden Sie elif, um zusätzliche Tests zu spezifizieren.
  • Die Bedingungen werden einmal in der Reihenfolge getestet.
  • Erstellen Sie eine Tabelle mit den Werten der Variablen, um die Ausführung eines Programms zu verfolgen.