Ga naar hoofdinhoud

Stap 6: Een bont bloemenveld (een lijst)

info

Deze stap gebruikt een lijst, uit Lijsten.

Een veld met alleen rode bloemen is een veld klaprozen. Voor een bont veld zet je kleuren in een lijst, en laat je de computer er per bloem een uit kiezen. Dat doet random.choice:

import random

kleuren = ["red", "orange", "yellow"]
print(random.choice(kleuren))

choice pakt een willekeurig element uit de lijst. Druk een paar keer op Uitvoeren: soms komt dezelfde kleur twee keer na elkaar, net als bij een dobbelsteen.

import random

kleuren = ["red", "orange", "yellow"]
print(random.choice(kleuren))

Opdracht: jouw bloemenveld​

Plak je programma uit stap 5 in het veld. Ben je het kwijt, neem dan de oplossing van stap 5.

Maak er een bont veld van. Zet minstens vier kleuren in een lijst, en geef elke bloem een willekeurige kleur uit die lijst. Kies je eigen kleuren; het plaatje gebruikt "red", "orange", "yellow", "deeppink", "mediumpurple" en "white".

Jouw veld ziet er anders uit dan het plaatje: andere plekken, en misschien andere kleuren.

Een veld met tien bloemen in rood, oranje, geel, roze, paars en wit, op groene stelen, in een strook gras onder een blauwe lucht

# Plak hier je programma uit stap 5
Klik hier voor een tip.

De lijst hoeft maar één keer te bestaan, dus die zet je boven de loop. De kleur kies je in de loop, net als de plek. Waar nu "red" staat, komt de gekozen kleur.

Klik hier voor de oplossing.
import turtle
import random

def bloem(x, y, kleur, blaadjes):
turtle.penup()
turtle.goto(x, y)
turtle.pendown()
turtle.fillcolor(kleur)
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 steel(x, y, lengte):
turtle.penup()
turtle.goto(x, y)
turtle.pendown()
turtle.pencolor("forestgreen")
turtle.pensize(5)
turtle.goto(x, y + lengte)
turtle.pencolor("black")
turtle.pensize(1)
return y + lengte

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()

kleuren = ["red", "orange", "yellow", "deeppink", "mediumpurple", "white"]

turtle.bgcolor("skyblue")
gras()
for keer in range(10):
x = random.randint(-220, 220)
lengte = random.randint(60, 220)
blaadjes = random.randint(5, 9)
kleur = random.choice(kleuren)
top = steel(x, -180, lengte)
bloem(x, top, kleur, blaadjes)
turtle.hideturtle()

De lijst staat boven de loop: hij hoeft maar één keer te bestaan. De kleur kiest de loop elke keer opnieuw, net als de plek.

Er gaat iets mis​

turtle.TurtleGraphicsError: bad color string: orangeyellow

Oorzaak: er ontbreekt een komma in je lijst, zoals in ["red", "orange" "yellow"]. Twee teksten zonder komma ertussen plakt Python aan elkaar, tot "orangeyellow", en die kleur bestaat niet.

Het gaat pas mis als choice die kapotte kleur kiest. Daarom staan er vaak al een paar bloemen voordat de melding komt, en soms gaat het zelfs helemaal goed: dan kiest de computer bij geen van de tien bloemen de kapotte kleur. Met de zes kleuren van het plaatje en één vergeten komma gebeurt dat ongeveer één keer op de negen. Gaat het één keer goed, dan zegt dat dus nog niet dat je lijst klopt.

Oplossing: zet een komma tussen elke twee kleuren in de lijst.

Verder bouwen​

Je bloemenveld werkt. Wil je verder, kies dan iets uit dit lijstje:

  • Geef bloem een parameter grootte voor de bogen van de blaadjes, en laat de computer ook die kiezen.
  • Laat de stelen niet allemaal op -180 beginnen, maar ergens in het gras. Dan lijken sommige bloemen verder weg te staan.
  • Zet een zon in de lucht met een grote gele stip.
  • Maak een functie veld(aantal) die een veld van aantal bloemen tekent, en probeer een veld van 3 en een van 30.
  • Kies het aantal blaadjes uit een lijst, bijvoorbeeld 5, 8 en 13, in plaats van met randint.

Terug naar het overzicht van de projecten.