Читать книгу Routineaufgaben mit Python automatisieren - Al Sweigart - Страница 81
Ein kurzes Programm: Stein, Schere, Papier
ОглавлениеMit den bisher erlernten Programmiertechniken wollen wir nun das einfache Spiel »Stein, Schere, Papier« umsetzen. Die Ausgabe soll wie folgt aussehen:
ROCK, PAPER, SCISSORS
0 Wins, 0 Losses, 0 Ties
Enter your move: (r)ock (p)aper (s)cissors or (q)uit
p
PAPER versus...
PAPER
It is a tie!
0 Wins, 1 Losses, 1 Ties
Enter your move: (r)ock (p)aper (s)cissors or (q)uit
s
SCISSORS versus...
PAPER
You win!
1 Wins, 1 Losses, 1 Ties
Enter your move: (r)ock (p)aper (s)cissors or (q)uit
q
Geben Sie den folgenden Quellcode in den Dateieditor ein und speichern Sie ihn als rpsGame.py:
import random, sys
print('ROCK, PAPER, SCISSORS')
# Diese Variablen halten die Anzahl der Siege, Niederlagen und
# Unentschieden fest.
wins = 0
losses = 0
ties = 0
while True: # Hauptschleife des Spiels.
print('%s Wins, %s Losses, %s Ties' % (wins, losses, ties))
while True: # Schleife für die Eingabe des Spielers.
print('Enter your move: (r)ock (p)aper (s)cissors or (q)uit')
playerMove = input()
if playerMove == 'q':
sys.exit() # Beendet das Programm.
if playerMove == 'r' or playerMove == 'p' or playerMove == 's':
break # Beendet die Eingabeschleife.
print('Type one of r, p, s, or q.')
# Zeigt die Wahl des Spielers an:
if playerMove == 'r':
print('ROCK versus...')
elif playerMove == 'p':
print('PAPER versus...')
elif playerMove == 's':
print('SCISSORS versus...')
# Zeigt die Wahl des Computers an:
randomNumber = random.randint(1, 3)
if randomNumber == 1:
computerMove = 'r'
print('ROCK')
elif randomNumber == 2:
computerMove = 'p'
print('PAPER')
elif randomNumber == 3:
computerMove = 's'
print('SCISSORS')
# Zeigt und speichert Sieg/Niederlage/Unentschieden:
if playerMove == computerMove:
print('It is a tie!')
ties = ties + 1
elif playerMove == 'r' and computerMove == 's':
print('You win!')
wins = wins + 1
elif playerMove == 'p' and computerMove == 'r':
print('You win!')
wins = wins + 1
elif playerMove == 's' and computerMove == 'p':
print('You win!')
wins = wins + 1
elif playerMove == 'r' and computerMove == 'p':
print('You lose!')
losses = losses + 1
elif playerMove == 'p' and computerMove == 's':
print('You lose!')
losses = losses + 1
elif playerMove == 's' and computerMove == 'r':
print('You lose!')
losses = losses + 1
Sehen wir uns diesen Code nun Zeile für Zeile an:
import random, sys
print('ROCK, PAPER, SCISSORS')
# Diese Variablen halten die Anzahl der Siege, Niederlagen und
# Unentschieden fest.
wins = 0
losses = 0
ties = 0
Als Erstes importieren wir hier die Module random und sys, damit das Programm die Funktionen random.randint() und sys.exit() aufrufen kann. Außerdem richten wir drei Variablen ein, damit sich das Programm merken kann, wie oft der Spieler gewonnen, verloren oder ein Unentschieden erzielt hat.
while True: # Hauptschleife des Spiels.
print('%s Wins, %s Losses, %s Ties' % (wins, losses, ties))
while True: # Schleife für die Eingabe des Spielers.
print('Enter your move: (r)ock (p)aper (s)cissors or (q)uit')
playerMove = input()
if playerMove == 'q':
sys.exit() # Beendet das Programm.
if playerMove == 'r' or playerMove == 'p' or playerMove == 's':
break # Beendet die Eingabeschleife.
print('Type one of r, p, s, or q.')
Hier ist eine while-Schleife in einer anderen while-Schleife verschachtelt. Bei der äußeren handelt es sich um die Hauptschleife des Spiels. Jeder Durchlauf durch diese Schleife stellt eine einzelne Runde des Spiels dar. Die innere Schleife fordert den Spieler zu einer Eingabe auf und wird so lange wiederholt, bis der Spieler r, p, s oder q eingegeben hat, wobei r, p und s für Stein (rock), Papier (paper) und Schere (scissors) stehen und q bedeutet, dass der Benutzer das Spiel beenden will. In letzterem Fall wird sys.exit() aufgerufen und das Programm beendet. Gibt der Spieler r, p oder s ein, verlässt das Programm die Schleife. Anderenfalls fordert es ihn auf, r, p, s oder q einzugeben und kehrt wieder zum Anfang der Schleife zurück.
# Zeigt die Wahl des Spielers an:
if playerMove == 'r':
print('ROCK versus...')
elif playerMove == 'p':
print('PAPER versus...')
elif playerMove == 's':
print('SCISSORS versus...')
Damit wird die Auswahl des Spielers angezeigt.
# Zeigt die Wahl des Computers an:
randomNumber = random.randint(1, 3)
if randomNumber == 1:
computerMove = 'r'
print('ROCK')
elif randomNumber == 2:
computerMove = 'p'
print('PAPER')
elif randomNumber == 3:
computerMove = 's'
print('SCISSORS')
Danach wird der Zug des Computers zufällig ausgewählt. Allerdings gibt random.randint() nur Zahlen aus. Daher wird der zurückgegebene Integerwert 1, 2 oder 3 in der Variablen randomNumber abgelegt und dann auf der Grundlage dieses Wertes der String 'r', 'p' oder 's' in computerMove gespeichert. Anschließend wird die Wahl des Computers angezeigt.
# Zeigt Sieg/Niederlage/Unentschieden an und speichert das Ergebnis:
if playerMove == computerMove:
print('It is a tie!')
ties = ties + 1
elif playerMove == 'r' and computerMove == 's':
print('You win!')
wins = wins + 1
elif playerMove == 'p' and computerMove == 'r':
print('You win!')
wins = wins + 1
elif playerMove == 's' and computerMove == 'p':
print('You win!')
wins = wins + 1
elif playerMove == 'r' and computerMove == 'p':
print('You lose!')
losses = losses + 1
elif playerMove == 'p' and computerMove == 's':
print('You lose!')
losses = losses + 1
elif playerMove == 's' and computerMove == 'r':
print('You lose!')
losses = losses + 1
Abschließend vergleicht das Programm die Strings in playerMove und computerMove und zeigt das Ergebnis auf dem Bildschirm an. Außerdem erhöht es je nach Ausgang den Wert der Variablen wins, losses oder ties. Wenn die Ausführung am Ende angekommen ist, springt sie wieder zurück zum Anfang der Hauptschleife, sodass eine neue Runde beginnen kann.