Christmas/Holiday Challenge (sca): Aufgabensammlung

Programmieren Repetitionsdossier

  • Verwende nur die vordefinierten Funktionen, die im Dossier zur Programmierung vorkommen. Alles andere muss selbst programmiert werden. Soll man zum Beispiel die Summe aller Elemente einer Liste berechnen, so mache dies selbst in einer Schleife und verwende nicht die vordefinierte Funktion sum(). Diese Regel gilt auch für Prüfungen.

  • Die Verwendung von repeat ist verboten! Verwende stattdessen while-Schleifen und später auch for-Schleifen.

  • Es werden keine Musterlösungen verteilt. Sende deine Lösungen per Teams an deine Lehrperson, um eine Rückmeldung zu erhalten. Gib in einem Kommentar oberhalb der Aufgabe an, um welche Aufgabe es sich handelt, z.B. # Aufgabe 1.7. Gib weiter an, ob der Code funktioniert, resp. beschreibe den auftretenden Fehler.

  • Die Aufgaben unten können durch weitere ergänzt werden, es lohnt sich also, regelmässig nachzuschauen.

benötigtes Vorwissen:

  • Variablen
  • while-Schleifen
  • if-(elif-)else-Verzweigungen

Bestimme die Summe aller dreistelliger ganzer Zahlen.

Das Resultat muss sein: $494550$

Erzeuge die folgende Figur mit Turtle Graphics. Verwende dazu Schleifen wo möglich.

Pythagoras-Rechner: Die Idee ist, ein Programm zu schreiben, in welches man zwei Seiten von einem rechtwinkligen Dreieck eingeben kann und die dritte mithilfe des Satzes von Pythagoras dann berechnet wird.

Für den Satz vom Pythagoras gibt es zwei Fälle:

  • Fall 1: Beide Katheten gegeben, berechne Hypotenuse
  • Fall 2: Eine Kathete und Hypotenuse gegeben, berechne zweite Kathete

Zuerst soll die Benutzerin gefragt werden, welchen Fall (inkl. kurzer Beschreibung) sie berechnen möchte. Dann wird sie aufgefordert, die entsprechenden Werte für Kathete(n)/Hypotenuse einzugeben. Das Resultat wird berechnet und ausgegeben.

Erzeuge die folgende Figur mit Turtle Graphics. Verwende dazu Schleifen wo möglich.

Der Benutzer wird aufgefordert, eine beliebige dreistellige Zahl einzugeben. Dem Benutzer wird zuerst einmal mitgeteilt ob er überhaupt eine Zahl eingegeben hat. Falls ja, wird weiter mitgeteilt, ob die eingegebene Zahl das Kriterium erfüllt.

Tipp: Mit type(x) kann der Typ einer Variablen (z.B. int oder str) ermittelt werden.

Bestimme das Produkt von allen Zahlen von 50 bis und mit 100.

In der Mathematik (besonders in Wahrscheinlichkeit und Kombinatorik) braucht man oft die Fakultät: $$n! = n \cdot (n-1) \cdot (n-2) \cdot \ldots 2 \cdots 1$$ Einige Beispiele:

  • Fakultät von $3$: $3! = 3 \cdot 2 \cdot 1 = 6$
  • Fakultät von $5$: $5! = 5 \cdot 4 \cdot 3 \cdot 2 \cdot 1 = 120$
  • Fakultät von $1$: $1! = 1$
  • Fakultät von $0$ ist definiert als: $0! = 1$
  • Fakultät von negativen Zahlen ist nicht definiert.

Der Benutzer wird aufgefordert eine Zahl einzugeben. Von dieser Zahl wird die Fakultät berechnet und ausgegeben. Stelle sicher, dass die Spezialfälle ($0,1,$ negative Zahlen) auch korrekt verarbeitet werden.

Erzeuge die folgende Figur mit Turtle Graphics. Verwende dazu Schleifen wo möglich.

  1. Der Benutzer wird aufgefordert, einen String einzugeben, der aus genau 10 Zeichen besteht. Dem Benutzer wird zurückgemeldet, ob der eingegebene String diese Bedingung erfüllt, ob er zu lange oder zu kurz ist. Die Länge eines Strings (z.B. s = "Ich bin ein String") wird mit len(s)bestimmt.

  2. Modifiziere nun den Code so, dass der Benutzer solange aufgefordert wird, einen solchen String einzugeben, bis die Bedingung erfüllt ist.

