Quizfragen#
Aufgaben für das Kapitel Basic:#
Aufgabe basic 1#
Erstelle eine Variable mit dem Namen
sentenceund weise ihr den Wert eines Strings mit elf Wörtern zu (beliebige Wörter).Gib (den Wert der Variable)
sentenceaus.Füge diese Codezeile am Ende deines Programms hinzu:
print(len(sentence.split()))
Hinweis: Die Python-split()-Funktion zählt die Wörter in einem String, indem sie die Leerzeichen zwischen den Wörtern zählt, daher lautet die genaue Aufgabe: „Schreibe 11 Wörter mit 10 Leerzeichen zwischen ihnen“.
mögliche Lösung
# solution for basic 1
sentence = "Fischers Fritz fischt frische Fische. Frische Fische fischt Fischer's Fritz."
print(sentence)
print(len(sentence.split()))
Aufgabe basic 2#
Erstelle eine Variable mit dem Namen
gedichtund weise ihr einen String mit einigen Wörtern zu.Der String soll über drei Textzeilen gehen.
Gib den Wert der Variable poem aus.
Füge diese Codezeile am Ende deines Programms hinzu:
print(len(gedicht.splitlines()))
Können Sie diese Aufgabe (dass der String über mehrere Zeilen geht) auf verschiedene Arten lösen?
mögliche Lösungen
Variante A
# solution for chapter basic, task 2, variant A
gedicht = """Eins
Zwo
g'suffa!"""
print(gedicht)
print(len(gedicht.splitlines()))
Variante B
# solution for chapter basic, task 2, variant B
gedicht="Eins\nZwo\ng'suffa!"
print(gedicht)
print(len(gedicht.splitlines()))
Variante C
# solution for chapter basic, task 2, variant C
poem="\n".join(["Eins","Zwo","g'suffa!"])
print(poem)
print(len(gedicht.splitlines()))
Aufgabe basic 3#
Erstelle eine Variable mit dem Namen gehalt und weise ihr den Wert 4000 zu.
Gib den Wert von salary aus.
mögliche Lösungen
Variante A
# solution for chapter basic, task 3, variant A
# most common variant
gehalt = 4000
print(gehalt)
Variante B
# solution for chapter basic, task 3, variant B
# use underscores for better readability
gehalt = 4_000
print(gehalt)
Variante C
# solution for chapter basic, task 3, variant C
print(gehalt:=4000) # walrus operator,
# siehe <https://peps.python.org/pep-0572/>
Aufgabe basic 4#
Erstelle eine Variable mit dem Namen
gehaltund weise ihr den Wert4000zu.Erstelle eine Variable namens
output. Der Wert vonoutputsoll dieser String sein:"Mein Gehalt ist X Euro pro Monat".Modifiziere den Code so, dass Python
Xdurch den Wert der Variablegehaltersetzt.Gib den Wert von
gehaltaus.
Können Sie diese Aufgabe auf verschiedene Arten lösen?
mögliche Lösungen:
mögliche Lösungen
Variante A
# solution for chapter basic, task 4, variant A
# using .format()
gehalt=4000
output = 'Mein Gehalt ist {} Euro pro Monat'.format(gehalt)
print(output)
Variante B
# solution for chapter basic, task 4, variant B
# using f-strings
gehalt = 4_000 # Unterstriche verbessern die Lesbarkeit
output = f'Mein Gehalt ist {gehalt} Euro pro Monat'
print(output)
Variante C
# solution for chapter basic, task 4, variant C
# using str()
gehalt=4000
output = "Mein Gehalt ist " + str(gehalt) + " Euro pro Monat"
print(output)
Variante D
# solution for chapter basic, task 4, variant D
# using %
gehalt=4000
output = 'Mein Gehalt ist %i Euro pro Monat' % income
print(output)
Aufgabe basic 5#
Bezeichner für Variablen
-Welche dieser Namen sind gültige Bezeichner (namen) für Variablen in Python?
aAaaaaa123123a_123a_a123a_1231_a23!abca-ba_minus_b
Korrekte Antworten
1, 2, 3, 4, 6, 7, 8, 12
Aufgaben für das Kapitel Operatoren und Ausdrücke#
Aufgabe op_exp 1#
Welche dieser Python-Ausdrücke ergeben den Wert True?
True == FalseTrue == TrueFalse == False5 > 2len("Michael") > len("Mike")5 != 76 >= 6"abc" * 3 == "abcabcabc"5**2 == 250 == False1 == True2 == True2 == FalseTrue == 1None == NoneNone != 0None == ""
Korrekte Antworten
2,3,4,5,6,7,8,9,10,11,14,15,16
Aufgabe op_exp 2#
Welche der folgenden Python-Ausdrücke ergeben den Wert False?
10 / 5 == 2.010 // 5 == 210 % 3 == 1( 5 > 1) und ( 5 > 7)( 5 > 1) oder (5 > 7)not (5 > 7)
Korrekte Antwort(en)
4
Aufgabe op_exp 3#
Was wird die Ausgabe (der Wert der Variable x) dieses Python-Programms sein?
x = 5
x = 5+1
x += 1
x = x * 2
x /= 2
print(x)
Korrekte Antwort
7.0
Aufgaben für das Kapitel Kontrollfluss#
Aufgabe control_flow 1#
In den Aufgaben für dieses Kapitel verwende (einige der) Python-Anweisungen, die im Kapitel Kontrollfluss beschrieben sind (wie if, elif, else, for, while, continue, break).
Schreibe ein Programm, das den Benutzer ein Passwort eingeben lässt und eine Antwort über das Passwort gibt:
Wenn das Passwort SeCrEt ist, soll das Programm
Correctausgeben und beenden.Wenn der Benutzer ein falsches Passwort eingibt, soll das Programm
Wrongausgeben und erneut nach einem Passwort fragen.Nach 3 fehlgeschlagenen Versuchen soll das Programm
You failed 3 timesausgeben und beenden.Bevor das Programm endet, soll es
bye!ausgeben.
Beispielausgabe:
Please enter password: >>>secret
Wrong
Please enter password: >>>Secret
Wrong
Please enter password: >>>SeCrEt
Correct
bye!
mögliche Lösungen
Variante A
# solution for chapter control flow, task 1, variant A
for a in range(3):
text = input("Please enter password: >>>")
if text == "SeCrEt":
print("Correct")
break
else:
print("Wrong")
else:
print("You failed 3 times")
print("bye!")
Variante B
# solution for chapter control flow, task 1, variant B
for _ in range(3):
if input("Please enter password: >>>") == "SeCrEt":
print("Correct")
break
print("Wrong")
else:
print("You failed 3 times")
print("bye!")
Variante C
# solution for chapter control flow, task 1, variant C
attempt = 1
max_attempts = 3
valid_password = "SeCrEt"
while True:
print(f"this is attempt {attempt} of {max_attempts}")
text = input("Please enter password: >>>")
if text == valid_password:
print("Correct")
break
else:
print("Wrong")
attempt += 1
if attempt > 3:
print("You failed 3 times")
break
print("bye!")
Variante D
# solution for chapter control flow, task 1, variant D
attempt = 0
while attempt < 3:
attempt += 1
if input("Please enter password: >>>") == "SeCrEt":
print("Correct")
break
print("Wrong")
else:
print("You failed 3 times")
print("bye!")
Variante E
# solution for chapter control flow, task 1, variant E
attempt = 1
while input("Please enter password: >>>") != "SeCrEt":
print("wrong")
attempt += 1
if attempt > 3:
print("You failed 3 times")
break
else:
print("correct")
print("bye!")
Aufgabe control_flow 2#
Das folgende Programm funktioniert nicht wie beabsichtigt.
Was das Programm eigentlich tun sollte:
Das Programm soll den Benutzer ein Passwort eingeben lassen.
Wenn der Benutzer das richtige Passwort (secret) eingibt, soll das Programm correct ausgeben und beenden.
Wenn der Benutzer ein falsches Passwort eingibt, soll das Programm erneut fragen.
Wenn der Benutzer 3-mal ein falsches Passwort eingibt, soll das Programm
You failed 3 timesausgeben und beenden.
Deine Aufgaben nach der Analyse des Programms:
Finde heraus, warum dieses Programm nicht wie beabsichtigt funktioniert.
Schlage vor, wie man das Programm ändern kann, damit es wie gewünscht funktioniert.
Hier der Quellcode des nicht funktionierenden Programms:
# problem control flow, task 2,
password = "secret"
max_attempts = 3
attempt = 1
while attempt < max_attempts:
print(f"Attempt {attempt} of {max_attempts}")
guess = input("enter password: >>>")
if guess == password:
print("correct")
break
attempt += 1
else:
print("You failed 3 times")
print("bye")
mögliche Lösung
Das Problem liegt in Zeile 5.
Korrektur von Zeile 5:
while attempt <= max_attempts:
Aufgabe control_flow 3#
Bitte korrigiere das folgende Programm so, dass es nur eine einzige Antwort ausgibt.
# problem control_flow task 3
income = input("please enter your monthly (netto) income in €")
income = int(income)
if income < 1000:
print("you do not earn much...")
if income < 2000:
print("it could be better....")
elif income < 3000:
print("nice")
if income < 4000:
print("very nice")
if income < 5000:
print("fantastic")
else:
print("really??")
mögliche Lösung
income = input("please enter your monthly (netto) income in €")
income = int(income)
if income < 1000:
print("you do not earn much...")
elif income < 2000:
print("it could be better....")
elif income < 3000:
print("nice")
elif income < 4000:
print("very nice")
elif income < 5000:
print("fantastic")
else:
print("really??")
Aufgabe control flow 4#
Übungen zu for-Schleife und zum Befehl range
Lies die Python-Dokumentation über den range-Befehl: https://docs.python.org/3/library/stdtypes.html#range
um die Parameter start, stop und step zu verstehen. (oder tippe im Python-Interpreter help(range) ein)
Versuche diese Aufgabe im Kopf (ohne Computer) zu lösen: Was wird die Ausgabe dieser Python-Anweisung sein?
print(list(range(5)))
Lösung
Die Ausgabe wird sein: [0,1,2,3,4]
Aufgabe control flow 5#
Schreibe eine Python-Anweisung (mit range), die folgende Ausgabe erzeugt:
[1,2,3,4,5]
Lösung
# solution control flow, task 5
print(list(range(1,6)))
Aufgabe control_flow 6#
Schreibe eine Python-Anweisung (mit range), die folgende Ausgabe erzeugt:
[10,20,30,40,50]
Lösung
# solution control flow task 6
print(list(range(10,51,10)))
Aufgabe control_flow 7#
Schreibe eine Python-Anweisung (mit range), die folgende Ausgabe erzeugt:
[50,40,30,20,10,0]
Lösung
# solution control flow task 7
print(list(range(50,-1,-10)))
Aufgabe control_flow 8#
Schreibe eine Python-Anweisung (mit
range), die alle Zahlen von 1 bis (inklusive) 10 ausgibt.Jede Zahl soll in einer eigenen Zeile stehen.
Lösung
# solution control flow task 8
for x in range(1,11):
print(x)
Aufgabe control_flow 9#
Schreibe eine Python-Anweisung (mit
range), die alle Zahlen von 1 bis inklusive 10 in einer einzigen Zeile ausgibt.Die Zahlen sollen durch ein Komma getrennt sein. (Es darf ein abschließendes Komma vorhanden sein.)
Lösung
# solution control flow task 9
for x in range(1,11):
print(x, end=",")
Aufgabe control_flow 10#
Schreibe ein Python-Programm (mit range), das jede Zahl von 2 bis inklusive 5 mit jeder anderen Zahl in diesem Bereich multipliziert.
Das Programm soll für jede Berechnung eine eigene Zeile ausgeben, wie in diesem (gekürzten) Beispiel:
(Die 3 Punkte (...) symbolisieren daß nur ein Ausschnitt gezeigt wird)
...
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10
3 x 2 = 6
3 x 3 = 9
...
Lösung
# solution chapter control flow, task 10
for a in range(1,6):
for b in range(1,6):
print(f"{a} x {b} = {a*b:>2}")
Aufgabe control_flow 11#
Gegeben ist dieses Python-Programm:
# problem control flow task 11
for x in "abcde":
for y in "wxyz":
print(x,y)
Wie viele Zeilen wird dieses Python-Programm ausgeben?
Lösung
20 Zeilen
Aufgabe control_flow 12#
Gegeben ist dieses Python-Programm:
# problem control flow task 12
for a in ("abc","def","ghi"):
for b in (100,200,300,400):
for c in "yz":
print(a,b,c)
Wie viele Zeilen wird dieses Python-Programm ausgeben?
Lösung
24 Zeilen
Aufgabe control_flow 13#
Gegeben ist dieses Python-Programm:
# problem control flow task 13
for a in range(-10,11):
for b in range(-10,11):
print(f"{a} + {b} = {a+b}")
print(f"{a} - {b} = {a-b}")
print(f"{a} x {b} = {a*b}")
print(f"{a} / {b} = {a/b}")
Warum funktioniert dieses Programm nicht?
Lösung
Wegen eines Division-durch-Null-Fehlers in Zeile 6. Die Zeile:
print(f"{a} / {b} = {a/b}")
versucht, a durch b zu teilen.
Aber b stammt aus range(-10, 11), und dieser Bereich enthält auch die 0.
Aufgabe control_flow 14#
-Bitte lies in im Kapitel Kontrollstrukturen über die Befehle break und continue nach.
(Beide Befehle können innerhalb einer while-Schleife oder innerhalb einer for-Schleife verwendet werden.)
-Überprüfe außerdem, ob du die offizielle Python-Dokumentation dazu verstehst:
https://docs.python.org/3/tutorial/controlflow.html#break-and-continue-statements
Wenn du das Gefühl hast,
breakundcontinueverstanden zu haben, analysiere folgends (korrekt funktionierende) Programm:
# problem control flow task 14 A
while True:
print("What is the answer to THE question?")
print("type 'help' to see a help text")
print("type 'quit' to exit this game")
command = input(">>>")
if command == "help":
print("See 'The hitchhikers guide to the galaxy")
print(" by Douglas Adams")
elif command == "quit":
break
elif command == "42":
print("Congratulations, you know THE answer")
print("But what was the question exactly..... ? ")
break
print("bye-bye")
Versuche zu verstehen, was das Programm macht (probiere es aus).
Versuche, dieses Programm nicht nur anhand des Codes zu verstehen, sondern auch anhand des Flussdiagramms:
flowchart TD
start:::firstclass
ask_question>user_enters_an_answer]:::secondclass
show_instructions:::thirdclass
end_of_program:::fourthclass
start-->show_instructions
show_instructions-->ask_question
ask_question--exit--> end_of_program
ask_question--help--> display_help
ask_question--42--> congratulations
ask_question--Other-->show_instructions
display_help --> show_instructions
congratulations --> end_of_program
classDef firstclass fill:#4040ff
classDef secondclass fill:#800000
classDef thirdclass fill:#208090
classDef fourthclass fill:#6600aa
Du kannst Flussdiagramme mit Stift und Papier oder mit Computerprogrammen erstellen (z. B. MS Word oder LibreOffice Draw). Das obige Diagramm wurde mit dem Charting-Tool „mermaid“ erstellt: https://mermaid.js.org
Gegeben ist dieses Python-Programm:
# problem control flow task 14 B
# password creation
while True:
print("type 'help' to display a help text")
command = input("please enter a new password >>>")
if command == "help":
print("The password must have: ")
print("At least one digit (0-9) ")
print("At least one lower-case character (a-z)")
continue
# test the password
for char in "abcdefghijklmnopqrstuvwxyz":
if char in command:
break
else:
print("no lowercase character (a-z) found. please try again")
continue
for number in "0123456789":
if number in command:
break
else:
print("no digit (0-9) found. please try again")
continue
print("Congratulation, your password is accepted")
break
print("bye bye")
Analysiere das obige Python-Programm und erstelle dafür ein Flussdiagramm! (mit einem Werkzeug deiner Wahl)
mögliche Lösung
flowchart TD
print_instruction([display short instruction text]):::firstclass
print_help([display long help text]):::fourthclass
ask_for_password>ask user for new passord]:::secondclass
password_is_help{password == 'help'?}:::thirdclass
is_letter_in_password{is a letter in <br></br>password?}:::fifthclass
is_number_in_password{is number in <br></br>password?}:::sixtclass
start_of_program--> print_instruction
print_instruction-->ask_for_password
ask_for_password-->password_is_help
password_is_help--NO-->is_letter_in_password
password_is_help--YES-->print_help
is_letter_in_password --YES-->is_number_in_password
is_letter_in_password --NO-->tell_error_message-->print_instruction
is_number_in_password--YES-->congratulations
congratulations-->end_of_program
is_number_in_password--NO-->tell_error_message2-->print_instruction
print_help --> print_instruction
classDef firstclass fill:#0000f0
classDef secondclass fill:#880000
classDef thirdclass fill:#a088bb
classDef fourthclass fill:#0066ff
classDef fifthclass fill:#dd4400
classDef sixtclass fill:#228822
Aufgaben für das Kapitel Funktionen#
Aufgabe functions 1#
Schreibe eine Python-Funktion mit dem Namen
greeting.Die Funktion soll einen Hotelangestellten simulieren. Wenn die Funktion die Parameter
hour_of_day(0–24) erhält, soll sie entsprechend dieser Tabelle einen Gruß zurückgeben:
Stunde von |
Stunde bis |
Gruß |
|---|---|---|
0 |
6 |
Gute Nacht |
6 |
11 |
Guten Morgen |
11 |
14 |
Guten Tag |
14 |
18 |
Guten Nachmittag |
18 |
22 |
Guten Abend |
22 |
24 |
Gute Nacht |
Füge Code hinzu, um die Funktion
greetingzu testen:Gib jede Stunde von 1 bis 24 und den entsprechenden Gruß für diese Stunde aus (eine Zeile pro Stunde)
mögliche Lösungen
Variante A
# solution chapter function task 1, variant A
def greeting(time_of_day):
if 6 <= time_of_day <11:
return "Good morning"
elif 11 <= time_of_day < 14:
return "Good day"
elif 14 <= time_of_day < 18:
return "Good afternoon"
elif 18 <= time_of_day < 22:
return "Good evening"
elif (22 <= time_of_day) or (time_of_day <6):
return "Good night"
# test
for h in range(1,25):
print(f"hour: {h:>2} greeting: {greeting(h)}")
Variante B
# solution chapter function task 1, variant B
def greeting(hour_of_day):
# dictionary: key: hour_of_day value: greeting
timetable = {6:"Good night",
11:"Good morning",
14:"Good day",
18:"Good afternoon",
22:"Good evening",
24.1:"Good night", # special case to catch 24
}
for key in timetable:
if hour_of_day < key:
return timetable[key]
# test
for h in range(1,25):
print(f"hour: {h:>2} greeting: {greeting(h)}")
Aufgabe control flow 2#
Schreibe eine Funktion namens
improved_greeting.Die Funktion soll wie in Aufgabe control flow 1 einen Hotelangestellten simulieren.
Die Funktion soll zwei Parameter haben:
hour_of_day(eine Zahl von 1 bis inklusive 24)gender(kann die Werte"male"oder"female"haben)
Die Funktion soll je nach
hour_of_dayeinen Gruß zurückgeben (siehe Tabelle in Aufgabe control flow 1), allerdings abhängig vom Wert des Argumentsgender:füge
"Sir"zum Gruß hinzu, wenngenderden Wert"male"hatfüge
"Madam"zum Gruß hinzu, wenn dasgenderden Wert"female"hat.
Beispiele:
Good morning, Sir
Good afternoon, Madam
-Füge außerdem – wie in der vorherigen Aufgabe – Code hinzu, um die Funktion für jede Stunde des Tages (0–24) und für beide Geschlechter („male“ und „female“) zu testen.
mögliche Lösungen
Variante A
# solution chapter function task 2, variant A
def improved_greeting(hour_of_day, gender):
suffix = ""
if gender == "male":
suffix = ", Sir"
elif gender == "female":
suffix = ", Madam"
if 6 <= hour_of_day <11:
return "Good morning" + suffix
elif 11 <= hour_of_day < 14:
return "Good day" + suffix
elif 14 <= hour_of_day < 18:
return "Good afternoon" + suffix
elif 18 <= hour_of_day < 22:
return "Good evening" + suffix
elif (22 <= hour_of_day) or (hour_of_day <6):
return "Good night" + suffix
# test
for h in range(1,25):
for g in ("male", "female"):
print(f"hour: {h:>2} gender: {g:<6} greeting: {improved_greeting(h,g)}")
Variante B
# solution chapter function task 1, variant B
def improved_greeting(hour_of_day, gender):
suffix = {"male": "Sir",
"female":"Madam",
}
# dictionary: key: hour_of_day value: greeting
timetable = {6:"Good night",
11:"Good morning",
14:"Good day",
18:"Good afternoon",
22:"Good evening",
24.1:"Good night", # special case to catch 24
}
for key in timetable:
if hour_of_day < key:
return timetable[key] + ", " + suffix[gender]
# test
for h in range(1,25):
for g in ("male", "female"):
print(f"hour: {h:>2} gender: {g:<6} greeting: {improved_greeting(h,g)}")
Aufgabe control flow 3#
Benutze das Beispiel aus der vorherigen Aufgabe (Aufgabe control flow 2), aber mache folgende Änderungen:
Benenne die Funktion
improved_greetingincomplex_greetingumFüge einen zusätzlichen Parameter mit dem Namen
childhinzu (kannTrueoderFalsesein)Ändere die Rückgabewerte der Funktion so, dass – wenn
childden WertTruehat – die Funktion anstatt"Sir"den Text"young man"zurückgibt und anstatt"Madam"den Text"young lady".
Füge Code hinzu, um die Funktion für alle Kombinationen von
hour_of_day(0–24),gender("male","female") undchild(True,False) zu testen
mögliche Lösungen
Variante A
# solution chapter function task 3, variant A
def complex_greeting(hour_of_day, gender, child):
suffix = ""
if gender == "male":
suffix = ", Sir"
if child: # if child == True:
suffix = ", young man"
elif gender == "female":
suffix = ", Madam"
if child:
suffix = ", young lady"
if 6 <= hour_of_day <11:
return "Good morning" + suffix
elif 11 <= hour_of_day < 14:
return "Good day" + suffix
elif 14 <= hour_of_day < 18:
return "Good afternoon" + suffix
elif 18 <= hour_of_day < 22:
return "Good evening" + suffix
elif (22 <= hour_of_day) or (hour_of_day <6):
return "Good night" + suffix
# test
for h in range(1,25):
for g in ("male", "female"):
for c in (True, False):
print(f"hour: {h:>2} gender: {g:<6} child: {str(c):<5} "
f"greeting: {complex_greeting(h,g,c)}")
Variante B
# solution chapter function task 3, variant B
def complex_greeting(hour_of_day, gender, child):
# dictionary: key: gender value: (greeting_adult, greeting_child)
suffix = {"male": ("Sir","young man"),
"female":("Madam","young lady"),
}
# dictionary: key: hour_of_day value: greeting
timetable = {6:"Good night",
11:"Good morning",
14:"Good day",
18:"Good afternoon",
22:"Good evening",
24.1:"Good night", # special case to catch 24
}
for key in timetable:
if hour_of_day < key:
return timetable[key] + ", " + suffix[gender][child]
# True has the value of 1, False has the value of 0
# Therefore, child can be used as index for first/second element
# test
for h in range(1,25):
for g in ("male", "female"):
for c in (True, False):
print(f"hour: {h:>2} gender: {g:<6} child: {str(c):<5} "
f"greeting: {complex_greeting(h,g,c)}")
Aufgabe control flow 4#
Schreibe eine Funktion mit dem Namen
greeter1:Die Funktion soll keinerlei Parameter haben
Die Funktion soll immer den String
"Good morning"zurückgebenFüge Code hinzu, der das Ergebnis eines Funktionsaufrufs von
greeter1ausgibt
Lösung
# solution chapter function, task4
def greeter1():
return "Good morning"
# function call (calling greeter1 without arguments)
print("----- calling greeter1 -------")
print(greeter1())
Aufgabe control flow 5#
-Erstelle eine Funktion mit dem Namen greeter2:
Die Funktion soll einen Parameter mit dem Namen
adjectivehabenDer Standardwert von
adjectivesoll"good"seinDie Funktion soll einen String zurückgeben, bestehend aus
adjectiveund dem Text" Morning"Teste die Funktion, indem du sie mit verschiedenen Argumenten (und ohne Argumente) aufrufst. Gib jeweils den Rückgabewert aus.
Lösung
# solution function task 5
def greeter2(adjective="good"):
return adjective + " Morning"
#function call (calling greeter2 with different arguments)
print("---- calling greeter2 -----")
print(greeter2("bad"))
print(greeter2("excellent"))
print(greeter2())
print(greeter2(" "))
Aufgabe control flow 6#
-Schreibe eine Funktion mit dem Namen greeter3:
Die Funktion soll 2 Parameter haben:
adjectiveundtime_of_day(beide sind Strings)Beide Parameter sollen Standardwerte haben (z. B.
"good"und"morning")Die Funktion soll einen einzigen String zurückgeben, bestehend aus dem Wert von
adjective, einem Leerzeichen und dem Wert vontime_of_day-Teste die Funktion, indem du sie mit verschiedenen Argumenten (und ohne Argumente) für beide Parameter aufrufst und jeweils den Rückgabewert ausgibst
mögliche Lösung
#solution function task 6
def greeter3(adjective="good", time_of_day="Morning"):
return adjective + " " + time_of_day
#function call calling greeter3
print("---- calling greeter3 -----")
print(greeter3())
print(greeter3("bad"))
print(greeter3("bad", "evening"))
print(greeter3(time_of_day= "evening"))
Aufgabe control flow 7#
Schreibe eine Funktion mit dem Namen
greeter4:Die Funktion soll einen Parameter mit dem Namen
time_of_dayhabenDer Standardwert von
time_of_daysoll"morning"sein -Die Funktion soll BELIEBIG viele weitere Argumente akzeptieren (auch keine Argumente) -Die Funktion soll einen String zurückgeben, bestehend aus allen zusätzlichen Argumenten (durch Komma getrennt), einem Leerzeichen und dem Wert vontime_of_day(alle Parameter sind Strings) -Teste die Funktion, indem du sie mehrfach aufrufst – jedes Mal mit einer unterschiedlichen Anzahl an Argumenten (und auch ohne Argumente). Gib bei jedem Funktionsaufruf den Rückgabewert aus.
Beispiel:
print(greeter4("evening", "lovely", "mild", "wonderful"))
mögliche Lösungen
Variante A
# solution functions task 7 variant A
# function that accepts any number of parameters and returns them all
def greeter4(time_of_day="Morning", *args):
text = ""
for a in args:
text += a + ","
if len(args) > 0:
text = text[:-1] # remove last comma
text += " "
text += time_of_day
return text
print("------ calling greeter4 ----")
print(greeter4())
print(greeter4("night"))
print(greeter4("evening", "wonderful", "lovely", "heroic", "romantic"))
print(greeter4("night", "good"))
print(greeter4("day", "sunny", "warm", "emotional"))
Variante B
# solution functions task 7 variant B
# function that accepts any number of parameters and returns them all
def greeter4(time_of_day="Morning", *args):
text = ",".join(args)
if len(text) > 0:
text += " "
text += time_of_day
return text
print("------ calling greeter4 ----")
print(greeter4())
print(greeter4("night"))
print(greeter4("evening", "wonderful", "lovely", "heroic", "romantic"))
print(greeter4("night", "good"))
print(greeter4("day", "sunny", "warm", "emotional"))
Aufgabe control flow 8#
-Schreibe eine Funktion mit dem Namen greeter5:
Die Funktion soll einen Parameter mit dem Namen
time_of_dayhabenDer Standardwert von
time_of_daysoll “morning” seinDie Funktion soll BELIEBIG viele zusätzliche Keyword-Argumente akzeptieren, z. B.:
greeter5("morning", air="wonderful", weather="sunny")
Die Funktion soll einen mehrzeiligen String zurückgeben (siehe unten), der alle Argumente in folgender Form enthält:
Funktionsaufruf:
greeter5("morning", air="wonderful", weather="sunny")
Rückgabewert:
"What a morning!\nThe air is wonderful.\nThe weather is sunny."
-Teste die Funktion indem du sie mehrfach mit unterschiedlichen Argumenten aufrufst (auch ohne Argumente). Gib jeweils den Rückgabewert aus.
mögliche Lösung
#solution function task 8
def greeter5(time_of_day="morning", **kwargs):
text = "What a " + time_of_day + "!\n" # \n makes a new line
for key, value in kwargs.items():
text += "The " + key + " is " + value + ".\n"
return text
print("------- calling greeter5 ---------")
print(greeter5())
print(greeter5(air="wonderful", mood="joyful", future="bright"))
print(greeter5("day", temperature="freezing", wind="strong"))
Aufgabe control flow 9#
Schreibe eine Funktion mit dem Namen
greeter6:Die Funktion soll einen Parameter mit dem Namen
time_of_dayhaben Der Standardwert vontime_of_daysoll"morning"sein -Die Funktion soll BELIEBIG viele zusätzliche Argumente akzeptieren (deren Werte Strings sind), z. B.:
greeter6("day","good","early","successfull")
Die Funktion soll BELIEBIG viele zusätzliche Keyword-Argumente akzeptieren, z. B.:
greeter6("day", "good", air="wonderful", weather="sunny")
Die Funktion soll einen mehrzeiligen String zurückgeben, der alle Argumente und alle Keyword-Arguments in dieser Form enthält:
Funktionsaufruf:
greeter6("morning", "good", "nice", air="wonderful", weather="sunny")
Rückgabewert:
"What a good, nice morning!\nThe air is wonderful.\nThe weather is sunny."
-Teste die Funktion, indem du sie mehrfach mit verschiedenen Argumenten und Keyword-Argumenten aufrufst, und gib jeweils den Rückgabewert aus.
mögliche Lösung
# solution function task 9
def greeter6(time_of_day="morning", *args, **kwargs):
text = "What a "
# iterate over *args
for a in args:
text += a + ", "
if len(args) > 0:
text = text[:-2] + " "
text += time_of_day + "!\n"
# iterate over **kwargs
for key,value in kwargs.items():
text += "The " + key + " is " + value + ".\n"
return text
print("------ calling greeter6 ----")
print(greeter6())
print(greeter6("evening"))
print(greeter6("morning", "sunny", "warm", "emotional"))
print (greeter6("morning", "sunny", "warm", "emotional",
air="wonderful", mood="joyful", future="bright"))
print(greeter6(air="smelly"))
Aufgaben für das Kapitel Objektorientierte Programmierung#
Aufgabe oop 1#
Schreibe eine Klasse mit dem Namen
Game.Die Klasse soll eine Klassenvariable mit dem Namen
playerhaben. Der Wert dieser Variable soll"Bugs Bunny"sein.
Die Klasse soll eine Klassenvariable mit dem Namen
highscorehaben. Der Wert dieser Variable soll1000sein.Die Klasse soll eine Klassenvariable mit dem Namen
credithaben. Der Wert dieser Variable soll2sein.
Schreibe Python-Code, der alle Klassenvariablen der Klasse
Gameund ihre Werte ausgibt.
mögliche Lösungen
Variante A
# Lösung OOP Aufgabe 1 Variante A
class Game:
player = "Bugs Bunny"
highscore = 1000
credit = 2
print("Game.player", Game.player)
print("Game.highscore", Game.highscore)
print("Game.credit", Game.credit)
Variante B
# Lösung OOP Aufgabe 1 Variante B
class Game:
player = "Bugs Bunny"
highscore = 1000
credit = 2
for key, value in Game.__dict__.items():
if key[:2] != "__":
print(key, value)
Aufgabe oop 2#
Schreibe eine Klasse mit dem Namen
ToyDie Klasse soll eine
__init__-Methode besitzen.Schreibe die Klasse so, dass jede Instanz dieser Klasse folgende Attribute (auch Objektvariablen genannt) hat:
pricemit dem Wert10colormit dem Wert"green"
Erstelle eine Variable mit dem Namen
teddy.Der Wert von
teddysoll eine Instanz der KlasseToysein.Schreibe Code, um das Attribut
heightvon teddy auf7zu setzen.Schreibe Code, um die Namen und Werte aller Attribute von
teddyauszugeben.
mögliche Lösungen
Variante A
# Lösung OOP Aufgabe 2 Variante A
class Toy:
def __init__(self):
self.price = 10
self.color = "green"
teddy = Toy()
teddy.height = 7
print("price", teddy.price)
print("color", teddy.color)
print("height", teddy.height)
Variante B
# Lösung OOP Aufgabe 2 Variante B
class Toy:
def __init__(self):
self.price = 10
self.color = "green"
teddy = Toy()
teddy.height = 7
for key, value in teddy.__dict__.items():
print(key, value)
Aufgabe oop 3#
Erstelle eine Klasse mit dem Namen
Walker.Gib dieser Klasse eine Methode mit dem Namen
walk.Der Rückgabewert dieser Methode soll der String
"i'm walking"sein.
Erstelle eine Klasse mit dem Namen
Swimmer.Gib dieser Klasse eine Methode mit dem Namen
swim.Der Rückgabewert dieser Methode soll
"i'm swimming"sein.
Erstelle eine Klasse namens
Flyer.Gib der Klasse eine Methode names
fly.Mit dem Rückgabewert:
"i'm flying"
Erstelle eine Klasse
Diver. - Mit einer Methodedive. - Mit dem Rückgabewert:"i'm diving"-Erstelle Klassen mit den Namen und Methoden gemäß der Tabelle unten. Verwende Vererbung (inheritance) von den bestehenden Klassen für die neuen Klassen. Schreibe nur einpassStatement in die Klassen, schreibe keine Methoden oder Attribute hinein.
Klassenname |
walk() |
swim() |
fly() |
dive() |
|---|---|---|---|---|
Falcon |
Ja |
Nein |
Ja |
Nein |
Penguin |
Ja |
Ja |
Nein |
Ja |
Duck |
Ja |
Ja |
Ja |
Ja |
Eurasian_swift |
Nein |
Nein |
Ja |
Nein |
Erstelle eine Variable
tux. Der Wert dieser Variablen soll eine Instanz der KlassePenguinsein.Schreibe Python-Code, der das Ergebnis von
tux.dive()ausgibt.
mögliche Lösung
#Lösung OOP Aufgabe 3 Variante A
#Elternklassen
class Walker:
def walk(self):
return "i'm walking"
class Swimmer:
def swim(self):
return "i'm swimming"
class Flyer:
def fly(self):
return "i'm flying"
class Diver:
def dive(self):
return "i'm diving"
# Kindklassen
class Falcon(Walker, Flyer):
pass
class Penguin(Walker, Swimmer, Diver):
pass
class Duck(Walker, Swimmer, Flyer, Diver):
pass
class Eurasian_swift(Flyer):
pass
tux = Penguin() # Klasseninstanz erzeugen
print(tux.dive())
Aufgabe oop 4#
Folgender Code ist gegeben:
class Bird:
def __init__(self, name):
self.name = name
self.can_fly = True
self.can_walk = True
self.can_swim = False
self.can_dive = False
def __str__(self):
"""Diese Funktion wird aufgerufen, wenn die Klasseninstanz gedruckt wird"""
return f"i am a {self.__class__.__name__}"
Erweitere obigen Python-Code, um eine Variable tux zu erstellen.
Der Wert dieser Variable soll eine Klasseninstanz von
Birdsein. -Das Attributnameder Instanz soll"Duck"sein.Schreibe eine neue Zeile Python-Code, um das Attribut
can_swimvontuxaufTruezu setzen.
mögliche Lösung
# ...
# <hier die class Bird einfügen aus der Angabe>
# ...
# Lösung Kapitel OOP, Aufgabe 4
tux = Bird(name="Duck")
tux.can_swim = True
Aufgabe oop 5#
Gegeben ist die Klasse
Birdaus Aufgabe oop 4.Schreibe Python-Code für eine Klasse mit dem Namen
Penguin.Diese Klasse soll eine Kindklasse von
Birdsein.Diese Klasse soll alle Methoden von
Birderben, inklusive der__init__-Methode.Ändere die
__init__-Methode der KlassePenguinso, dass das Attributcontinentimmer den Wert"Antarctic"hat.Ändere die
__init__-Methode so, dass die Attributecan_swimundcan_diveimmer den WertTruehaben und das Attributcan_flyimmer den WertFalsehat.
mögliche Lösungen
Variante A
# Lösung Kapitel OOP Aufgabe 5 Variante A
class Penguin(Bird):
def __init__(self, name):
# Wenn man den Elternklassennamen verwendet, muss self angegeben werden
Bird.__init__(self, name)
self.continent = "Antarctic"
self.can_swim = True
self.can_dive = True
self.can_fly = False
Variante B
# Lösung Kapitel OOP Aufgabe 5 Variante B
class Penguin(Bird):
def __init__(self, name):
# super() verweist auf die Elternklasse
super().__init__(name) # self wird hier nicht benötigt
self.continent = "Antarctic"
self.can_swim = True
self.can_dive = True
self.can_fly = False
Aufgaben für das Kapitel Eingabe und Ausgabe#
Aufgabe io 1#
Schreibe ein Python-Programm, das den String
"Hello World!"in eine Datei mit dem Dateinamenhello.txtschreibt.Gib den Text
File written to diskaus.
mögliche Lösungen
Variante A
# Lösung Kapitel IO Aufgabe 1 Variante A
text = "Hello World!"
myfile = open("hello.txt", "w") # write mode
myfile.write(text)
myfile.close()
print("File written to disk")
Variante B
# Lösung Kapitel IO Aufgabe 1 Variante B
text = "Hello World!"
with open("hello.txt", "w") as myfile:
myfile.write(text)
# schließt automatisch!
print("File written to disk")
Aufgabe io 2#
Falls du Aufgabe 1 nicht bearbeitet hast:
Erstelle (mit einem Texteditor) eine neue Textdatei, die eine einzige Textzeile enthält.
Das letzte Zeichen der Textzeile soll ein Ausrufezeichen (
!) sein.Speichere diese Textdatei unter dem Dateinamen
hello.txt.
Überprüfe mit Hilfe eines Datei-Managers, ob sich die Datei
hello.txtim aktuellen Ordner befindet.
Schreibe ein Python-Programm, das die bestehende Textdatei
hello.txtso verändert, dass:Zwei leere Zeilen am Ende des bestehenden Textes hinzugefügt werden.
Nach diesen 2 leeren Zeilen eine neue Textzeile hinzugefügt wird mit dem Text:
How do you do?Der Text mit einem Zeilenumbruch endet.
Schreibe Python-Code, der auf dem Bildschirm die Worte
Textline addedausgibt.
mögliche Lösung
# Lösung Kapitel IO Aufgabe 2 Variante A
text = "\n\n\nhow do you do?\n"
with open("hello.txt", "a") as myfile:
myfile.write(text)
print("Textline added")
Aufgabe io 3#
Schreibe ein Programm, das eine vorhandene Textdatei mit dem Namen
hello.txtöffnet.Das Programm soll herausfinden, wie viele Textzeilen (wie viele Zeilenumbrüche) in dieser Datei enthalten sind.
Das Programm soll den String
lines found:und anschließend die Anzahl der Textzeilen ausgeben.
mögliche Lösung
# Lösung Kapitel IO Aufgabe 3 Variante A
with open("hello.txt") as myfile:
lines = myfile.readlines()
print("lines found:", len(lines))
Aufgaben für das Kapitel Ausnahmen#
Aufgabe exceptions 1#
gegeben ist dieses Python-Programm:
# question chapter exception task 1
print("please enter your year of birth in the format YYYY")
year_text = input(">>>")
year = int(year_text)
print("in the year 2050, you will be ", 2050-year, "years old")
Ändere das Programm so, dass es nicht mit einem
ValueErrorendet, wenn der Benutzer eine falsche Eingabe macht (zum Beispiel Buchstaben anstelle einer Zahl eingibt).
Stattdessen soll das Programm den Benutzer erneut um eine Eingabe bitten, bis die Eingabe eine Zahl ist.
mögliche Lösungen
Variante A
# Lösung Kapitel Exceptions Aufgabe 1 Variante A
while True:
print("please enter your year of birth in the format YYYY")
year_text = input(">>>")
try:
year = int(year_text)
except ValueError:
print("not a number, please try again")
continue
# Eingabe war korrekt
break
print("in the year 2050, you will be ", 2050-year, "years old")
Variante B
# Lösung Kapitel Exceptions Aufgabe 1 Variante B
while True:
print("please enter your year of birth in the format YYYY")
year_text = input(">>>")
if year_text.isdigit():
year = int(year_text)
break
print("not a number, please try again")
print("in the year 2050, you will be ", 2050-year, "years old")
Aufgabe 2#
-gegeben ist dieser Python-Code:
# question chapter exceptions task 2
chessboard = [
["white","black","white","black","white","black","white","black"],
["black","white","black","white","black","white","black","white"],
["white","black","white","black","white","black","white","black"],
["black","white","black","white","black","white","black","white"],
["white","black","white","black","white","black","white","black"],
["black","white","black","white","black","white","black","white"],
["white","black","white","black","white","black","white","black"],
["black","white","black","white","black","white","black","white"],
]
def get_color(row, column):
row = int(row)
column = int(column)
return chessboard[row][column]
while True:
r = input("enter row number: (0-7) >>>")
c = input("enter column number (0-7) >>>")
result = get_color(r,c)
print(f"The color the field (row {r} column {c}) is: {result}")
Ändere den Code der Funktion
get_colorso, dass:Die Funktion den String
"no numbers"zurückgibt, wennrowodercolumn(oder beide) keine Ganzzahlen sind.Die Funktion den String
"bad index"zurückgibt, wennrowodercolumn(oder beide) kleiner als 0 oder größer als 7 sind.
mögliche Lösung
# Lösung Kapitel Exceptions Aufgabe 2
def get_color(row, column):
try:
r = int(row)
c = int(column)
except ValueError:
return "no numbers"
if (c < 0) or (c > 7) or (r < 0) or (r > 7):
return "bad index"
return chessboard[r][c]