Stap 8: Kleur naar het aantal (elif)
Deze stap gebruikt elif, uit And, or en elif.
Alle staven zijn lichtblauw. Een kleur kan meer vertellen: groen is
weinig, oranje is veel, rood is te veel. Er zijn drie kleuren, dus drie
takken. Met elif komt er tussen if en else een tak bij:
waarde = 80
if waarde > 90:
print("rood")
elif waarde > 60:
print("oranje")
else:
print("groen")
Uitvoer:
oranje
Python kijkt van boven naar beneden, en neemt de eerste tak die klopt. 80 is niet meer dan 90, wel meer dan 60: oranje.
Opdracht: rood, oranje of groen
Plak je programma uit stap 7 in het veld. Ben je het kwijt, neem dan de oplossing van stap 7.
Geef staaf een derde parameter kleur, en kies voor elke staaf een
kleur:
- meer dan 90 minuten:
"tomato"(rood); - meer dan 60 minuten:
"orange"; - de rest:
"limegreen".
# Plak hier je programma uit stap 7
Klik hier voor een tip.
In staaf komt kleur op de plek waar nu "skyblue" staat. De kleur
kies je in de loop, vóór je staaf aanroept: bewaar hem in een variabele
kleur, in elke tak een andere. Vergelijk met de minuten, niet met de
hoogte van de staaf.
Klik hier voor de oplossing.
import turtle
minuten = {
"chatten": 65,
"video's": 110,
"gamen": 80,
"muziek": 45,
"foto's": 30,
}
def staaf(x, hoogte, kleur):
turtle.penup()
turtle.goto(x, -100)
turtle.pendown()
turtle.fillcolor(kleur)
turtle.begin_fill()
for zijde in range(2):
turtle.forward(60)
turtle.left(90)
turtle.forward(hoogte)
turtle.left(90)
turtle.end_fill()
def schrijf(x, y, tekst):
turtle.penup()
turtle.goto(x, y)
turtle.write(tekst, align="center")
hoogste = 0
for naam, waarde in minuten.items():
if waarde > hoogste:
hoogste = waarde
plek = -200
for naam, waarde in minuten.items():
hoogte = waarde / hoogste * 200
if waarde > 90:
kleur = "tomato"
elif waarde > 60:
kleur = "orange"
else:
kleur = "limegreen"
staaf(plek, hoogte, kleur)
schrijf(plek + 30, -100 + hoogte + 5, f"{waarde} min")
schrijf(plek + 30, -118, naam)
plek += 80
turtle.hideturtle()
Met de minuten vergelijken is nodig: de hoogte van een staaf hangt af van de hoogste, de minuten niet.
Er gaat iets mis
De staaf van video's is oranje, en er is geen enkele rode staaf.
Oorzaak: je zette waarde > 60 bovenaan, en waarde > 90 bij de
elif. Python neemt de eerste tak die klopt. 110 is meer dan 60, dus
video's wordt oranje, en de tak voor rood komt nooit aan de beurt.
Oplossing: zet de strengste voorwaarde bovenaan: eerst meer dan 90, dan meer dan 60.
Chatten en gamen zijn rood in plaats van oranje.
Oorzaak: je vergeleek met de hoogte van de staaf in plaats van met de
minuten, bijvoorbeeld if hoogte > 90:. Sinds stap 7 is de hoogte geen
aantal minuten meer: chatten is 65 minuten, maar zijn staaf is ongeveer 118
hoog. Dat is meer dan 90, dus rood.
Oplossing: vergelijk in elke tak waarde, het aantal minuten.
Jouw eigen gegevens
Je programma tekent elke dictionary met getallen, hoeveel paren er ook in staan. Verzamel nu je eigen gegevens. Een paar ideeën:
- Hoeveel minuten zat jij deze week per dag op je telefoon? De meeste telefoons houden het bij, bij de instellingen voor schermtijd.
- Wat is de lievelingssnack van je klas? Turf het, en tel per snack.
- Hoeveel stappen zette je deze week per dag?
Dan pas je drie dingen aan:
- Zet je gegevens in de dictionary, in plaats van de minuten. Past de naam
minutener niet meer bij, bijvoorbeeld omdat je stappen telt, verander hem dan overal: waar je de dictionary maakt en in beide loops. - Verander
minin de f-string in jouw eenheid, zoalsstappen. Turf je snacks, dan heb je geen eenheid nodig en haal je het weg. - Kies grenzen voor rood en oranje die bij je getallen passen, of laat de kleuren weg.
Zet er minstens één getal boven 0 in. Zijn alle getallen 0, dan blijft
hoogste 0, en deelt je programma door 0, net als bij de eerste fout in
stap 7.
Verder bouwen
Je diagram werkt. Wil je verder, kies dan iets uit dit lijstje:
- Teken een lijn over de grond, onder alle staven door.
- Zet een titel boven het diagram, bijvoorbeeld
Minuten per dag. - Zijn de staven te smal voor je namen? Maak de breedte van een staaf een parameter, en de afstand tussen de staven een variabele.
- Teken onder het diagram ook het totaal: alle minuten bij elkaar.
- Lees je gegevens uit een bestand, met een regel per staaf, zoals
chatten: 65. Kijk daarvoor in Een tekstbestand lezen en Regels opsplitsen.
Terug naar het overzicht van de projecten.