Lebenstipps: Die Benutzerin wird aufgefordert einzugeben, wie sie sich gerade fühlt auf einer Skala von $0$ (total mies) bis $5$ (sensationell!). Je nach eingegebener Zahl, soll ihr ein anderer Tipp fürs Leben mitgegeben werden.

Zeichne ein Pentagramm.

Zeichne einen Kreis, ohne Funktionen wie rightArc(x,y), leftArc(x,y), leftCircle(x) oder rightCircle(x) zu verwenden. Verwende stattdessen forward(x) und right(x) usw.

Beim Brotbacken (auch Pizza) ist die Hydration des Teigs wichtig, also wie viel Wasser pro Mehl im Teig enthalten ist. Für ein Brot mit $65\%$ Hydration, für welches man $500$g Mehl verwendet, nimmt man also $0.65 \cdot 500\text{g} = 325\text{g}$ Wasser. Schreibe ein Programm, in welchem man aufgefordert wird, die Menge Mehl und die gewünschte Hydration einzugeben. Das Programm gibt einem dann die dafür benötigte Menge Wasser aus.

Berechne die Summe aller dreistelliger Zahlen der Dreierreihe (durch $3$ teilbar).

Tipp: Resultat muss sein: $165150$

Wie viele Zahlen kleiner als $10'000$ gibt es, die durch die (Prim)Zahlen $2,3,5,7$ und $11$ teilbar sind?

Schreibe ein kleines Quiz mit mind. drei Fragen mit je vier Antwortmöglichkeiten. Es ist hier in Ordnung, Copy-Paste anzuwenden. Am Schluss soll der Score ausgegeben werden zusammen mit einer Rückmeldung darüber, wie gut man es gemacht hat.

benötigtes Vorwissen:

  • Vorwissen von „Basic Challenge I“
  • for-Schleifen
  • Funktionen
  • Listen

Christmas-Challenge 2022: ignoriere diese Aufgaben, löse nur welche aus Basic Challenge I

Wandle in while-Schleife um:

for i in range(4,12):
	print(i)

Die Innenwinkelsumme in einem Dreieck ist 180 Grad. Sobald man also zwei Winkel kennt, kann man den dritten berechnen. Definiere eine Funktion innenwinkelsumme(a,b), welcher man zwei Winkel a und b übergibt. Die Funktion bestimmt dann den dritten Winkel und gibt diesen zurück.

Schreibe eine Funktion mul(a,b), welche zwei ganze Zahlen a und b multipliziert und zurückgibt. Als einzige mathematische Operation darf Plus (+) verwendet werden! Die Operation * darfst du also nicht gebrauchen.

Wandle in möglichst kurze for-Schleife (max. 2 Zeilen) um:

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

Schreibe eine Funktion power(a,n), welche a hoch n berechnet und zurückgibt. Dabei darfst du den Hoch-Operator ** nicht gebrauchen:

  • Variante 1 (einfacher): Verwende den Multiplikations-Operator *
  • Variante 2 (anspruchsvoller): Verwende den Additions-Operator +

Schreibe eine Funktion teilbar_durch(a,b), welche zwei ganze Zahlen als Argumente erwartet. Die Funktion gibt True (False) zurück, falls man a (nicht) durch b ohne Rest dividieren kann.

Schreibe eine Funktion celsius_zu_fahrenheit(x), die eine Temperatur in Grad Celsius x in die entsprechende Temperatur in Fahrenheit umwandelt und zurück gibt. Die entsprechende Formel findest du hier: https://de.wikipedia.org/wiki/Grad_Fahrenheit#Umrechnung

Schreibe eine Funktion div_mit_rest(a,b), welche zwei ganze Zahlen a und b ganzzahlig und mit Rest dividiert. Zurückgegeben wird eine Liste mit zwei Elementen: Das erste Element ist das Resultat der Division, das zweite der Rest. Als einzige mathematische Operationen darf Plus (+) und Minus (-) verwendet werden!

