Tutorial: Steen, papier, schaar

Je hebt je eerste lijnen code in Python geschreven. Het is nu tijd voor een grotere uitdaging. Terecht! In deze tutorial laten we je zien hoe je een steen, papier, schaar spel maakt waarbij je tegen de computer kunt spelen. In deze tutorial kom je een aantal interessante punten tegen. Zo zul je jouw eerste module importeren, een while loop gebruiken en elif-statements toepassen.

Aan de slag met steen, papier, schaar met Python

Laten we bij het begin beginnen. Bij het maken van een script is het belangrijk om eerst de stappen uit te schrijven die je zult doorlopen. Zo dwing je jezelf om door het proces heen te denken. Eerst denken we het spel uit:

  1. Speler 1 (in dit geval wij) moeten een van de drie opties kiezen.
  2. Speler 2 (de computer) moet een van de drie opties kiezen.
  3. De opties moeten door de computer met elkaar vergeleken worden.
  4. Op basis van deze vergelijking moet het script een winnaar kunnen aanwijzen.

Nu we door het spelletje heen zijn gelopen kunnen we bedenken wat we precies gaan gebruiken om dit uit te denken. De zogeheten requirements. Dit ziet er als volgt uit:

  1. Speler 1 (in dit geval wij) moeten een van de drie opties kiezen. – De speler moet een input kunnen leveren aan het script.
  2. Speler 2 (de computer) moet een van de drie opties kiezen. – De computer moet een keuze kunnen maken.
  3. De opties moeten door de computer met elkaar vergeleken worden. – De computer moet de mogelijkheid hebben om de input van spelers 1 en 2 te kunnen vergelijken.
  4. Op basis van deze vergelijking moet het script een winnaar kunnen aanwijzen. – Aan de hand van een set regels (lees: speelregels) moet het spel beoordelen wie er wint. Vervolgens moet hierbij de juiste boodschap (output) geleverd worden.

Nu we weten hoe het spelletje er uitziet en wat het script moet kunnen gaan we aan de slag. Let op dat wanneer je meer ervaring hebt je dit waarschijnlijk niet op deze manier op zult lossen omdat je al een beter idee zult hebben van het totale proces. Maar met dit stappenplan kun je onmogelijk de mist in gaan. Zodra je met de stappen aan de slag gaat. Kopieer de stukken code uit de voorbeelden vooral in je interprator of gebruik Google Colab.

Stap 1: Input

Speler 1 (in dit geval wij) moeten een van de drie opties kiezen. – De speler moet een input kunnen leveren aan het script. Onderstaand stuk code vraagt welke van de drie opties de gebruiker (jij in dit geval) kiest. Eerst wordt de regel ‘Maak je keuze:’ geprint. De input die vervolgens door de gebruiker ingetypt wordt, wordt als string waarde opgeslagen en toegewezen aan de variabele ‘keuze’. Vervolgens gebruiken we de lower() method om de string naar kleine letters om te zetten.

print('Maak je keuze:')
keuze = str(input())
keuze = keuze.lower()

print("Jouw keuze is", keuze)

Stap 2: Laat de computer kiezen

Speler 2 (de computer) moet een van de drie opties kiezen. – De computer moet een keuze kunnen maken. Een computer kan zelf niet zomaar uit een lijst kiezen. Hiervoor moet je de random module gebruiken. Deze module beschikt over verschillende functies. Aan de achterkant van deze module zit een ingebouwd systeem dat de computer een willekeurig getal tussen de 0 en de 1 uit laat kiezen, deze uitslag bepaalt vervolgens welk item er uit een lijst gekozen zal worden.

import random

mogelijkheden = ['steen', 'papier', 'schaar']
computer_keuze = random.choice(mogelijkheden)

print("De keuze van de computer is", computer_keuze)

Stap 3: Vergelijk de uitslagen

Voor het spel gelden de volgende welbekende regels: Papier wint van steen, steen wint van schaar en schaar wint van papier.

Het stuk code hieronder bekijkt of de keuze die de gebruiker als input heeft gekeken ook voorkomt in de lijst met mogelijkheden. Indien dit het geval is wordt de keuze van de gebruiker (speler 1) afgewogen tegenover de keuze van de computer. Heeft de gebruiker een input geleverd die niet overeen komt met een item uit de lijst dan treedt het else deel van de functie in werking en volgt de boodschap ‘Onjuiste keuze, probeer het nog eens.’.

In het eerste kopje wordt gekeken of de gebruiker en de computer dezelfde keuze hebben gemaakt. Wanneer dit het geval is volgt de boodschap ‘Het is gelijkspel’. Hierna worden de mogelijke uitslagen tegenover elkaar gezet met bijbehorende boodschappen met betrekking tot de uitslag. Met een elif-statement meerdere expressies controleren. Het is een variant van de if-statements waarbij je controleert of een expressie aan een conditie voldoet en je vervolgens een bepaalde actie uit laat voeren. In de praktijk komt dit letterlijk neer op: 'Als' Expressie = Waar (of onwaar) dan: 'Voor dit stuk code uit'

if keuze in mogelijkheden:
	if keuze == computer_keuze:
		print('Het is gelijkspel')
	if keuze == 'steen':
		if computer_keuze == 'papier':
			print('Je verliest, helaas!')
		elif computer_keuze == 'schaar':
			print('Je hebt gewonnen!')
	if keuze == 'papier':
		if computer_keuze == 'schaar':
			print('Je verliest, helaas!')
		elif computer_keuze == 'steen':
			print('Je hebt gewonnen!')
	if keuze == 'schaar':
		if computer_keuze == 'steen':
			print('Je verliest, helaas!')
		elif computer_keuze == 'papier':
			print('Je hebt gewonnen!')
	else:
		print('Onjuiste keuze, probeer het nog eens.')

Stap 4: Het eindresultaat

Tot slot dienen we de losse stukken samen te voegen. Dit doen we in een while loop. Zolang deze ‘True’ is (wat in dit script het geval is) kan het script zichzelf blijven herhalen. Dit is een eenvoudige manier om het programma continue zichzelf te laten herhalen. Anders zou je voor ieder potje steen, papier, schaar het script opnieuw moeten opstarten.

import random

while True:
	print('Maak je keuze:')
	keuze = str(input())
	keuze = keuze.lower()

	print("Jouw keuze is", keuze)

	mogelijkheden = ['steen', 'papier', 'schaar']

	computer_keuze = random.choice(mogelijkheden)

	print("De keuze van de computer is", computer_keuze)
	if keuze in mogelijkheden:
		if keuze == computer_keuze:
			print('Het is gelijkspel')
		if keuze == 'steen':
			if computer_keuze == 'papier':
				print('Je verliest, helaas!')
			elif computer_keuze == 'schaar':
				print('Je hebt gewonnen!')
		if keuze == 'papier':
			if computer_keuze == 'schaar':
				print('Je verliest, helaas!')
			elif computer_keuze == 'steen':
				print('Je hebt gewonnen!')
		if keuze == 'schaar':
			if computer_keuze == 'steen':
				print('Je verliest, helaas!')
			elif computer_keuze == 'papier':
				print('Je hebt gewonnen!')
	else:
		print('Onjuiste keuze, probeer het nog eens.')

	print()

Lukt het jou om het spel verder uit te breiden? Voeg bijvoorbeeld dynamiet toe, dynamiet wint van iedereen!