lehrkraefte:snr:informatik:bruehl-2022:auswahl

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
lehrkraefte:snr:informatik:bruehl-2022:auswahl [2022/03/15 08:46]
Olaf Schnürer [Bonusaufgabe, Aufgabe 6]
lehrkraefte:snr:informatik:bruehl-2022:auswahl [2022/03/21 10:25] (current)
Olaf Schnürer [Lösungsvorschläge und Tafelanschriebe]
Line 1: Line 1:
 +~~NOTOC~~
 +
 ===== Lernziele heute ===== ===== Lernziele heute =====
  
Line 4: Line 6:
   * mit anderen Worten: Wir schreiben ein Zeichen- oder Mal-Programm!   * mit anderen Worten: Wir schreiben ein Zeichen- oder Mal-Programm!
   * "Bedingte Ausführung". Was ist ''if''-''else''-Selektion?    * "Bedingte Ausführung". Was ist ''if''-''else''-Selektion? 
- 
- 
- 
- 
- 
  
 ====== if-Selektion (Auswahl, Selektion, if-then-else-Struktur, Verzweigung) ====== ====== if-Selektion (Auswahl, Selektion, if-then-else-Struktur, Verzweigung) ======
Line 93: Line 90:
   * Verwende eine ''repeat''-Schleife und eine ''if''-''else''-Selektion.   * Verwende eine ''repeat''-Schleife und eine ''if''-''else''-Selektion.
  
-<hidden **Bonusaufgaben:** (bitte ausklappen)>+<hidden **Bonusteilaufgaben:** (bitte ausklappen)>
   * Verändere die Strecke ''s'', um die sich die Kröte vorwärts bewegt, zufällig um $+1$ oder $-1$. (Die Turtle akzeptiert auch ''forward(-2)'' und geht dann eben 2 Pixel rückwärts.)   * Verändere die Strecke ''s'', um die sich die Kröte vorwärts bewegt, zufällig um $+1$ oder $-1$. (Die Turtle akzeptiert auch ''forward(-2)'' und geht dann eben 2 Pixel rückwärts.)
   * Sorge dafür, dass ''s'' stets zwischen 0 und 20 liegt.   * Sorge dafür, dass ''s'' stets zwischen 0 und 20 liegt.
Line 113: Line 110:
   * Bonusfrage: Geht dasselbe auch nur mit ''if''?   * Bonusfrage: Geht dasselbe auch nur mit ''if''?
  
-<WRAP left round box 48%>+<WRAP left round box 40%>
 <code python> <code python>
 from gturtle import *       # Die ersten beiden Zeilen dienen nur dazu, dass der Befehl getKeyWait() bekannt ist. from gturtle import *       # Die ersten beiden Zeilen dienen nur dazu, dass der Befehl getKeyWait() bekannt ist.
Line 141: Line 138:
 </code> </code>
 </WRAP> </WRAP>
-<WRAP right round box 48%>+<WRAP right round box 40%>
 <code python> <code python>
 from gturtle import * from gturtle import *
Line 208: Line 205:
 Die erwünschte Lösung verwendet die obige "elegante" ''if''-''elif''-...-''elif''-''else''-Variante der Selektion. Die erwünschte Lösung verwendet die obige "elegante" ''if''-''elif''-...-''elif''-''else''-Variante der Selektion.
  
-<hidden **Bonusaufgaben:** (bitte ausklappen)>+<hidden **Bonusteilaufgaben:** (bitte ausklappen)>
 Erweitere dein Zeichenprogramm! Hier einige Vorschläge: Erweitere dein Zeichenprogramm! Hier einige Vorschläge:
   * Tasten ''r'', ''g'', ''b'', ''w'' verändern die Zeichenfarbe auf Rot, Gelb, Grün und Weiss.   * Tasten ''r'', ''g'', ''b'', ''w'' verändern die Zeichenfarbe auf Rot, Gelb, Grün und Weiss.
