Ga naar hoofdinhoud

Stap 8: Kleur naar het aantal (elif)

info

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".

Het staafdiagram met vijf staven: video's is rood, chatten en gamen zijn oranje, muziek en foto's zijn groen

# 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:

  1. Zet je gegevens in de dictionary, in plaats van de minuten. Past de naam minuten er niet meer bij, bijvoorbeeld omdat je stappen telt, verander hem dan overal: waar je de dictionary maakt en in beide loops.
  2. Verander min in de f-string in jouw eenheid, zoals stappen. Turf je snacks, dan heb je geen eenheid nodig en haal je het weg.
  3. 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.