Python in de klas – les 4

Het is klaar met spelletjes programmeren! Op naar serieuze natuurkunde. Nee… laten we voorop stellen dat het programmeren van spelletjes absoluut een nuttige bezigheid is. Maar dat is het modelleren van natuurkunde ook!

Deze lessenserie heeft als thema steeds “Kracht en beweging”. In deze les gaan we een (x,t)-diagram maken van eenparige beweging, een beweging dus waarbij de snelheid constant is. We beginnen heel simpel: op tijdstip t = 0 s is x = 0 m en bewegen met een constante snelheid van 2 m/s. Wat we aan het einde van deze les willen maken, is het (x,t)-diagram van deze beweging.

Voor de leraren die deze lessenserie volgen, maar niks (willen) weten van natuurkunde, zou ik willen zeggen: blijf meedoen. Eigenlijk is het voorbeeld van een (x,t)-diagram ook van toepassing op het maken van een willekeurige andere grafiek. De basisprincipes van het programmeren blijven geldig voor andere vakken. Jullie zullen wel voorbeelden moeten bedenken die voor jullie vak van toepassing zijn. Economen kunnen misschien iets doen met vraag- en aanbodlijnen. Wiskundigen kunnen wellicht een lineaire functie plotten. We zijn heel benieuwd naar jullie eigen voorbeelden!

Voordat we grafieken gaan maken, moeten we eerst nog een aantal zaken behandelen. We moeten namelijk lijsten maken van de waardes van x en t. Deze lijsten kunnen we dan gebruiken om het diagram te maken.

Lists (lijsten)

Met een list bedoelen we hier niet iets slims of bedrieglijks. Een list in Python is eigenlijk een lijst. Je maakt een lijst met behulp van vierkante haken en scheid de waarden in de lijst met een komma, als volgt:

names = ['Jan', 'Piet', 'Klaas', 'Karin', 'Anke']

print(names)

numbers = [3, 5, 8, 12, 34]

print(numbers)

De eerste lijst bevat 5 namen, van Jan tot en met Anke. De tweede lijst bevat 5 getallen, namelijk 3, 5, 8, 12 en 34. Handig toch? Nou ja.. wat moet je er eigenlijk mee?

Lijsten zijn in programma’s ontzettend belangrijk. Denk aan een email programma. Je ziet in jouw email programma een lijst met emails. Ja… een lijst. Denk aan Netflix. Je ziet een lijst met films… huh? Alweer een lijst? Ja. Heel vaak worden lijsten ingeladen vanuit een database, en kunnen dan in de code worden gebruikt om de lijst op een bepaalde manier weer te geven, of om er grafieken mee te maken (bijvoorbeeld op een dashboard).

Je kunt een waarde uit de lijst ophalen door middel van vierkante haakjes met daarin de index van die waarde. Je begint met tellen op index = 0.

print(names[1])

print(numbers[2])

De output van deze code is: Piet en 8. De eerste waarde van de lijst met namen is Jan, maar hij heeft index 0. Daarom geeft names[1] de waarde Piet. Piet staat namelijk op index 1 in de lijst. Zo werkt het ook met de lijst nummers.

Lijsten beperken zich niet tot strings en numbers. Je kunt ook verschillende types mixen en zelfs lijsten binnen lijsten maken. Daar gaat je hoofd van draaien, dus laten we het voorlopig maar even simpel houden.

Je kunt strings en numbers aan een lijst toevoegen met de append() methode. De nieuwe waarde komt dan op de laatste plek.

names.append('Harry')

print(names)

numbers.append(7)

print(numbers)

We hebben nu ‘Harry’ aan de lijst met namen toegevoegd, en het getal 7 aan de lijst met getallen.

Je kunt ook dingen verwijderen uit de lijst met de pop() methode. Standaard wordt het laatste element verwijderd, maar je kunt ook een andere index kiezen.

names.pop()

print(names)

numbers.pop(0)

print(numbers)

Probeer eens zelf een lijst te maken, en de lijst ook aan te passen door strings toe te voegen, of te verwijderen!

For loop

Lijsten zijn handig te gebruiken in combinatie met de zogenaamde “for loop”. Dit is een andere loop dan de “while loop” die we in de vorige les hebben gezien, maar komt er wel weer op neer dat we code meerdere keren laten uitvoeren. Laten we een voorbeeld geven:

names = ['Jan', 'Piet', 'Klaas', 'Karin', 'Anke']

for name in names:
  print(name)

Je ziet nu alle namen uitgeprint op een nieuwe regel. Wat gebeurt hier?

Eerst definiëren we een lijst met namen. Dan voeren we een for-loop uit. De syntax is als volgt: for … in …

Na “in” zet je dus de lijst en de code voert zichzelf uit voor hetzelfde aantal keren als de lijst lang is. Lastiger is om te begrijpen wat je na “for” moet zetten. De variabele die je na “for” zet, is in elke nieuwe iteratie weer beschikbaar, en wordt telkens opnieuw gevuld met een nieuwe waarde uit de lijst. Hoe weet je dan welk woord je hier moet zetten? Het is gewoon de naam die je zelf aan deze variabele wilt geven! Ik heb hier gekozen voor het enkelvoud van “names”. Dit klinkt logisch, omdat de variabele “names” een lijst is met meerdere namen, maar in een “for-loop” krijg ik bij iedere iteratie maar 1 naam. Dus noem ik deze variabele “name”.

Lijsten voor het (x,t)-diagram maken

We gaan nu met behulp van onze nieuwste kennis twee lijsten maken. Eén lijst bevat de tijdstippen t = 0, 1, 2, … 10 seconden. En met behulp van die lijst met tijdstippen gaan we een lijst maken voor de posities x op die tijdstippen. Dat doen we met een for-loop.

# list of times from 0 to 10 seconds
times = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# list with positions x is empty at the start
positions = []

# v is velocity is 2 m/s
v = 2 

for t in times:
  x = v * t
  positions.append(x)

print(positions)

Laten we rustig naar deze code kijken. We maken eerst een lijst met tijdstippen van 0 t/m 10 (seconden). Daarna maken we alvast een lege lijst voor de posities x. Deze lijst gaan we daarna vullen. We definiëren de variabele v om de snelheid in op te slaan. Herinner je dat ons doel is om het (x,t)-diagram te maken voor een eenparige beweging met een constante snelheid van 2 m/s.

We beginnen daarna de for-loop. De variabele die we telkens beschikbaar maken in iedere iteratie van de loop noemen we “t”. Dit hoeft niet, maar het is wel fijn als we de formule eronder zien. We berekenen hier de positie x met behulp van v * t. Daarna voegen we deze nieuwe waarde toe aan de lijst met posities.

Als we de lijst “positions” uitprinten dan zien we: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]. Het lijkt erop dat het helemaal is gelukt! Deze posities komen overeen met de beweging die we willen plotten.

Diagram maken

Het diagram maken we met behulp van Matplotlib. Dit is een Python package waarmee we grafieken kunnen tekenen.

import matplotlib.pyplot as plt

# list of times from 0 to 10 seconds
times = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# list with positions x is empty at the start
positions = []

# v is velocity is 2 m/s
v = 2 

for t in times:
  x = v * t
  positions.append(x)

# use matplotlib to plot time versus position
plt.plot(times, positions)

# add some labels and a title to the chart
plt.xlabel('t (s)')
plt.ylabel('x (m)')
plt.title("(x,t)-diagram")

Eerst importeren we een gedeelte van matplotlib, namelijk pyplot. Het woordje “as” geeft al deze functionaliteit een andere naam. We hebben twee lijsten gemaakt (zie hierboven), en kunnen deze lijsten nu plotten met behulp van de “plot” functie van matplotlib. In deze functie zet je eerst de lijst die op de x-as komt en daarna de lijst die op de y-as komt. Deze lijsten moeten wel hetzelfde aantal elementen bevatten! De ene lijst kan dus niet langer zijn dan de andere.

De laatste drie regels code voegen labels toe aan de x- en y-as en plaatsen ook een titel boven de grafiek. En… voilà! We hebben nu een prachtig (x,t)-diagram gemaakt van deze beweging.

Deel

About the author

Roeland is the HandiHow company owner and lead education developer.

Laat een antwoord achter

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Geïnteresseerd?

Neem contact op met HandiHow voor een vrijblijvend oriënterend gesprek.

nl_NLNederlands