Für div_mit_rest(20,7) erhält man die Liste [2,6] zurück, da 20:7 = 2 Rest 6 ist.

Der Benutzer wird nach einer ganzen Zahl gefragt. Es wird dann eine Liste mit dieser Anzahl an Zufallszahlen gefüllt und ausgegeben.

Schreibe als for-Schleife:

k = 4
while(k < 13):
	print(k)
	k = k+2

Schaffst du es mit nur zwei (oder gar einer) Zeile(n) Code?

  1. Definiere eine Funktion zweierpotenzen(n), welche die ersten n Zweierpotenzen in eine Liste schreibt und zurückgibt. Für zweierpotenzen(5) erhält man [2,4,8,16,32] zurück.

  2. Erhöhter Schwierigkeitsgrad: Definiere nun eine zweite Version dieser Funktion zweierpotenzen_b(n). Hier sollen nun diejenigen Zweierpotenzen in eine Liste geschrieben werden, die kleiner gleich n sind. Für zweierpotenzen(20) erhält man [2,4,8,16] zurück.

Definiere eine Funktion mittelwert(a, b, c, d), der vier Zahlen übergeben wird. Die Funktion soll deren Mittelwert berechnen und zurückgegeben. Übergibt man zum Beispiel vier Schulnoten, so erhält man den Notendurchschnitt zurück. Zeige den Durchschnittswert dann in einem formatierten String an, z.B. „Der Mittelwert ist 4.46“.

Definiere eine Funktion mittelwert(L), welcher eine Liste mit Zahlen übergeben wird. Von diesen Zahlen wird dann der Mittelwert berechnet und zurückgegeben. Übergibt man zum Beispiel eine Liste mit Schulnoten, so erhält man den Notendurchschnitt zurück. Zeige den Durchschnittswert dann in einem formatierten String an, z.B. „Der Mittelwert ist 4.46“.

Definiere eine Funktion anzahl_null(L), welcher eine Liste mit Zahlen übergeben wird. Es wird gezählt, wie oft der Wert 0 darin vorkommt. Diese Anzahl wird zurückgegeben. Für die List [5,0,4,1,2,0,3,0] erhält man 3 zurück.

Schreibe eine Funktion my_max(x,y,z), die von den drei Zahlen, die übergeben werden, die grösste bestimmt und zurückgibt. Verwende keine vordefinierten Funktionen, programmiere selbst.

Einkaufs-Rechner

Du kaufst ein: 6 Eier (je 85 Rp.), 4 Brötchen (je 1.20 Fr.), 1 Flasche Rivella (2.50). Diese Information wird in zwei Listen gespeichert:

anzahl = [6,4,1]
preise = [0.85,1.20,2.50]

Schreibe eine Funktion shopping_calculator(anz,pri) die berechnet, wieviel der Einkauf kostet. Dieser Wert wird zurückgegeben. Für das obige Beispiel, also mit shopping_calculator([6,4,1],[0.85,1.20,2.50]), soll man das Ergebnis $12.40$ erhalten.

Schreibe eine Funktion fortune_cookie(), die ein Glückskeks-Spruch-Generator ist: Jedesmal wenn die Funktion aufgerufen wird, wird random ein Spruch, der in einer Liste gespeichert wird, ausgegeben. Im Internet gibt es viele Sprüche, die du dafür verwenden kannst: https://examples.yourdictionary.com/articles/funny-fortune-cookie-sayings.html

Schreibe eine Funktion find_42(L) die zählt, wie oft die Zahl $42$ in der Liste L vorkommt und diese Anzahl zurückgibt. Verwende keine vordefinierten Funktionen.

Schreibe eine Funktion split_list(L,x). Diese nimmt eine Liste mit Zahlen, sowie eine einzelne Zahl x entgegen. Die Zahlen in L sollen auf zwei Listen aufgeteilt werden: Die eine Liste soll alle Zahlen aus L, die kleiner gleich x sind beinhalten und die andere Liste alle Zahlen, die grösser sind. Die beiden Listen werden zurückgegeben.

Weitere Umwandlungsaufgaben:

