Veertig procent achter
In de vorige stap hield je 6 van de 24 stukken fruit achter voor de toets. Bij Shopping houdt CS50 40 procent achter. Hoeveel stukken dat zijn, laat je Python uitrekenen. Daarbij kom je een kommagetal tegen, en een slicing met een variabele in plaats van een vast getal.
Voorspel
aantal = 24 * 0.4
print(aantal)
print(int(aantal))
Wat print dit programma?
Antwoord
9.600000000000001
9
Een kommagetal rekent Python niet altijd precies uit: er staat een klein
foutje helemaal achteraan. int() hakt alles achter de komma eraf, dus dat
foutje maakt niet uit.
Zo werkt het
int() ken je om tekst naar een getal om te zetten. Nieuw is dat hij ook
een kommagetal naar een heel getal omzet: hij hakt de cijfers achter de
komma eraf, zonder af te ronden. int(9.6) is 9.
In de slicing mag een variabele staan: fruit[:aantal] zijn de eerste
aantal stukken, en fruit[aantal:] de rest. Zo werkt dezelfde code voor
een lijst van elke lengte.
Opdracht: veertig procent achter
Bij Shopping houdt CS50 40 procent van de voorbeelden achter voor de toets. Doe dat ook met het fruit:
24 stukken fruit
aantal: 9
oefen: 15
toets: 9
Begin klein, en breid de code stap voor stap uit:
- Draai de code: hij print hoeveel stukken fruit er zijn.
- Reken uit hoeveel stukken 40 procent is, met
aantal = int(len(fruit) * 0.4), en printaantal. - Schud
fruitmet seed 3, zoals in de vorige stap. Zet de eersteaantalstukken intoetsen de rest inoefen, en print hoeveel er in elk zitten.
Tip
In de vorige stap stond het getal 18 in de slicing. Wat zet je daar nu voor in de plaats?
Antwoord
Dit komt onder de print in de editor:
import random
aantal = int(len(fruit) * 0.4)
print("aantal:", aantal)
random.seed(3)
random.shuffle(fruit)
toets = fruit[:aantal]
oefen = fruit[aantal:]
print("oefen:", len(oefen))
print("toets:", len(toets))
aantal: 9
oefen: 15
toets: 9
Bij Shopping staat dat verdelen al in de code die je van CS50 krijgt.
Er gaat iets mis
NameError: name 'random' is not defined. Did you forget to import 'random'?
Oorzaak: random is een module. Python haalt hem pas op als je erom
vraagt.
Oplossing: zet import random bovenaan je code.
# FOUT
getallen = [1, 2, 3]
random.shuffle(getallen)
# GOED
import random
getallen = [1, 2, 3]
random.shuffle(getallen)
Meer uitleg: Modules.
Door naar de score.