Skip to content

If-Else

ProgrammierenProgrammablauf

Mit einem If-Else kann eine Verzweigung programmiert werden. Auf Deutsch übersetzt ganz einfach: «Wenn … dann … sonst …».

Python kennt zwischen if und else ein spezielles «else if» geschrieben als elif.

python
if bedingung1:
	block1
elif bedingung2:
	block2
else:
	block3
block4

Beispiel

Wir erweitern unser bekanntes Unterprogramm zur Lösung einer Quadratischen Gleichung. Unsere letzte Version quadr.py hat das Problem, dass sie nicht berücksichtigt, dass nicht alle Quadratische Gleichungen zwei Lösungen haben: Es gibt solche die nur eine und solche die gar keine Lösung besitzen.

Das Problem liegt beim Teil unter der Wurzel, der sogenannten Diskriminante. Diese darf nicht negativ sein, da sonst die Wurzel undefiniert ist.

x1,2=b±b24ac2a

Wir berechnen zuerst also die Diskriminante D:

D=b24ac

Dann unterscheiden wir drei Fälle:

D>0
Wir können die Wurzel von D ziehen, in die Formel einsetzen und erhalten zwei Lösungen
D=0
Die Wurzel von D ist 0. Somit hat das ± keinen Einfluss. Es gibt nur eine Lösung.
D<0
Die Wurzel ist nicht definiert und kann nicht berechnet werden. Die Gleichung hat keine Lösung.
python
from math import sqrt

def quadr_if(a, b, c):
	D = b**2 - 4*a*c
	if D > 0:
		x1 = (-b + sqrt(D))/(2*a)
		x2 = (-b - sqrt(D))/(2*a)
		return (x1, x2)
	elif D == 0:
		x = -b/(2*a)
		return x

print("Dieses Programm löst eine Quadratische")
print("Gleichung der Form ax^2 + bx + c = 0")

a = float(input("Gib den Wert für den Koeffizienten a ein: "))
b = float(input("Gib den Wert für den Koeffizienten b ein: "))
c = float(input("Gib den Wert für den Koeffizienten c ein: "))

result = quadr_if(a, b, c)
print(result)

if type(result) == tuple:
	print("Die Lösungen lauten:")
	print("x1 =", result[0])
	print("x2 =", result[1])
elif type(result) == float: 
	print("Die Lösung lautet:",result)
else:
	print("keine Lösung")
python
from math import sqrt

def quadr(a, b, c):
	x1 = (-b + sqrt(b**2 - 4*a*c))/(2*a)
	x2 = (-b - sqrt(b**2 - 4*a*c))/(2*a)
	return (x1, x2)

print("Dieses Programm löst eine Quadratische")
print("Gleichung der Form ax^2 + bx + c = 0")

a = float(input("Gib den Wert für den Koeffizienten a ein: "))
b = float(input("Gib den Wert für den Koeffizienten b ein: "))
c = float(input("Gib den Wert für den Koeffizienten c ein: "))

(x1, x2) = quadr(a, b, c)

print("Die Lösungen lauten:")
print("x1 =", x1)
print("x2 =", x2)

Das Skript quadr_if.py hat 2 If-Else-Strukturen:

ab Zeile 5
Hier werden ja nach Wert der Diskriminante D 2 oder 1 Lösung berechnet. Wenn die Gleichung keine Lösung hat, wird gar nichts zurückgegeben
ab Zeile 23
Da unser Unterprogramm entweder ein Tupel von 2 Werten, oder ein einzelner Wert, oder aber nichts zurückgibt, müssen wir hier nochmals eine Fallunterscheidung machen und herausfinden, was wir vom Unterprogramm erhalten.

Syntax

Der if-Teil ist zwingend und kommt immer zuerst. Optional wird er gefolgt von einem oder mehreren elif-Teilen. Am Schluss steht ein optionaler else-Teil.

python
if bedinung1:
	befehl1
	befehl2
	...
elif bedingung2:
	befehl3
	befehl4
	...
else:
	befehl5
	befehl6
	...
python
if bedinung1:
	befehl1
	befehl2
	...
python
if bedinung1:
	befehl1
	befehl2
	...
else:
	befehl3
	befehl4
	...
python
if bedinung1:
	befehl1
	befehl2
	...
elif bedingung2:
	befehl3
	befehl4
	...

bedingungX sind Ausdrücke welche True oder False ergeben.

Verschachtelung

Das elif kann auch als verschachteltes If-Else geschrieben werden:

python
if bedingung1:
	block1
elif bedingung2:
	block2
else:
	block3
block4
python
if bedingung1:
	block1
else:
	if bedingung2:
		block2
	else:
		block3
block4

Die elif-Notation ist aber etwas übersichtlicher, da sonst – gerade bei mehreren «Else-Ifs» – immer weiter eingerückt werden muss.

Allgemein können diese Programmier-Strukturen ineinander verschachtelt werden. Es ist also möglich in einem Unterprogramm ein If-Else zu haben (so wie im Beispiel zu oberst). Es ist aber auch möglich im If-Else ein weiteres If-Else zu haben.

python
if bedingung1:
	block1
	if bedingung2:
		block2
	else:
		block3
	block4
else:
	block5
block6

Jedes blockX kann beliebig mit Befehlen und auch weiteren If-Else versehen werden!

Gymnasium Kirchenfeld, fts