Schere-Stein-Papier

image0

Bild von Enzoklop, CC BY-SA 3.0

In diesem Kapitel lernst du:

Bereich

Thema

🚀

ein Schere-Stein-Papier-Spiel programmieren

⚙

Verzweigungen mit if schreiben

⚙

Vergleichsoperatoren benutzen

💡

den Datentyp bool verwenden

🔀

eine Zustandsvariable einsetzen

🐞

Einrückungsfehler erkennen

Ein wichtiges Strukturelement in einem Programm ist das Treffen von Entscheidungen. In Python entscheidet die Anweisung if, welche Anweisung als Nächstes ausgeführt wird.

Aufgabe 1: Entscheidung

Mit der if-Anweisung kannst Du im Programm Entscheidungen treffen.

Teste das folgende Programm mit unterschiedlichen Eingaben:

spieler = input("Bitte gib R, P oder S ein (für Sche[R]e, [S]tein, [P]apier): ")
computer = "P"

if spieler == computer:
    print("Unentschieden")

Aufgabe 2: Alternative Entscheidungen

Füge if, elif und else an den richtigen Stellen ein, damit das Programm funktioniert:

import random

spieler = input("Bitte gib R, P oder S ein (für Sche[R]e, [S]tein, [P]apier): ")
computer = random.choice('RPS')

___ spieler == 'S' and computer == 'P':
    print("Computer gewinnt")
___ spieler == 'R' and computer == 'P':
    print("Spieler gewinnt")
___:
    print("Unentschieden")

Aufgabe 3: Papier

Erweitere das Programm so, dass es auch funktioniert, wenn der Computer Stein wählt.

Aufgabe 4: Debugging

Behebe jeweils einen Fehler in jedem der folgenden Entscheidungsblöcke:

elif spieler.upper() not in 'RPS':
    print('Ungültige Eingabe. Bitte gib R, P oder S ein.')

elif spieler == computer
    print('Du hast das Gleiche gewählt wie ich.')

if spieler = 'R':
    print('Du hast "Schere" gewählt.')

else:
print('Du hast etwas anderes als "Schere" gewählt.')

Aufgabe 5: Wahrheitsausdrücke

Welche der folgenden booleschen Ausdrücke ergeben den Wert True?

a = 3
b = 4
c = 7

print(a + b < c)

print(a + b == 5 + 2)

print(a * b == 12 and b * c == 28)

print(a + b * c >= 28)

print(a + b == "7")

Aufgabe 6: Zustandsvariablen

Das folgende Programm speichert das Ergebnis eines Vergleichs in einer bool-Variablen. Vervollständige den Code:

spieler_gewinnt = (
                 (spieler == "P" and computer == "S")     or
                 (spieler == "S" and ___) or
                 (___)
               )

 if spieler_gewinnt:
     print('Du hast gewonnen!')

Aufgabe 7: Verschachtelte if-Anweisungen

Vervollständige das Programm so, dass es alle möglichen Situationen abdeckt:

winner = 'Unentschieden'

if spieler == "R":
    if computer == "P":
        winner = "Spieler"
    elif computer == "S":
        winner = "Computer"

elif spieler == "P":
    ___

print("Der Gewinner ist:", winner)

Hinweis

Ein verschachteltes if ist ein if innerhalb eines anderen if-Blocks.

Aufgabe 8: Schere-Stein-Papier

Vervollständige das Schere-Stein-Papier-Spiel.

Optionale Ziele:

  • berücksichtige Unentschieden als Möglichkeit

  • sowohl Gross- als auch Kleinbuchstaben sind als Eingabe möglich

  • verwende einen einzigen if..elif..else Block

  • erweitere das Spiel durch [Eidechse und Spock](https://en.wikipedia.org/wiki/Rock_paper_scissors#Additional_weapons)

  • verwende Zustandsvariablen, so dass nur eine oder zwei if-Anweisungen (ohne elif oder else) übrig bleiben

Reflexionsfragen

  • In welcher Reihenfolge müssen die Teile einer if-Anweisung stehen?

  • Welche Teile einer if-Anweisung sind optional?

  • Was ist eine Einrückung?

  • Welche Vergleichsoperatoren kennst du bereits?