14g Objecten in een lijst
Eén hond is leuk, maar een asiel heeft er tientallen. Objecten kun je net als getallen en teksten in een lijst stoppen, en er met een for-loop doorheen lopen.
Een lijst met objecten
class Hond:
def __init__(self, naam, leeftijd):
self.naam = naam
self.leeftijd = leeftijd
def blaf(self):
print(f"{self.naam} zegt: Woef!")
honden = [Hond("Rex", 3), Hond("Bello", 7), Hond("Max", 1)]
for hond in honden:
hond.blaf()
Uitvoer:
Rex zegt: Woef!
Bello zegt: Woef!
Max zegt: Woef!
Elke ronde is hond één object uit de lijst, met zijn eigen attributen en
methoden.
Zoeken in een lijst objecten
Zoeken gaat zoals je in les 11c zocht naar het hoogste gemiddelde: houd de beste tot nu toe bij, en vergelijk via de attributen.
class Hond:
def __init__(self, naam, leeftijd):
self.naam = naam
self.leeftijd = leeftijd
honden = [Hond("Rex", 3), Hond("Bello", 7), Hond("Max", 1)]
oudste = honden[0]
for hond in honden:
if hond.leeftijd > oudste.leeftijd:
oudste = hond
print(f"De oudste hond is {oudste.naam}.")
Uitvoer:
De oudste hond is Bello.
oudste is geen kopie, maar hetzelfde object als in de lijst. Verander je
oudste.naam, dan verandert de hond in de lijst mee.
Er gaat iets mis
Een attribuut van de lijst vragen in plaats van van een object
class Hond:
def __init__(self, naam):
self.naam = naam
honden = [Hond("Rex"), Hond("Bello")]
print(honden.naam)
Uitvoer:
AttributeError: 'list' object has no attribute 'naam'
honden is een lijst, en een lijst heeft geen naam. Neem eerst één hond,
honden[0].naam, of loop erdoorheen.
Opdracht 14g.1: Het dikste boek
Gegeven is een lijst met boeken. Print de titel van het boek met de meeste bladzijden.
Verwachte uitvoer:
Het dikste boek is Koning van Katoren (440 blz.)
class Boek:
def __init__(self, titel, bladzijden):
self.titel = titel
self.bladzijden = bladzijden
boeken = [
Boek("De Hobbit", 320),
Boek("Koning van Katoren", 440),
Boek("Matilda", 240),
]
# Schrijf hier je codeKlik hier voor een tip.
Begin met dikste = boeken[0] en vergelijk in de loop
boek.bladzijden met dikste.bladzijden.
Klik hier voor de oplossing.
class Boek:
def __init__(self, titel, bladzijden):
self.titel = titel
self.bladzijden = bladzijden
boeken = [
Boek("De Hobbit", 320),
Boek("Koning van Katoren", 440),
Boek("Matilda", 240),
]
dikste = boeken[0]
for boek in boeken:
if boek.bladzijden > dikste.bladzijden:
dikste = boek
print(f"Het dikste boek is {dikste.titel} ({dikste.bladzijden} blz.)")
Uitvoer:
Het dikste boek is Koning van Katoren (440 blz.)
Opdracht 14g.2: Jonge honden tellen
Tel hoeveel honden in de lijst jonger zijn dan 5 jaar.
Verwachte uitvoer:
2 honden zijn jonger dan 5.
class Hond:
def __init__(self, naam, leeftijd):
self.naam = naam
self.leeftijd = leeftijd
honden = [Hond("Rex", 3), Hond("Bello", 7), Hond("Max", 1)]
aantal = 0
# Schrijf hier je loop
print(f"{aantal} honden zijn jonger dan 5.")Klik hier voor een tip.
Het lijkt op het zoeken naar de oudste hond hierboven: een loop over de
lijst, met een if erin. Alleen onthoud je nu geen hond, maar tel je.
Klik hier voor de oplossing.
class Hond:
def __init__(self, naam, leeftijd):
self.naam = naam
self.leeftijd = leeftijd
honden = [Hond("Rex", 3), Hond("Bello", 7), Hond("Max", 1)]
aantal = 0
for hond in honden:
if hond.leeftijd < 5:
aantal += 1
print(f"{aantal} honden zijn jonger dan 5.")
Uitvoer:
2 honden zijn jonger dan 5.