Line 246: Line 243:
   * Der Vergleich einer "Text-Variablen" ''s'' mit einer Zeichenkette geht mit ''s == "St. Gallen"'' bzw. mit ''s != "St. Gallen"''. Statt Text-Variable sagt man auch "string"   * Der Vergleich einer "Text-Variablen" ''s'' mit einer Zeichenkette geht mit ''s == "St. Gallen"'' bzw. mit ''s != "St. Gallen"''. Statt Text-Variable sagt man auch "string"
  
-<hidden **Bonusaufgabe:** (bitte ausklappen)>+<hidden **Bonusteilaufgabe:** (bitte ausklappen)>
 Der Benutzer soll nun bei jeder falsch beantworteten Frage zwei weitere Versuche haben. Versuche, dies mit einer ''repeat 3:''-Schleife zu realisieren.  Der Benutzer soll nun bei jeder falsch beantworteten Frage zwei weitere Versuche haben. Versuche, dies mit einer ''repeat 3:''-Schleife zu realisieren. 
  
 Hinweis: Verwende eine Variable, die ''0'' (oder ''False'') ist, wenn die Frage noch nicht richtig beantwortet ist. Sonst wird sie ''1'' (oder ''True''). Hinweis: Verwende eine Variable, die ''0'' (oder ''False'') ist, wenn die Frage noch nicht richtig beantwortet ist. Sonst wird sie ''1'' (oder ''True'').
 +
 +Alternativ geht es auch mit einer ''while''-Schleife.
 </hidden> </hidden>
  
Line 259: Line 258:
 Du hast die Wahl: Du hast die Wahl:
   * Aufgabe 5 oder   * Aufgabe 5 oder
-  * Aufgabe 4 mit mindestens drei der Bonusaufgaben (oder ähnlich schwierigen Sachen deiner Wahl) +  * Aufgabe 4 mit mindestens drei der Bonusteilaufgaben (oder ähnlich schwierigen Sachen deiner Wahl) 
-  * Aufgabe 2 mit mindestens drei der Bonusaufgaben (oder ähnlichen schwierigen Sachen deiner Wahl)+  * Aufgabe 2 mit mindestens drei der Bonusteilaufgaben (oder ähnlichen schwierigen Sachen deiner Wahl) 
 +  * eine der beiden nachfolgenden Bonusaufgaben, also Aufgabe 6 oder Aufgabe 7
  
 <hidden Hier ist der Anfang der Lösung von Aufgabe 4, falls jemand das in der Lektion noch nicht geschafft hatte. Bitte ausklappen.> <hidden Hier ist der Anfang der Lösung von Aufgabe 4, falls jemand das in der Lektion noch nicht geschafft hatte. Bitte ausklappen.>
Line 313: Line 313:
 **Rasenmäher-Schildkröte** **Rasenmäher-Schildkröte**
  
-Lass die Schildkröte so lange geradeaus laufen, bis sie nahe am Rand des Fensters ist. Dann soll sie etwas zurück gehen und sich etwas drehen (dies können feste oder zufällige Werte sein); danach geht wieder von vorne mit der Vorwärtsbewegung weiter.+Lass die Schildkröte so lange geradeaus laufen, bis sie nahe am Rand des Fensters ist. Dann soll sie etwas zurück gehen und sich etwas drehen (dies können feste oder zufällige Werte sein); danach geht es wieder mit der Vorwärtsbewegung weiter etc.
  
 Hinweis:    Hinweis:   
Line 326: Line 326:
  
 Wähle am Anfang einen zufälligen Startwinkel. Lass die Schildkröte geradeaus in diese Richtung laufen, bis sie auf den Rand des Fensters trifft. Dort soll sie wie ein Lichtstrahl bzw. wie eine idealisierte Billardkugel reflektiert werden. Wähle am Anfang einen zufälligen Startwinkel. Lass die Schildkröte geradeaus in diese Richtung laufen, bis sie auf den Rand des Fensters trifft. Dort soll sie wie ein Lichtstrahl bzw. wie eine idealisierte Billardkugel reflektiert werden.
 +
 +Schaffst du es, dass die Billard-Schildkröte bei jeder Reflektion die Zeichenfarbe ändert? Die Farbe kann zufällig oder in einer festgelegten Reihenfolge - etwa rot-grün-blau - geändert werden. 
  
 Hinweise: Neben den Hinweisen bei der vorigen Aufgabe verwende: Hinweise: Neben den Hinweisen bei der vorigen Aufgabe verwende:
