Verschachtelungen: if-Anweisungen in Funktionsdefinitionen in Python
Suiten können auch verschachtelt werden. Es ist also möglich, daß eine Suite eine andere Suite enthält. Dies kann beispielsweise verwendet werden, um eine if-Anweisung in eine Funktionsdefinition einzubauen.
Beispiel
Die Funktion »ast« gibt die durch ihren Argumentwert angegebene Anzahl von Sternen aus (bis zu maximal vier).
- Protokoll
def ast( n ):
if n > 0:
print( end='*' )if n > 1:
print( end='*' )if n > 2:
print( end='*' )if n > 3:
print( end='*' )
ast( 1 ); ast( 2 ); print()***
Man beachte wie die Einrückungen der verschachtelten Suiten sich bei der Verschachtelung addieren: Eine Zeile aus einer Suite, die in einer anderen Suite enthalten ist (die selber nicht in einer anderen Suite enthalten ist), wird daher noch weiter nach rechts eingerückt.
- Ausschnitt aus dem obigen Skript
def ast( n ): # nicht eingerueckt
# Beginn der def-Suite
if n > 0: # Einrueckung um 4 Positionen# Beginn der if-Suite
print( end='*' ) # Einrueckung um 4 + 3 Positionen
# Ende der if-Suiteif n > 1: # Einrueckung um 4 Positionen
- u.s.w.
Allgemein wird empfohlen, am Anfang einer Suite immer vier Zeichen weiter nach rechts einzurücken. Nach dem Ende einer Suite wird deren Einrückung dann wieder aufgehoben und zur Einrückung zurückgekehrt, die verwendet wurde, bevor die beendete Suite begann. (Falls mehrere verschachtelte Suiten gleichzeitig enden, orientiert man sich nur an der äußersten.)
Übungsaufgaben
/ Schreiben einer Funktionsdefinition
Schreiben Sie eine Definition einer Funktion »printHallo«, die einen Parameter »p« besitzt und »Hallo« ausgibt, wenn sie mit ›True‹ aufgerufen wird. Wenn sie mit ›False‹ aufgerufen wird, dann soll sie nichts tun. In der Funktion soll eine if-Anweisung (kein if-Ausdruck) verwendet werden, um es zu erreichen, daß »Hallo« ausgegeben wird, wenn »p« gleich ›True‹ ist. Es darf angenommen werden, daß diese Funktion immer nur mit ›True‹ oder ›False‹ aufgerufen wird.
Wenn die Funktion mit der folgenden Dokumentation versehen wird, sollte sie den folgenden Test bestehen.
- Dokumentation
"""
Gibt "Hallo" aus, genau dann,
wenn der Argumentwert gleich true ist.
>>> z = printHallo( True )
Hallo
>>> z == None
True
>>> z = printHallo( False )
"""- Test
from doctest import testmod
testmod()
/ Schreiben einer Funktionsdefinition
Schreiben Sie eine Definition einer Funktion »printFalse«, die einen Parameter »p« besitzt und »False« ausgibt, wenn sie mit ›False‹ aufgerufen wird. Wenn sie mit ›True‹ aufgerufen wird, dann soll sie nichts tun. In der Funktion soll eine if-Anweisung (kein if-Ausdruck) verwendet werden, um es zu erreichen, daß »Hallo« ausgegeben wird, wenn »p« gleich ›False‹ ist. Es darn angenommen werden, daß diese Funktion immer nur mit ›True‹ oder ›False‹ aufgerufen wird.
/ Refaktor einer Funktionsdefinition
Überarbeiten Sie die folgende Funktionsdefinition mit einer lambda-Bindung, so daß sie »def« an Stelle von »lambda« und eine if-Anweisung an Stelle eines if-Ausdrucks enthält, aber die definierte Funktion sich unter gleichen Umständen gleich verhält wie bei Verwendung der bisherigen Definition.
Hierbei sollen nur die bisher behandelten Möglichkeiten der Sprache verwendet werden.
- lambda-Bindung
main = lambda: print( 'richtig' if input() == 'Billard' else 'falsch' )
/ Erweiterung einer Funktionsdefinition
Erweitern Sie die folgende Funktionsdefinition so, daß sie (zusätzlich zu »n«) ausgibt: „Vorrat verbraucht, nachbestellen!“, genau dann wenn »n« kleiner als »1« ist. Verwenden Sie hierzu eine if-Anweisung, die hinter der derzeit vorhandenen Ausgabeanweisung eingefügt werden soll. Es darf angenommen werden, daß diese Funktion immer nur mit einer ganzen Zahl aufgerufen wird.
- Paraphrase der zu erstellenden if-Anweisung (Pseudocode)
- Wenn n kleiner als Eins ist, dann schreibe „Vorrat verbraucht, nachbestellen!“
- Quelltext
def vorratAusgeben( n ):
print( n )