Turtles!#

Opdracht 1#

def main():
    """
    Main functie. Roept de andere functies op om hun werk te doen. 
    """
    x = blaat(5) + blaat(3)
    print(x)

def testing():
    """
    Test functie. Hier staan alle assertions om de functies te testen.
    """

def blaat(x):
    l = list(range(x))
    return sum(l)

main()
testing()

a. Wat doet de functie blaat?
b. Wat is de ouput van dit programma?
c. Gebruik de Python Tutor om je antwoord van a en b te controleren.

Opdracht 2#

a. Kopieer onderstaande code over naar een bestand genaamd ‘wk3wc2.py’

import time
from turtle import *
from random import *

def main():
    """
    Main functie. Roept de andere functies op om hun werk te doen. 
    """
    tri()
    done() # tell turtle the drawing is done.

def testing():
    """
    Test functie. Hier staan alle assertions om de functies te testen.
    """

def tri():
    """Draws 100-pixel sides of an equilateral triangle.
    """
    width(5)    # width of the line to draw
    clr = choice(['darkgreen', 'red', 'blue'])  #choose a random color
    color(clr)  # set the color of the line
    shape('turtle') # set the shape of the pencil
    dot(10, 'red')  # set the endpoints of the lines

    forward(100)    #move forward
    left(120)       #turn 120 degrees left 
    forward(100)    #move forward
    left(120)       #turn 120 degrees left 
    forward(100)    #move forward
    left(120)       #turn 120 degrees left 


main()
testing()

b. Draai het programma. Als alles goed gaat wordt er in een nieuw scherm een driehoek getekend.
c. Pas de functie tri() aan zodat het een parameter accepteert dat de lengte van zijdes van de driehoek aangeeft. Vergeet niet de docstring aan te passen.
d. Schrijf de functie sq() dat een vierkant tekent met zijdes van 100 pixels lang. De kleur en dikte van de lijn maakt niet uit. Vergeet niet in de main functie je nieuw functie aan te roepen.
e. Schrijf de functie bril() dat de onderstaande bril maakt. De kleur en dikte van de lijn maakt niet uit. Maak gebruik van je eigen sq() functie. (Neusbrug is 50 px)

turtle glasses

f. Gegeven de functie art()

def art():
    bril()
    forward(100)
    right(90)
    bril()
    forward(100)
    right(90)
    bril()
    forward(100)
    right(90)
    bril()
    forward(100)
    right(90)

Voorspel wat er wordt getekend als deze functie wordt aangeroepen.

g. Gegeven de functie triRec()

def triRec():
    """Draws 100-pixel sides of an equilateral triangle.
    """
    width(5)    # width of the line to draw
    clr = choice(['darkgreen', 'red', 'blue'])  #choose a color
    color(clr)  # set the color of the line
    shape('turtle') # set the shape of the pencil
    dot(10, 'red')  # set the endpoints of the lines

    forward(100)    #move forward
    left(120)       #turn 120 degrees left 
    triRec()

Deze functie roept zichzelf op aan het einde. Voorspel wat er gebeurt als je deze functie zal aanroepen.

h. Voeg de functie toe aan het bestand en pas de main functie aan zodat hij wordt aangeroepen. Check of je voorspelling bij g. juist was.

Opdracht 3#

a. Voorspel wat onderstaande programma zal doen als het uitgevoerd wordt.

def test(n):
    print(n)
    test(n-1)

test(5)

b. Open de Python Tutor en kopieer het programma. Test vervolgens of je voorspelling bij a. juist was door stap voor stap door het programma te lopen.

c. Voorspel wat onderstaande programma zal doen als het uitgevoerd wordt.

def test(n):
    print(n)

    if n == 0:
        return

    test(n-1)

test(5)

d. Herstart de Python Tutor en kopieer het programma. Test vervolgens of je voorspelling bij c. juist was door stap voor stap door het programma te lopen.

In opdracht 3 heb je je eerste recursieve programma geschreven.

Recursie volgens wikipedia:

Google Recursie

Google geeft een goed voorbeeld van oneindige recursie. Hoe vaak ga je op de suggestie (“Bedoelde je: …”) klikken?

Droste cacao

Dit zal waarschijnlijk het meest bekende voorbeeld zijn van een oneindige recursie, ook wel bekend als het Droste effect.

infinite

Ergens moet de recursie stoppen en hebben we iets van een noodstop (of noodzakelijke stop) nodig, het moment dat een recursieve stap niet meer mogelijk is! Dit wordt ook wel de base case genoemd.

In opdracht 3 was de basecase if n == 0 Met andere woorden, als de counter 0 bereikt willen we dat de recursie stopt. De return statement zorgt ervoor dat de functie stopt en dat het dus zichzelf niet meer kan aanroepen.

def test(n):
    print(n)

    if n == 0:
        return

    test(n-1)

test(5)

Opdracht 4#

a. Vervang triRec() in het bestand wk3wc2.py met onderstaande code. Zet in de main functie triRec() (dus zonder parameter) om de functie aan te roepen.

def triRec(n=3):
    """Draws 100-pixel sides of an equilateral triangle.
    """
    if n == 0:
        return

    width(5)    # width of the line to draw
    clr = choice(['darkgreen', 'red', 'blue'])  #choose a color
    color(clr)  # set the color of the line
    shape('turtle') # set the shape of the pencil
    dot(10, 'red')  # set the endpoints of the lines

    forward(100)    #move forward
    left(120)       #turn 120 degrees left 
    triRec(n-1)

De signature triRec(n=3) geeft aan dat als de functie triRec zonder paramater wordt aangereoepen krijgt n automatisch de waarde 3. Als de functie met parameter wordt aangeroepen krijgt n de meegegeven waarden. As er meerdere paramaters zijn dan is volgorde erg belangrijk. Parameters met standaard waarde staan als laatste.

b. Schrijf de functie sqRec(x=4). Deze functie tekent een vierkant met behulp van recursie zoals in de functie triRec(n=3)

Opdracht 5#

Schrijf de functie polygoon(r, n) waarbij r aangeeft hoeveel zijdes er getekend moet worden en n het aantal max_zijdes aangeeft. Bijvoorbeeld polygoon(4, 4) tekent een vierkant en polygoon(4,6) tekent vier zijdes van een 6 hoek. Elke zijde is 50 pixels lang.

TIP: Probeer, plan, programmeer.
Probeer: Wat is de hoekgrootte bij verschillende figuren? Hoeveel graden moet de turtle draaien? Hoe bereken je de hoekgrootte als je enkel de hoeveelheid zijdes weet?
Plan: Welke stappen zijn er nodig voor het tekenen van de polygoon? Wat is de basecase?
Programmeer!