Bij oefening 4.11 heb je waarschijnlijk gebruik gemaakt van 3 lijsten:
Een lijst die het conditiepeil weergeeft.
Een lijst met de minimumafstand dat mannen moeten lopen.
Een lijst met de minimumafstand dat vrouwen moeten lopen.
Het aantal lijsten dat je hier nodig hebt is nog beperkt.
Moeten we echter een script schrijven om met de coopertest de conditie van mannen, tussen 20 en 90 jaar te bepalen dan zouden we krijgen we een veel verschillende lijsten.
conditie = ["zeer zwak","zwak","matig","voldoende","ruim voldoende","goed"]
m20 = [0, 1919, 2157, 2334, 2479, 2656]
m30 = [0, 1884, 2077, 2238, 2398, 2591]
m40 = [0, 1884, 2077, 2238, 2398, 2591]
m50 = [0, 1626, 1851, 2012, 2141, 2334]
m60 = [0, 1433, 1690, 1851, 1996, 2205]
m70 = [0, 1272, 1521, 1666, 1794, 1986]
m80 = [0, 1000, 1233, 1349, 1451, 1603]
Het script wordt zo al snel complex.
Een oplossing is om een lijst van lijsten te maken.
cooper = [m20, m30, m40, m50, m60, m70, m80]
Met een index kan je de verschillende lijsten selecteren. Zo geeft cooper[2] de lijst met index 2 (derde lijst, dus m40) en cooper[3] de lijst met index 3 (= m50)
Hieronder wordt dit nog een grafisch voorgestel (zwart voor cooper[2][5], rood voor cooper[3][1]).
Je merkt dat je een geneste lijst (met 2 indexen) kan je voorstellen als een tabel, of omgekeerd… heb je een tabel met gegevens, dan kan je die in Python ingeven als een (tweedimensionale) geneste lijst, een lijst met 2 indexen.
Hieronder zie je een script waarmee je de conditie bepaald van een man in de leeftijdscategorie van 20 to 89 jaar met de coopertest.
#conditie coopertest
#lijsten aanmaken
conditie = ["zeer zwak","zwak","matig","voldoende","ruim voldoende","goed"]
m20 = [0, 1919, 2157, 2334, 2479, 2656]
m30 = [0, 1884, 2077, 2238, 2398, 2591]
m40 = [0, 1884, 2077, 2238, 2398, 2591]
m50 = [0, 1626, 1851, 2012, 2141, 2334]
m60 = [0, 1433, 1690, 1851, 1996, 2205]
m70 = [0, 1272, 1521, 1666, 1794, 1986]
m80 = [0, 1000, 1233, 1349, 1451, 1603]
cooper = [m20,m30,m40,m50,m60,m70,m80]
# ingeven data
print("Conditie bepaling met Cooper test")
print()
leeftijd = int(input("Leeftijd: "))
afstand = int(input("Afstand: "))
# lijst met leeftijd bepalen
leeftijd_index = int((leeftijd-20)/10)
tel = 5
while cooper[leeftijd_index][tel]>afstand:
tel = tel -1
print("De conditie van de persoon is",conditie[tel])
Opmerking
Je kan ook de geneste lijst rechtstreeks ingeven:
cooper = [[0, 1919, 2157, 2334, 2479, 2656],[0, 1884, 2077, 2238, 2398, 2591],[0, 1884, 2077, 2238, 2398, 2591],[0, 1626, 1851, 2012, 2141, 2334],[0, 1433, 1690, 1851, 1996, 2205],[0, 1272, 1521, 1666, 1794, 1986],[0, 1000, 1233, 1349, 1451, 1603]]
Omdat hier de structuur van de lijst minder zichtbaar is hebben we dit om didactische redenen in het voorbeeld niet gedaan.
In het vorige voorbeeld hebben we eerst de verschillende lijsten apart aangemaakt. Dit is niet noodzakelijk.
Je kan ook rechtstreeks een geneste lijst toewijzen aan een variabele.
Onderstaande tabel geeft de bestelling weer van 2 mensen voor een BBQ.
In het vorige voorbeeld hebben we gezien dat we deze kunnen voorstellen in Python als een geneste lus. We gaan deze keer niet eerst aparte lijsten opstellen voor elke persoon, maar geven deze rechtstreeks in als een geneste lus.
Wanneer je geen fout maakt tegen de syntax, dan gaat Python geen foutmelding geven.
Python is enorm flexibel met lijsten. Hoewel bbq een geneste lijst is, maakt Python geen probleem met onderstaande code:
Geneste lijsten beheersbaar houden, vraagt dus van de programmeur wel discipline. Tracht de lengte van de (deel)lijsten gelijk te houden.
Opdracht 4.8
Met welke bewerking kan ik de bbq lijst uitbreiden met de gegevens van An (zie onderstaande tabel)
Mogelijkheid 1:
bbq = bbq + ["An", 2, 1, 0, 0]
Mogelijkheid 2:
bbq = bbq + [["An", 2, 1, 0, 0]]
Controleer je antwoord.