Stap 2: Twee bloemen in het gras (een functie)
Deze stap gebruikt functies, uit Functies.
Uit de turtle-lijn komen penup en pendown
(Een huis), goto
(Een dobbelsteen)
en bgcolor (Kleur en dikte).
Een veld heeft meer dan één bloem. Je kunt de regels van je bloem kopiëren, maar dan staat alles dubbel, en bij tien bloemen tien keer. Zet de bloem liever in een functie. Dan teken je hem met één regel, zo vaak als je wilt.
Zo ziet een functie eruit die een gouden stip zet:
import turtle
def hart():
turtle.dot(25, "gold")
hart()
turtle.penup()
turtle.goto(100, 0)
hart()
Alles wat onder def hart(): inspringt, hoort bij de functie. Er gebeurt
pas iets als je hem aanroept. Hier gebeurt dat twee keer, dus zie je twee
stippen.
Opdracht: twee bloemen in het gras
Plak je programma uit stap 1 in het veld. Ben je het kwijt, neem dan de oplossing van stap 1.
Maak een functie bloem() die de bloem uit stap 1 tekent op de plek
waar de schildpad staat. Teken er daarna twee: één met het midden op
(-100, 0) en één op (100, 0). Tussen de bloemen loopt de schildpad
zonder een lijn te trekken.
Zet je bloemen daarna in een landschap:
- Maak de lucht blauw met
turtle.bgcolor("skyblue"). - Schrijf een tweede functie,
gras(), die een rechthoek tekent, ingekleurd met"yellowgreen". De linkerbovenhoek staat op(-300, -160), de rechteronderhoek op(300, -260). Houd de pen omhoog: de schildpad kleurt de rechthoek dan wel in, maar trekt er geen zwarte lijn omheen. - Roep
gras()aan voordat je de bloemen tekent. Wat de schildpad later tekent, ligt bovenop wat er al staat. Nu maakt dat nog niet uit, maar in stap 4 staan je bloemen met hun steel in het gras.
# Plak hier je programma uit stap 1
Klik hier voor een tip.
Alles wat bij één bloem hoort, gaat de functie in: de kleur, de loop en
het hart. De variabele blaadjes mag erboven blijven staan. Onder de
functie loop je met de pen omhoog naar de eerste plek, zet je de pen
weer neer, en roep je bloem aan. Voor de tweede bloem doe je dat nog
een keer.
Het gras teken je zoals het vierkant in
Een dobbelsteen:
met een goto naar elke hoek. Begin in de linkerbovenhoek, en zet
begin_fill en end_fill om de vier goto's heen.
Klik hier voor de oplossing.
import turtle
blaadjes = 8
def bloem():
turtle.fillcolor("pink")
for blad in range(blaadjes):
turtle.begin_fill()
turtle.circle(40, 90)
turtle.left(90)
turtle.circle(40, 90)
turtle.left(90)
turtle.end_fill()
turtle.left(360 / blaadjes)
turtle.dot(25, "gold")
def gras():
turtle.penup()
turtle.goto(-300, -160)
turtle.fillcolor("yellowgreen")
turtle.begin_fill()
turtle.goto(300, -160)
turtle.goto(300, -260)
turtle.goto(-300, -260)
turtle.goto(-300, -160)
turtle.end_fill()
turtle.bgcolor("skyblue")
gras()
turtle.penup()
turtle.goto(-100, 0)
turtle.pendown()
bloem()
turtle.penup()
turtle.goto(100, 0)
turtle.pendown()
bloem()
turtle.hideturtle()
De loop staat nu in de functie, dus de regels van het blaadje springen twee keer in: acht spaties.
Er gaat iets mis
NameError: name 'bloem' is not defined
Oorzaak: je roept bloem() aan boven de regel met def bloem():.
Python leest je programma van boven naar beneden, en kent de functie op
die plek nog niet.
Oplossing: zet de functies bovenaan, direct onder import turtle en
blaadjes = 8, en de aanroepen eronder.
Er staat geen bloem, en er komt ook geen foutmelding.
Oorzaak: je schreef bloem zonder haakjes. Python kent die naam,
dus het geeft geen fout, maar zonder () roep je de functie niet aan.
De schildpad loopt wel naar de plek, maar tekent daar niets.
Oplossing: schrijf bloem(), met haakjes. Dat geldt voor gras()
ook.
Kopieer je programma voordat je verdergaat: de editor bewaart het niet.
Door naar stap 3: elke bloem anders.