← RU Pythoncursus

Teken de galg

Het doel van deze opdracht is het tekenen van de galg die je zou verwachten bij het spel uit de vorige opdracht. Hiervoor gaan we de Turtle graphics weer gebruiken.

  1. Combineer wat je geleerd hebt over turtlegraphics met het spel wat je gemaakt hebt in de vorige opdracht. Ga na waar je precies een stukje moet tekenen. Om je code overzichtelijk te houden is het goed om hier een aparte functie van te maken. Welke informatie heeft deze functie allemaal nodig? Hoe kan je deze functie op een nette manier opschrijven, zodat de galg-tekening leesbaar blijft? Introduceer een schaalfactor zodat je je galg makkelijk van grote kan veranderen. Misschien kan je zelfs variabelen maken voor lengtes die je meerdere keren aflegt, zodat je bij een wijziging maar een getal hoeft te veranderen.

In het algemeen is het een goede gewoonte om de code die je gebruikt voor het weergeven van informatie (zoals het tekenen van de galg) zoveel mogelijk te scheiden van de logica. Dit maakt het makkelijker om later één van de twee aan te passen zonder dat dat de ander sloopt.

Yield

Python heeft een bijzonder keyword dat je in weinig andere talen tegenkomt: yield. Hiermee kan je een functie onderbreken (en eventueel een resultaat opleveren). In tegenstelling tot return kan de functie in een later stadium gewoon weer verder waar 'ie gebleven was. Hoe het technisch precies werkt is op dit moment niet heel belangrijk, maar het kan interessant zijn om het een keer gezien te hebben.

De eerste keer dat je de functie aanroept wordt er een 'generator' gemaakt. Deze moet je opslaan in een variabele. Om vervolgens de functie uit te voeren tot de volgende yield kan je next() uitvoeren op de generator - je geeft de generator dus als argument aan next(). Aannemende dat f een functie is die yields bevat ziet het er bijvoorbeeld als volgt uit. De functie tekenGalg() wordt nu drie keer hervat tot de volgende yield. In dit voorbeeld heet de generator galg.

galg = tekenGalg()
next(galg)
next(galg)
next(galg)
  1. Kan je dit patroon toepassen op je functie voor het tekenen van de galg? Als je dit goed doet hoeft je functie niet eens meer te weten hoeveel pogingen de gebruiker nog heeft; er is helemaal geen argument meer nodig.