Stap 6: Een bont bloemenveld (een lijst)
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.
# 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
bloemeen parametergroottevoor 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 vanaantalbloemen 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.