(zählen alle zusammen als eine Aufgabe für einen Tag)

for -> while

Schreibe als while-Schleife:

for i in range(5):
    print(i)
for k in range(2,13):
    print(k)
for j in range(10,50,5):
    print(j)

while -> for

Schreibe als möglichst kurze for-Schleife:

i = 5
while i < 20:
    i = i + 1
    print(i)
i = 5
while i < 20:
    print(i)
    i = i + 3

Definiere eine Funktion product(L), die eine Liste L mit Zahlen entgegennimmt, deren Produkt bestimmt und zurückgibt.

Schreibe eine Funktion is_prime(x), die eine Zahl x entgegennimmt, entscheidet, ob diese Zahl eine Primzahl ist oder nicht und dementsprechend True/False zurückgibt.

Achtung: Diese Funktion hast du bereits einmal programmiert. Programmiere diese Funktion aber neu und ohne den alten Code anzuschauen.

Bestimme die Summe aller Primzahlen $< 1000$. Verwende dazu die Funktion von der Aufgabe oben.

Schreibe eine Funktion list_shift(L,x), der eine Liste mit Zahlen L und eine Zahl x übergeben wird. Die Funktion addiert zu jedem Wert in der Liste die Zahl x. Diese modifizierte Liste wird dann zurückgegeben.

Beispiel: print(list_shift([1,2,3],5)) gibt zurück: [6, 7, 8]

Zeitunterschied: Schreibe eine Funktion time_difference(h1,m1,h2,m2), die zwei Zeiten $h1:m1$ und $h2:m2$, z.B. $13:46$ und $17:42$ entgegennimmt und berechnet, wie viele Zeit zwischen diesen beiden Zeitpunkten liegt und zurückgibt.

benötigtes Vorwissen:

  • Variablen
  • while-Schleifen
  • if-(elif-)else-Verzweigungen

Für einige der Aufgaben lohnt es sich, Funktionen zu kennen und verwenden zu können. Es ist deshalb empfohlen, sich kurz in Funktionen einzuarbeiten, damit diese verwendet werden können.

Für diese Aufgabe lohnt es sich, Funktionen zu verwenden.

Digitale Uhr

Schreibe ein Rezeptprogramm für dein(e) Lieblingsrezepte. Es soll ein cooles Programm mit einigen Features sein, wie es genau aussieht, kannst aber du entscheiden. Einige Ideen:

  • Falls mehrere Rezepte: Am Anfang Rezept auswählen
  • Benutzer gibt Anzahl Personen ein. Massangaben in Rezept werden entsprechend angepasst.
  • Passende Bilder anpassen.

Schreibe ein Quiz-Spiel a la „Wer wird Millionär“. Das Quiz soll viele Fragen (je vier Antwortmöglichkeiten) beinhalten. Denke dir die Fragen selbst aus und/oder suche im Internet nach Listen mit Fragen. Die Fragen sollen dann per Zufall ausgewählt werden. Es soll nicht möglich sein, die gleiche Frage mehrfach zu haben in einem Durchgang. Implementiere mind. eine Art von Joker (z.B. 50/50).

Tipp: Speichere die Fragen und Antworten in Listen, z.B.

questions = ["Wie heisst die Hauptstadt der Schweiz?\na) Zürich\nb) Bern\nc) Genf\nd) Basel", "Wie heisst ..."]
answers   = ["b","d"]

Mit \n fügt man einen Zeilenumbruch ein. Mit questions[6] kannst du auf die siebte Frage aus der Liste zugreifen. Achtung: Man beginnt bei $0$ mit Zählen. Die erste Frage ist also questions[0]. Um zu merken, welche Fragen bereits an der Reihe waren, kannst du eine List machen mit den Nummern der Zahlen, die bereits vorkamen:

questions_asked = [] # leere Liste erzeugen
questions_asked.append(4) # die Zahl 4 der Liste anhänhen

Hast du eine eigene Idee für ein Spiel, welches man mit TurtleGraphics umsetzten könnte? Spreche es mit der Lehrperson im Vorfeld ab.

  • gf_informatik/programmieren_challenge_sca.txt
  • Zuletzt geändert: 2023-12-18 06:29
  • von hof