Programmieren II: Weiterführende Programmierkonzepte

Lernziele

Slides Listen

Eine Liste ist eine Variable, in der man mehrere Werte speichern kann, z.B.:

faves = ['Pizza',42,'Muzak']

Eine Liste besteht aus Elementen, wobei jedes Element an einer bestimmten Position / Index steht. Achtung: Man beginnt Positionen bei 0 zu zählen! Im Beispiel oben ist also 'Pizza' das Element an Position 0, 42 das Element mit Index 1 und 'Muzak' das Element an Position 2. Die Liste besteht aus 3 Elementen, wir sagen, dass sie Länge 3 hat.

Die wichtigsten Befehle für Listen sind in der Tabelle unten aufgeführt. Für die Beispiele starten wir mit der Liste faves = ['Pizza',42,'Muzak']. In den beiden rechten Spalten wird angegeben, welchen Wert das Beispiel annimmt resp. wie die Liste nach der Bearbeitung aussieht. Diese beziehen sich immer auf das Resultat der vorhergehenden Zeile.

Erklärung Code Beispiel Wert Liste danach
Länge der Liste / Anzahl Elemente ermitteln len(liste) len(faves) 3 Liste unverändert
Element an Position ermitteln liste[index] faves[2] 'Muzak' Liste unverändert
Element an Position verändern liste[index] = new_element faves[2] = 'Music' ['Pizza',42,'Music']
Element an Position entfernen pop() faves.pop(1) ['Pizza','Music']
Element hinten anfügen (engl. ‘append’) append() faves.append('Football’) ['Pizza','Music','Football']
Element an bestimmter Position einfügen insert() faves.insert(2,'Pasta') ['Pizza','Music','Pasta','Football']

Löse alle Aufgaben in dieser Serie auf Papier. In jeder Aufgabe starten wir mit einer Liste, die vorgegeben wird. Diese Liste muss nicht abgeschrieben werden.

Aufgabe 1

Notiere neben jedem print-Befehl dessen Ausgabe.

buchstaben = ['c','g','a','z','w']
print(buchstaben)        # 1.
buchstaben.pop(3)
print(buchstaben)        # 2.
print(buchstaben[0])     # 3.
buchstaben.append('q')
print(buchstaben)        # 4.
buchstaben.insert(4,'e')
print(buchstaben)        # 5.
buchstaben[1] = 'k'
print(buchstaben)        # 6.
print(len(buchstaben))   # 7.

Aufgabe 2

Notiere neben jedem print-Befehl dessen Ausgabe.

cities = ["Bern", "Basel", "Zurich", "Genf", "Lausanne"]
 
print(len(cities)) # 1.
print(cities[3])   # 2.
cities.append("Winti")
cities.pop(1)
cities.insert(2,"Biel")
print(cities)      # 3.

Aufgabe 3

Starte mit der folgenden Liste:

fruits = ["Spaghetti", "Apfel", "Banane", "Schockolade", "Orane", "Birne"]

Notiere nun die Befehle, welche folgende Punkte umsetzen:

  1. Entferne alle Elemente, die (leider) nicht in diese Liste gehören.
  2. Füge ganz hinten eine „Mango“ an.
  3. Füge zwischen „Apfel“ und „Banane“ eine Kiwi ein.
  4. Ooops, bei der „Orange“ hat sich ein Fehler eingeschlichen. Korrigiere diesen, in dem du das Wort an Wort „Orane“ durch „Orange“ ersetzt.
  5. Füge ganz am Anfang eine „Blaubeere“ ein.
  6. Befehl, welcher die Anzahl Früchte, die in der finalen Liste stehen, ermittelt.
  7. Notiere zum Schluss die Liste so, wie sie am Schluss aussieht.

Aufgabe 4

Starte mit folgender Liste:

days = ['Donnerstag', 'Freitag', 'Montag', 'Mittwoch', 'Dienstag', 'Sonntag', 'Samstag']

Das Ziel ist, die Wochentage in die korrekte Reihenfolge zu bringen (beginnend am 'Montag').

Verwende dazu die bisher gelernten Befehle append(), insert(), pop(), wobei jeder dieser Befehlemindestens einmal (sinnvoll) verwendet werden muss. Achtung: Es ist verboten, selbst die Wochentage zu schreiben. Möchte man z.B. den 'Montag' vorne einfügen, muss man das Element mit Index 2 ('Montag') aus der Liste auslesen und ganz vorne einfügen.

Lösungen

Aufgaben B

Aufgabe 1

Betrachte die Liste alphabet = ["B","C","X","D","Z","F","G","I","J"]. Korrigiere die Liste, indem du:

  • am Anfang ein „A“ einfügst
  • das „X“ entfernst
  • dem Element mit Wert „Z“ den korrekten Wert „E“ zuweist
  • am richtigen Ort ein „H“ einfügst
  • am Ende ein „K“ anhängst

Aufgabe 2

Die folgende Liste soll einige europäische Hauptstädte beinhalten:

capitals = ["Berlin","Paris","Wien","Romanshorn","Ammsterdam","Konstanz","Prag"]

Korrigiere die Liste mithilfe der bisher gelernten Befehle:

  1. Ersetze „Romanshorn“ direkt durch die Schweizer Hauptstadt.
  2. Entferne die deutsche Stadt, die nichts in der Liste verloren hat.
  3. Füge hinten die Hauptstadt von Norwegen ein.
  4. Füge zwischen „Berlin“ und „Paris“ noch „Rom“ ein.
  5. Korrigiere den Schreibfehler in der holländischen Hauptstadt.

Aufgabe 3

Betrachte die Liste:

likeable_football_clubs = ["BVB", "Liverpool", "St. Gallen", "Bayern München", "Freiburg", "Breitenrain"]
  1. Gehe mit einer Schleife der Reihe nach durch alle Elemente der Liste durch und gebe sie aus.
  2. Die Bayern haben nichts in dieser Liste verloren. Bitte entferne sie, danke! Füge weiter deinen Lieblingsklub hinzu.

Aufgabe 4

In der folgenden Liste sind alle Monate gespeichert: months = ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"].

  1. Gib einen nach dem anderen aus. Der Output soll also sein:
    Januar
    Februar
    März
    April
    Mai
    Juni
    Juli
    August
    September
    Oktober
    November
    Dezember
  2. Gleich wie 1., jeder zweite Monat soll aber ausgelassen werden. Output:
    Januar
    März
    Mai
    Juli
    September
    November

Aufgabe 5

Gib von allen Zahlen, die in der Liste primes = [2,3,5,7,11,13,17,19] gespeichert sind, die jeweiligen Quadratzahlen aus. Ausgabe:

4
9
25
49
121
169
289
361

Aufgabe 6

Erstelle eine Liste, welche alle geraden Zahlen von $2$ bis und mit $100$ enthält. Starte mit einer leeren Liste, even = []. Erzeuge dann in einer while-Schleife alle geraden Zahlen und füge sie dieser Liste hinzu. Printe am Schluss die Liste, um sie zu überprüfen: print(even).

Aufgabe 7

Monika hat insgesamt $5$ verschiedene Konten. In der Liste hat sie die Beträge notiert, die sie auf den jeweiligen Konten hat:

money = [503,27,1366,242,961]

Wie viel Geld hat Monika? Berechne ihr Vermögen, indem du die einzelnen Beträge aufsummierst. Führe das Aufsummieren selbst in einer while-Schleife durch und verwende keine vordefinierte Funktion, die dies für dich erledigt. Monika überlegt sich, noch weitere Konten zu eröffnen, von denen sie die Beträge dann einfach der Liste anfügen würde. Dein Code soll dann nach wie vor funktionieren.

Aufgabe 8

Speichere in einer Liste einige Noten, z.B. grades = [5.5,4.75,6,3.5,5,5.5]. Schreibe nun einen eigenen Code, der Notendurchschnitt berechnet, verwende also keine vordefinierte Funktion. Der Code soll auch funktionieren, wenn Noten entfernt oder hinzugefügt werden.

Zusatzaufgabe: Gib die note korrekt auf halbe Noten gerundet aus. Schreibe einen eigenen Code für entsprechende Berechnung.

Aufgabe 9

Gegeben seien zwei gleich lange Listen. Der Code soll nun eine neue Liste erstellen, welche die beiden ursprünglichen wie folgt zusammenführt (merged):

list_1 = ['R','M','N','H','R'] und list_2 = ['o','a','s','o','n'] werden zu ['R', 'o', 'M', 'a', 'N', 's', 'H', 'o', 'R', 'n']

Aufgabe 10

Gegeben sei eine beliebige Liste numbers, welche ausschliesslich ganze Zahlen enthalten soll. Das Ziel ist nun, eine Liste zu erhalten, die die gleichen Werte in der gleichen Reihenfolge beinhaltet, mit Ausnahme aller Elemente mit Wert 7. Beispiel: Für die Liste numbers = [7,1,7,7,2,3,7,4,5,7,6,7,7,7,8,9,7,10] soll das Resultat sein [1, 2, 3, 4, 5, 6, 8, 9, 10] sein.

Wähle eine der beiden Optionen:

  1. Einfacher: Speichere die erwünschten Zahlen in einer neuen Liste. Starte dazu mit einer leeren Liste, z.B. numbers_wo_7 = [] und füge dann die erwünschten Zahlen eine nach der anderen hinzu.
  2. Anspruchsvoller: Erstelle keine weitere Liste sondern entferne diejenigen Elemente, die nicht in der Liste bleiben sollen.

Aufgabe 11

Gegeben sei eine Liste mit Strings, z.B. words = ["Elefant","Affe","Erdbeere","Esel","Schule","Tiger","Esstisch","Computer"]. Ziel ist, eine Liste zu erhalten, welche die gleichen Strings in der gleichen Reihenfolge beinhaltet, mit Ausnahme derjenigen Strings, die mit „E“ beginne.

Man hat hier wieder die beiden Optionen wie in einer Aufgabe vorher:

  1. Einfacher: Mit neuer Liste
  2. Anspruchsvoller: Ohne neue Liste, Lösche entsprechende Strings aus der Liste heraus.

Tipp: Falls s ein String ist, kann man mit s[0] auf den vordersten Buchstaben zugreifen.

Fertig mit Aufgaben?

  1. Einige Aufgaben haben anspruchsvollere Optionen, stelle sicher, dass du diese gelöst hast.
  2. Erstelle einen Account auf CodeWards, folge dazu dem Tutorial. Löse selbst Aufgaben dort. Wähle z.B. den Tag „Fundamental“.

Lösungen

Lernziele

Slides For-Schleife

Eine for-Schleife wird verwendet, um alle Elemente einer Sequenz (wie eine Liste, String usw.) durchzugehen. Man nennt dies auch über eine Sequenz iterieren.

For-Schleifen haben die Form:

for element in sequence:
    # Aktion, die für jedes Element ausgeführt wird

Um zum Beispiel alle Elemente einer Liste auszugeben, schreibt man einfach:

fruits = ["Apfel", "Banane", "Kirsche"]
for fruit in fruits:
    print(fruit)

Äquivalente while-Schleife

Ganz ähnlich kann man alle Zeichen eines Strings durchgehen:

word = "Python"
for letter in word:
    print(letter)

Der Output wird dann sein:

P
y
t
h
o
n

Äquivalente while-Schleife

Aufgabe 1

Die Noten der letzten Franz-Prüfung einer Klasse sind: grades = [6, 3.0, 5.5, 6, 5.25, 3.5, 3, 4.75, 5, 3.5, 5.25, 5.5, 4.75, 6, 3.75, 4.25, 3.25, 4.5, 3.5, 5]

  1. Berechne den Klassendurchschnitt selbst mithilfe einer while-Schleife.
  2. Berechne den Klassendurchschnitt nun nochmals, aber mithilfe einer for-Schleife. Verwende in der Schleife eine sinnvolle Variable.

Aufgabe 2

Finde mithilfe einer for-Schleife in der folgenden Liste die grösste Zahl und gib diese aus: numbers = [3, 6, 2, 8, 4, 10, 1]. Der Code soll auch für alle anderen Listen mit Zahlen funktionieren.

Wende deinen Code nun auf diese längere Liste an: numbers = [14, 41, 136, 38, 120, 24, 8, 129, 115, 117, 122, 1, 147, 39, 24, 94, 61, 26, 2, 26, 4, 73, 44, 78, 35, 156, 85, 116, 121, 106, 49, 131, 145, 32, 118, 118, 148, 19, 156, 25, 11, 3, 32, 102, 129, 129, 7, 20, 92, 35] (Resultat: 156)

Aufgabe 3

Schreibe einen Code, der mithilfe einer for-Schleife ermittelt, wie oft der Buchstabe 'S' in einem Wort (gespeichert in Variable word) vorkommt. Teste deinen Code für WORD = "MISSISSIPPI".

Aufgabe 4

Wandle mithilfe einer for-Schleife einen String in eine Liste um, die die Buchstaben des Wortes beinhaltet. Aus word = "Python" soll dann also letters = ['P','y','t','h','o','n'] werden.

Starte wie folgt:

word = "Python"
letters = [] # starte mit leerer Liste. Füge in for-Schleife nacheinander Buchstaben hinzu.
 
for ...

Aufgabe 5

Gegeben sei eine Liste mit Zahle numbers = [5,3,7,1,2]. Erstelle mithilfe einer for-Schleife eine neue Liste doubles, die von den Zahlen aus numbers jeweils das Doppelte beinhalten soll. doubles soll dann also [10,6,14,2,4] sein-

Aufgabe 6

Kombiniere die folgenden beiden String s1 = "IFRAI" und s2 = "nomtk" zu einem einzigen String "InFoRmAtIk mithilfe einer for-Schleife.

Tipps

Aufgabe 7

Gegeben ist die Liste numbers = [24, 40, 16, 10, 7, 26, 15, 7, 25, 23, 25, 41, 38, 13, 21, 33, 10, 42, 13, 9, 20, 35, 5, 39, 15, 36, 35, 1, 27, 42]. Erstelle eine neue, leere Liste even = []. Füge dieser Liste in einer for-Schleife alle geraden Zahlen aus numbers hinzu.

Tipp: Mit x % 2 == 0 kann man herausfinden, ob x gerade ist (also durch $2$ teilbar ist) oder nicht.

Aufgabe 8

Der König im Buch 'Die wilde Sophie' hat panische Angst vor dem Buchstaben 'E'. Er verlangt von seinen Untertanen, dass sie in ihrer Sprach den Buchstaben 'E' einfach auslassen. Anstelle „ESEL ESSEN GERNE ERDBEEREN, BESONDERS BEI EINEM ELEGANTEN ELEFANTENESSEN.“ sollen sie sagen und schreiben: „SL SSN GRN RDBRN, BSONDRS BI INM LGANTN LFANTNSSN.“

Schreibe einen Code mit einer for-Schleife, der von einem gegebenen String eine neue Version ohne E's erstellt:

text = "ESEL ESSEN GERNE ERDBEEREN, BESONDERS BEI EINEM ELEGANTEN ELEFANTENESSEN."
text_ohne_E = "" # hier füge in for-Schleife Buchstaben (ausser E) von Text hinzu
 
for ...

Tipps

Aufgabe 9

Diese und weitere Aufgaben weiter unten sollen mit ineinander verschachtelten for-Schleifen gelöst werden, also Code im Stil:

for ...:
    for ...:
        ...
    ...
...

Mit zwei unterscheidbaren Würfeln wird gleichzeitig gewürfelt. Gib alle möglichen Resultate aus, also:

11
12
13
..
21
...

Tipp: Verwende verschachtelte for-Schleifen (for-Schleife in for-Schleife …).

Aufgabe 10

Kleines Einmaleins: Gib alle Multiplikationen von allen einstelligen natürlichen Zahlen aus.

Variante 1 (einfach):

Das Resultat soll also wie folgt aussehen:

0 * 0 = 0
0 * 1 = 0
0 * 2 = 0
0 * 3 = 0
0 * 4 = 0
0 * 5 = 0
0 * 6 = 0
0 * 7 = 0
0 * 8 = 0
0 * 9 = 0
1 * 0 = 0
1 * 1 = 1
1 * 2 = 2
1 * 3 = 3
1 * 4 = 4
...
9 * 9 = 81

Variante 2 (anspruchsvoll):

Das Resultat soll wie folgt ausgegeben werden:

  | 0| 1| 2| 3| 4| 5| 6| 7| 8| 9|
--|--|--|--|--|--|--|--|--|--|--|
0|| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|
1|| 0| 1| 2| 3| 4| 5| 6| 7| 8| 9|
2|| 0| 2| 4| 6| 8|10|12|14|16|18|
3|| 0| 3| 6| 9|12|15|18|21|24|27|
4|| 0| 4| 8|12|16|20|24|28|32|36|
5|| 0| 5|10|15|20|25|30|35|40|45|
6|| 0| 6|12|18|24|30|36|42|48|54|
7|| 0| 7|14|21|28|35|42|49|56|63|
8|| 0| 8|16|24|32|40|48|56|64|72|
9|| 0| 9|18|27|36|45|54|63|72|81|

Tipps:

  • Verwende die Liste nrs = [0,1,2,3,4,5,6,7,8,9] (resp. range() falls du dies bereits kennst).
  • Verwende wieder verschachtelte for-Schleifen.
  • Verwende f-Strings.

Slides For-Schleifen II

Oft möchte man durch eine Liste mit Zahlen wie [1,2,3,4,5,...] iterieren. Eine solche kann man mit der range-Funktion einfach erstellen: range(<start>,<stop>,<step>), wobei:

  • <start> der Startwert ist.
  • <end> der Schlusswert ist (Achtung: nicht inklusive!)
  • <step> die Schrittweite zwischen zwei Zahlen ist.

Beispiel:

for i in range(3,15,2):
    print(i) # Output: 3,5,7,9,11,13. Achtung OHNE 15!

Range kann mit 1-3 Inputs verwendet werden:

  • range(<start>,<stop>,<step>)
  • range(<start>,<stop>) = range(<start>,<stop>,1)
  • range(<stop>) = range(0,<stop>,1)

Kann auch rückwärts iterieren: range(10,3,-1) # [10,9,8,7,6,5,4]

Oft möchte man nicht nur auf die Elemente einer Liste, sondern auch auf deren Positionen zugreifen. Beispiel:

numbers = [7,42,13,70,42,37,42]
 
for i in range(len(numbers)):
    if numbers[i] == 42:
        print(f"Found 42 at index {i}")

Löse alle Aufgaben mit for-Schleifen und verwende wenn immer sinnvoll die range-Funktion.

Aufgabe 1

  1. Zähle auf $100$: Gib alle ganzen Zahlen von $1$ bis und mit $100$ aus.
  2. Zähle von $10$ in $5$er-Schritten auf $100$, also $10,15,20,25,\ldots,95,100$.
  3. Zähle von $99$ in $3$er-Schritten bis auf $0 herunter.

Aufgabe 2

Noten: grades = [6, 3.0, 5.5, 6, 5.25, 3.5, 3, 4.75, 5, 3.5, 5.25, 5.5, 4.75, 6, 3.75, 4.25, 3.25, 4.5, 3.5, 5]

  1. Gib die Positionen aller Noten 6 aus.
  2. Berechne den Durchschnitt mit for.

Aufgabe 3

  1. Berechne die Summe $1+2+3+\ldots+1000000$.
  2. Berechne die Summe aller gerader Zahlen bis und mit $1000000$, also $2+4+6+8+\ldots+1000000$

Lösungen

Aufgabe 4

Wandle in möglichst kurze for-Schleife (max. 2 Zeilen) um. Der neue Code soll also den genau gleichen Output generieren wie der alte.

i = 10
while i < 29:
    print(i)
    i = i + 3

Aufgabe 5

String umkehren. Speichere einen String in einer Variablen ab, z.B. text = "Hello, world!". Schreibe nun einen Code, der einen neuen String, z.B. text_reversed generiert, welcher den Text umgekehrt beinhaltet. Aus „Hello, world!“ wird dann also „text = „Hello, world!“ wird dann also “!dlrow ,olleH„. Wie ist dein Name in umgekehrter Reihenfolge?

Aufgabe 6

Bestimme die Anzahl Wörter im Gedicht „Der Erlkönig“ von Goethe.

Gedicht

Tipps

Antwort

Aufgabe 7

Die Fakultät einer Zahl wird wie folgt berechnet:

  • $0! = 1$
  • $1! = 1$
  • $2! = 1 \cdot 2 = 2$
  • $3! = 1 \cdot 2 \cdot 3 = 6$
  • $4! = 1 \cdot 2 \cdot 3 \cdot 4 = 24$
  • $5! = 1 \cdot 2 \cdot 3 \cdot 4 \cdot 5 = 120$
  • usw.

Schreibe einen Code, in dem die Benutzerin eine natürliche Zahl eingeben soll. Der Code berechnet dann die Fakultät dieser Zahl. Test deinen Code anhand der Beispiele oben.

Aufgabe 8

Die bekannte Fibonacci-Folge ist $1,1,2,3,5,8,13,21,\ldots$. Findest du die Regel der Fibonacci-Folge selbst heraus? Versuche es für max. 2 min und lese nachher die Erklärung unten.

Erklärung Fibonacci-Folge

Erstelle nun die Liste fibonacci = [1,1]. Füge dieser Liste nun in einer for-Schleife die nächsten $18$ Elemente der Fibonacci-Folge hinzu.

Lösungen B

Lernziele

Theorie & Aufträge in Slides:

Slides Modern Art & Funktionen

Lösungen Auftrag II von Slides

Arbeite dich selbständig durch dieses Leitprogramm. Zuerst kommt jeweils ein kurzer Theorieblock mit anschliessenden Aufgaben. Studiere die zugehörige Lösung, sobald du eine Aufgabe fertig gelöst hast.

Kapitel I: Basics

Eine Funktion erlaubt es einem, den gleichen Codeblock an verschiedenen Stellen im Code aufzurufen und auszuführen. Dadurch wird der Code kürzer und sauberer strukturiert.

In Python wird eine Funktion wie folgt programmiert:

def name_der_funktion(<Input(s)>): # Argumente/Parameter sind optional
    # Codeblock
    # der Funktion
    return <Resultat> # ist optional
  • Das Schlüsselwort def leitet immer die Definition einer Funktion ein.
  • Darauf folgt der Funktionsname. Typischerweise schreibt man diesen mit ausschliesslich Kleinbuchstaben und Underlines _. Verwende immer sinnvolle Funktionsnamen!
  • Direkt anschliessend werden runde Klammern geschrieben. Diese enthalten die Inputs / Parameter / Argumente. Das sind Werte, die an die Funktion übergeben werden. Funktionen können auch ohne Parameter definiert werden, die Klammern sind dann halt einfach leer.
  • Nach einem Doppelpunkt
  • kommt der Funktionskörper, welcher den eigentlichen Code der Funktion beinhaltet. Dieser Code muss eingerückt sein. Dadurch weiss Python, welche Zeilen zur Funktion gehören und welche nicht mehr.
  • Rückgabewert: Eine Funktion kann (muss aber nicht) mit return etwas zurückgeben.

Nachdem du eine Funktion definiert hast, kannst du sie ganz einfach aufrufen. Dazu mehr in den Beispielen unten.

Aufgabe

In Python gibt es viele vorprogrammierte Funktionen, die wir verwenden können, z.B. len(["Pizza","Pasta"]) um die Anzahl Elemente einer Liste zu bestimmen:

  • len ist der Name der Funktion, steht für „length“, also ein sinnvoller Name!
  • Die Liste ["Pizza","Pasta"] ist der Input. In der Funktion drin wird diese Liste durchgegangen, um deren Anzahl Elemente zu ermitteln.
  • Der Rückgabewert ist die Anzahl Elemente in der Liste ["Pizza","Pasta"].

Du hast auch bereits die folgenden Funktionen kennengelernt. Notiere jeweils: Was sind die Inputs, was ist der Rückgabewert (falls es denn einen gibt).

  1. print
  2. range
  3. forward (für Turtles)

Lösung

Hinweise zu den Codes:

  1. Programmiere alle Codes mit dem TigerPython-Editor und speichere die Codes im OneNote ab.
  2. Verwende den Debugger in TigerPython. Mit diesem kannst du den Code Schritt für Schritt durchgehen. Das hilft dir, zu verstehen, was der Code genau macht.
    1. Debugger aktivieren: Drei Punkte oben rechts / Debugger
    2. Debugger verwenden: oranger Käfer / oranger Pfeil

Kapitel II: Funktion ohne Input und ohne Rückgabewert

Die einfachsten Funktionen sind solche ohne Input und ohne Rückgabewert. Solche Funktionen machen typischerweise einfach etwas wie in die Konsole zu schreiben. Stelle dir vor, du schreibst einen langen Code und brauchst ab und zu einen Motiavtions-Speech:

def motivational_speech():
    print("Du kannst das!")
    print("Du bist super!")
Aufgabe

Der Code unten besteht aus vier kurzen Codeblöcken.

  1. Kopiere den Code unten in den Editor.
  2. Füge dem Code am Anfang die Funktion motivational_speech() von oben an.
  3. Rufe nun nach jedem der vier Codeblöcke die Funktion auf.
  4. Gehe den Code mit dem Debugger durch.
for i in range(5):
    print(i)
 
x = 5
if x > 10:
    print("A")
else:
    print("B")
 
k = 3
while k > 0:
    print(k)
    k = k - 1
 
foods = ["Pizza","Pasta"]
foods.append("Risotto")

Lösung

Kapitel III: Funktion mit Input und ohne Rückgabewert

Oft soll es aber eine gewisse Variation geben, wenn der Code ausgeführt wird.

Aufgabe

Der folgende Code zeichnet vier rote Kreise mit blauem Rand in einem Quadrat angeordnet:

from gturtle import *
 
turi = Turtle()
turi.hideTurtle()
 
turi.setPenColor("blue")
turi.setFillColor("red")
turi.setPenWidth(10)
 
def circle(x,y):
    turi.setPos(x,y)
    turi.startPath()
    turi.leftArc(30,360)
    turi.fillPath()
 
circle(-50,-50)
circle(-50,50)
circle(50,-50)
circle(50,50)
  1. Kopiere den Code von oben in den Editor, lasse aber die letzten vier Zeilen Code (also die Funktionsaufrufe) weg.
  2. Füge dem Code direkt unter der Definition des Kreises eine Funktion quadrat(x,y) hinzu, welche die Turtle an die Koordinaten $(x,y)$ stellt und von dort aus ein Quadrat mit Seitenlänge $60$ zeichnet.
  3. Rufe nun die beiden Funktionen so auf, dass die folgende Figur reproduziert wird.

Lösung

Zusatzaufgabe

Reproduziere die folgende Funktion. Verwende zwei verschachtelte Schleifen für die Funktionsaufrufe:

Figur anzeigen

Lösungen

Kapitel IV: Funktion mit Rückgabewert

Die wohl am meisten verwendeten Funktionen benötigen Inputs und geben einen Rückgabewert zurück. Dies ist typischerweise der Fall für mathematische Funktionen, welche einem etwas ausrechnen sollen.

Möchte man zum Beispiel viele Zahlen quadrieren, kann man sich eine passende Funktion definieren und diese aufrufen:

def square(x):
    return x * x
 
result = square(5)
print(result)
 
print(square(42))
Aufgabe
  1. Kopiere den Code oben mit der square-Funktion in den Editor und gehe diesen mit dem Debugger Schritt für Schritt durch. Stelle sicher, dass du jeden Schritt genau verstehst.
  2. Verwende nun diese Funktion zusammen mit einer for-Schleife, um alle Quadratzahlen von $1$ bis und mit $20^2 = 400$ auszugeben.

Lösung

Aufgabe

Kopiere den folgenden Code in den Editor und vervollständige die Funktion. Verwende die vordefinierte Funktion sqrt() um die Quadratwurzel zu berechnen.

def pythagoras(a,b):
    return # HIER DEIN CODE
 
print(pythagoras(3,4)) # Resultat muss 5 sein

Lösung

Aufgabe
  1. Definiere eine Funktion umfang_kreis(), der man den Radius eines Kreises übergeben soll. Die Funktion berechnet dann den Umfang des Kreises und gibt diesen zurück.
  2. Berechne mithilfe deiner Funktion den Umkreis der Kreise mit Radius:
    1. $r = 1$
    2. $r = 5$
    3. $r = 13$

Lösung

Kapitel V: Modern Art

Mache nun moderne Kunst!

  1. Verwende die bereits existierenden Funktionen circle() und quadrat().
  2. Definiere neue Funktionen, z.B. triangle().
  3. Füge den Funktionen weitere Inputs hinzu, mit denen man die Grösse und Farbe anpassen kann.
  4. Füge Zufallselemente ein: Platziere Figuren mit Zufallsgrössen und Zufallsfarben an Zufallspositionen. Verwende dazu das random-Modul:
    import random # in aller erster Zeile des Codes
    # Achtung, es heisst randINT und nicht randIT !!!
    r = random.randint(10,200) # generiert Zufallszahl im Bereich 10 bis 200$

Lösung Modern Art mit Quadraten und Dreiecken

Aufgabe Würfelvolumen

Definiere eine Funktion mit einem Argument volume_cube(x), die das Volumen eines Würfels mit Seitenlänge $x$ (in cm) berechnet und zurückgibt (also NICHT printed). Speichere das Resultat in einer Variablen und gib es dann aus.

Welches Volumen hat ein Würfel mit Seitenlänge 13 cm?

Lösung

Aufgabe Kugelvolumen

Das Volumen einer Kugel mit Radius $R$ ist: $$V = \frac{4\pi}{3}\cdot R^3$$ Definiere eine Funktion volume_sphere(...), der man als Argument den Radius übergibt und die dann das Volumen zurückgibt. Die Kreiszahl Pi ($\pi$) kannst du mit math.pi aufrufen, dazu muss aber auch wieder zuerst das math-Modul importiert werden (import math).

Lösung

Aufgabe Notenberechnung

Schreibe eine Funktion grade(points), die dir die Note (grade) für eine gegebene Punktzahl berechnet und zurückgibt. Lege die Punktzahl, die für die Note $6$ notwendig ist in einer Konstanten (wie Variable, aber alles Grossbuchstaben) fest. Die Formel geht wie folgt: $$\text{Note} = \frac{5 \cdot \text{(erreichte Punkte)}}{\text{Punktzahl für Note 6}} + 1$$

Beachte:

  • Um die Noten schön zu runden, kannst du die vordefinierte Funktion round verwenden: round(3.14159,2) rundet dir die Zahl $3.14159$ auf zwei Nachkommastellen, man erhält also $3.14$.
  • Erreicht man mehr Punkte als notwendig für Note 6, soll man trotzdem die Note 6 erhalten.

Lösung

Aufgabe Liste mit Vielfachen

Schreibe eine Funktion liste_vielfache(vv,anzahl), welche zwei Zahlen als Inputs verlangt. Es soll eine Liste mit der Anzahl anz der Vielfachen der Zahl vv erstellt werden und zurückgegeben (nicht geprintet!) werden. Zum Beispiel soll liste_vielfache(3,5) die Liste [3,6,9,12,15] zurückgeben.

Lösung

Aufgabe Fakutltät

Die Fakultät ist eine Funktion, welche jeder ganzen natürlichen Zahl das Produkt aller natürlichen Zahlen (ohne Null) kleiner und gleich dieser Zahl zuordnet. Sie wird mit einem Ausrufezeichen geschrieben. Als Beispiel: $5!=1 \cdot 2 \cdot 3 \cdot 4 \cdot 5 =120$.

Schreibe eine Funktion factorial(...), welcher als Argument eine ganze Zahl übergeben wird und welche dir dann die Fakultät dieser Zahl zurückgibt.

Optionale Challenge für absolute Freaks: Kannst du die Fakultät ganz ohne Schleife berechnen? Dann hast du das Prinzip der Rekursion (Selbst-Aufruf) entdeckt!

Lösung

Aufgabe Mitternachtsformel (Zusatzaufgabe)

Eine quadratische Funktion kann immer in die Form $$ax^2 + bx + c = 0$$ gebracht werden. Die Lösung ist gegeben durch die sogenannte Mitternachtsformel: $$x = \frac{-b \pm \sqrt{b^2-4ac}}{2a}$$

Schreibe eine Funktion mitternachtsformel(...), die die drei Werte für $a,b,c$ entgegennimmt und die Lösung(en) zurück gibt. Beachte, dass es drei Fälle gibt:

  • keine Lösung: gib None zurück, dies ist der Fall, wenn der Term in der Wurzel negativ ist
  • eine Lösung, dies ist der Fall, wenn der Term in der Wurzel genau 0 ist
  • zwei Lösungen: gib Liste mit den beiden Werten zurück

Tipp: Verwende die Diskriminante, um den richtigen Fall zu ermitteln.

Kontrolle: Die quadratische Gleichung …

  • $3 x^2 - 6 x - 5 = 0$ hat die zwei Lösungen: $-0.632993$ und $2.63299$
  • $x^2 - 4 x + 4 = 0$ hat eine Lösung: $2$
  • $x^2 + 2 x + 7 = 0$ hat keine Lösung

Lösung

  • gf_informatik/programmieren_ii_sca.txt
  • Zuletzt geändert: 2025-05-27 09:15
  • von sca