Line 381: Line 383:
 </hidden> </hidden>
  
-<hidden Aufgabe 2>+<hidden Aufgabe 2: Zufällige Bewegung>
 {{:lehrkraefte:snr:informatik:bruehl-2022:brownsche-bewegung-flussdiagramm-cropped.jpg?400|Flussdiagramm dazu}} {{:lehrkraefte:snr:informatik:bruehl-2022:brownsche-bewegung-flussdiagramm-cropped.jpg?400|Flussdiagramm dazu}}
 <code python> <code python>
Line 401: Line 403:
 </hidden> </hidden>
  
-<hidden zu ergänzen>+<hidden Aufgabe 3: getKeyWait() und if-elif-...-elif-else kennenlernen> 
 +Das Programm wartet auf einen Tastendruck und speichert diesen in der Variablen ''taste'' und gibt den Wert von ''taste'' aus. Je nach Eingabe wird dann in der verschachtelten ''if''-Struktur entschieden, was ausgegeben wird. 
 + 
 +Der Befehl ''input("...")'' nimmt eine Eingabe (die auch aus mehreren Zeichen bestehen kann) entgegen; die Eingabe muss mit der Return-Taste oder Klicken auf den Ok-Button abgeschlossen werden. 
 +Der Befehl ''getKeyWait()'' wartet auf den nächsten Tastendruck (nur ein Zeichen); die Eingabe wird nicht mit Return o. ä. abgeschlossen. 
 + 
 +Es geht auch nur mit ''if'', z. B. wie folgt. Beachte, dass die letzte ''if''-Selektion deutlich komplizierter geworden ist!
 <code python> <code python>
 +from gturtle import *       # Die ersten beiden Zeilen dienen nur dazu, dass der Befehl getKeyWait() bekannt ist.
 +makeTurtle()                # Ohne sie funktioniert das Programm leider nicht.
 +
 +taste = getKeyWait()          
 +print(taste)
 +
 +if taste == "a":
 +    print("a wie Anna")
 +if taste == "b":
 +    print("b wie Berta")
 +if taste == "c":
 +    print("c wie Caesar")
 +if taste == "d":
 +    print("d wie Daniel")
 +if taste == "e":
 +    print("E wie Emil")
 +if taste != "a" and taste != "b" and taste != "c" and taste != "d" and taste != "e":                 
 +    print("Du hast keine der Tasten a, b, c, d, e gedrückt.")
 +
 +dispose()     # Schliesst das Turtle-Fenster.
 </code> </code>
 +</hidden>
 +
 +<hidden Aufgabe 4: Ferngesteuerte Turtle>
 +<code python>
 +from gturtle import *
 +makeTurtle("black")
 +
 +taste = " "                         # oder irgendetwas anderes ungleich "e"
 +
 +                                    # Die folgende sogenannte "while"-Schleife funktioniert 
 +                                    # ähnlich wie eine repeat-Schleife: Der 
 +                                    # eingerückte Code-Block wird solange wiederholt
 +                                    # ausgeführt, wie die angegebene Bedingung gilt.
 +                                    # englisch WHILE = deutsch SOLANGE  
 +s = 10
 +
 +while taste != "e":  
 +    taste = getKeyWait()
 +
 +    if taste == "i":
 +        forward(s)
 +    elif taste == "j":
 +        left(60)
 +    elif taste == "k":
 +        backward(s)
 +    elif taste == "l":
 +        right(60)
 +    elif taste == "p":
 +        s = s + 1 
 +    elif taste == "m":
 +        s = s - 1
 +    elif taste == "w":
 +        winkel = input("Bitte Winkel eingeben. ")
 +        right(winkel)    
 +    elif taste == "h":
 +        home()
 +    elif taste != "e":
 +        print("Taste ohne Funktion.")
 +
 +dispose()
 +</code>
 +</hidden>
 +
 +<hidden Aufgabe 5: Quiz>
 +<code python>
 +n = 0 # Anzahl korrekter Antworten.
 +
 +a = input("Wie viele Kantone hat die Schweiz?")
 +if a == 26:                                     # Achtung, manche haben hier a == "26" geschrieben. Jedoch: Der Befehl "input" speichert eine Zahleingabe wie 26 als Zahl, nicht als String!
 +    print("Korrekt!")
 +    n = n + 1
 +else:
 +    print("Leider falsch. Die richte Antwort wäre 26 gewesen.")
 +    
 +b = input("Wie viele Einwohner hat die Schweiz ungefähr in Millionen?")
 +if b == 8 or b == 9:
 +    print("Korrekt!")
 +    n = n + 1
 +else:
 +    print("Leider falsch. Die richte Antwort wäre 8 oder 9 gewesen.")
 +
 +c = input("In welcher Stadt sitzt die Schweizer Regierung?")
 +if c == "Bern":
 +    print("Korrekt!")
 +    n = n + 1
 +else:
 +    print("Leider falsch. Die richte Antwort wäre Bern gewesen.")
 +
 +print("Anzahl korrekter Antworten:")
 +print(n)
 +
 +if n > 2: 
 +    print("Sehr gut!")
 +elif n == 0:
 +    print("Sehr schlecht!")
 +</code>
 +    
 +Und hier die Bonus-Variante (die ersten beiden Fragen per ''repeat'', die dritte per ''while'', damit du zwei Möglichkeiten siehst):
 +<code python>
 +n = 0 # Anzahl korrekter Antworten.
 +v = 0 # Anzahl falsche Versuche
 +
 +eingabeStimmt = 0
 +repeat 3:
 +    if eingabeStimmt == 0:
 +        a = input("Wie viele Kantone hat die Schweiz?")
 +        if a == 26:
 +            print("Korrekt!")
 +            n = n + 1
 +            eingabeStimmt = 1
 +        else:
 +            print("Leider falsch.")
 +            v = v + 1
 +if eingabeStimmt == 0:
 +    print("Alle drei Versuche falsch. Die richte Antwort wäre 26 gewesen.")
 +
 +print(20 * "-" + " Neue Frage " + 20 * "-")
 +eingabeStimmt = 0
 +repeat 3:
 +    if eingabeStimmt == 0:
 +        b = input("Wie viele Einwohner hat die Schweiz ungefähr in Millionen?")
 +        if b == 8 or b == 9:
 +            print("Korrekt!")
 +            n = n + 1
 +            eingabeStimmt = 1
 +        else:
 +            print("Leider falsch.")
 +            v = v + 1
 +if eingabeStimmt == 0:
 +    print("Alle drei Versuche falsch. Die richte Antwort wäre 8 oder 9 gewesen.")
 +
 +# Und nun die Variante mit der while-Schleife
 +
 +
 +print(20 * "-" + " Neue Frage " + 20 * "-")
 +nochVersuche = 3 # Anzahl der Versuche, die der Antwortende noch hat.
 +
 +while nochVersuche > 0:
 +    c = input("In welcher Stadt sitzt die Schweizer Regierung?")
 +    nochVersuche = nochVersuche - 1
 +    if c == "Bern":
 +        print("Korrekt!")
 +        n = n + 1
 +        nochVersuche = 0
 +    else:
 +        print("Leider falsch.")
 +        v = v + 1
 +if c != "Bern":
 +    print("Alle drei Versuche falsch. Die richte Antwort wäre Bern gewesen.")
 +
 +
 +print(20 * "-" + " Auswertung " + 20 * "-")
 +print("Anzahl korrekt beantworteter Fragen:")
 +print(n)
 +print("Anzahl Fehlversuche:")
 +print(v)
 +
 +if n == 3 and v == 0: 
 +    print("Sehr gut!")
 +else:
 +    print("Du kannst dich noch steigern!"         
 +</code>    
 </hidden> </hidden>
  
  • lehrkraefte/snr/informatik/bruehl-2022/auswahl.1647330398.txt.gz
  • Last modified: 2022/03/15 08:46
  • by Olaf Schnürer