Rochambeau#

Rochambeau, roshambo, Jon Ken Pon of gewoon steen, papier en schaar? Het spel is onder vele namen bekend en er bestaat zelfs een heuse organisatie, de Rock Paper Scissor Association… In deze opgave ga je een programma schrijven om het spel tegen de computer te spelen!

Steen, papier en schaar#

In deze opgave ga je het volgende oefenen:

  • Het schrijven van eigen code door de onderstaande code aan te passen en uit te breiden

  • Werken met invoer en uitvoer van tekst in Python

  • Het maken van keuzes (op basis van de invoer van een gebruiker, jij!)

De regels#

RPS-3

Bij steen, papier en schaar gaan twee spelers eerst aftellen en vormen daarna tegelijkertijd met de hand een steen (een vuist), een schaar (twee uitgestoken vingers) of papier (een vlakke hand). Hierbij verslaat de steen de schaar, de schaar het papier en het papier de steen. Indien beide spelers dezelfde keuze maken wint geen van beide.

Een begin#

from random import choice # import the function choice from the module named random

# Play a game of rock-paper-scissors in Dutch

user = input("Kies een wapen (steen, papier of schaar): ")
comp = choice(["steen", "papier", "schaar"])

print("De gebruiker (jij) koos", user)
print("De computer (ik) koos", comp)

if user == "steen":
    print("Haha! Eigenlijk koos ik papier! IK HEB GEWONNEN!")

print("Hopelijk heb je de volgende keer meer geluk...")

En verder!#

Werk de code nu verder uit tot een volledig programma dat:

  • Een gebruiker uitnodigt het spel steen, papier en schaar te spelen

  • De gebruiker uit minstens drie opties laat kiezen

    • dit hoeft niet steen, papier of schaar te zijn, je mag andere wapens kiezen!

    • maar jouw programma moet wel steeds anders reageren op basis van de drie mogelijke opties die de gebruiker kan invoeren (althans, minimaal drie opties)

  • Het spel eerlijk speelt

    • maar je mag het spel ook zo maken dat de speler altijd wint (of verliest)

  • De keuze van de speler afdrukt (print)

    • je mag aannemen dat de gebruiker de keuze foutloos typt, dus altijd één van de mogelijke opties

  • Afdrukt welke keuze het zelf heeft gemaakt uit de mogelijke opties (eerlijk of niet)

  • Afdrukt wie het spel heeft gewonnen (of een gelijkspel, of een andere uitkomst)

Opgave#

We hebben de begincode hier alvast gekopiëerd indien je dit notebook wilt gebruiken om de opgave uit te werken (bijvoorbeeld in Google Colab). Maak je een fout of wil je opnieuw beginnen dan kan je altijd de bovenstaande code kopiëren en hier weer plakken.

from random import choice # import the function choice from the module named random

# Play a game of rock-paper-scissors in Dutch

user = input("Kies een wapen (steen, papier of schaar): ")
comp = choice(["steen", "papier", "schaar"])

print("De gebruiker (jij) koos", user)
print("De computer (ik) koos", comp)

if user == "steen":
    print("Haha! Eigenlijk koos ik papier! IK HEB GEWONNEN!")

print("Hopelijk heb je de volgende keer meer geluk...")

Extra commentaar

Het toevoegen van extra commentaar (# ...) aan de code is optioneel, maar is aan te raden om aantekeningen in de code te maken voor jezelf (of voor anderen die jouw code gaan lezen!).

Uitbreidingen#

Heb je teveel tijd over? Dan vind je hier een aantal mogelijke uitbreidingen!

RPS-5 (RPSSL)#

RPS Lizard Spock

Sam Kass en Karen Bryla bedachten een uitbreiding van het spel en noemden het steen, papier, schaar, Spock en hagedis (RPSSL). Het werkt volgens hetzelfde principe, maar er komen twee extra wapens bij: een hagedis (voorgesteld door met de hand een kousenpopachtige mond te vormen) en Spock (voorgesteld door de Vulcaanse groet uit de Star Trek reeks te maken). Hierdoor wordt de kans op een gelijkspel kleiner (van 1/3 naar 1/5). In vier afleveringen van de televisiereeks The Big Bang Theory wordt deze uitgebreide variant van het spel vermeld.

De regels van steen, papier, schaar, Spock en hagedis zijn:

  • schaar snijdt papier

  • papier bedekt steen

  • steen plet hagedis

  • hagedis vergiftigt Spock

  • Spock smelt schaar

  • schaar onthoofdt hagedis

  • hagedis eet papier

  • papier weerlegt Spock

  • Spock verdampt steen

  • steen breekt schaar

RPS-25#

Heb je nog meer tijd over? Je zou RPS-25, een superset van steen, papier en schaar kunnen overwegen…

RPS-25

De complexiteit neemt toe maar het probleem blijft hetzelfde!

RPS-101#

Maar als je genoeg tijd hebt voor RPS-101 heb je echt een probleem!

Blijven spelen#

Als je wilt dat je programma blijft spelen, kan je een lus met while True: gebruiken.

We laten twee voorbeelden zien in plaats van een gedetaileerde uitleg:

while True:
    print("Het draait nog steeds...")
    response = input("Nog een keer spelen? ")
    if response == "n":
        break

Hier zie je een andere mogelijkheid, een variant met het gebruik van een variabele running die aangeeft of het spel nog actief is of niet:

running = True
while running:
    response = input("Nog een keer spelen? ")
    if response == 'n':
        running = False

Nogmaals, dit zijn voorbeelden en het is geen probleem als je niet begrijpt wat we hier staat, we komen later uitgebreid terug op het gebruik van lussen (een techniek om handelingen te herhalen)!