2.5.3 Programmeren met klasse

class Spotify:
    def __init__(self,liedjes):
        self.afspeellijst = liedjes
        self.huidige_index = 0
        self.huidig_liedje = liedjes[self.huidige_index]

jamals_liedjes = ['Hollaback Girl', 'Summer Love', 'Teenage Dream', 'Smack That']
jamals_lijst = Spotify(jamals_liedjes)
print('Het huidige liedje is', jamals_lijst.huidig_liedje)

2.5.4 Een interactie aan je klasse toevoegen

class Spotify:
    def __init__(self,liedjes):
        self.afspeellijst = liedjes
        self.huidige_index = 0
        self.huidig_liedje = liedjes[self.huidige_index]

    def volgende(self):
        volgende_index = self.huidige_index + 1
        # controleer of de hele lijst doorlopen is
        if volgende_index == len(self.afspeellijst):
            # als de hele lijst doorlopen is, begin je terug van vooraf aan
            self.huidige_index = 0
        else:
            # als de hele lijst nog niet doorlopen is, dan wordt de huidige index een cijfertje hoger
            self.huidige_index = volgende_index
        self.huidig_liedje = self.afspeellijst[self.huidige_index]

louises_liedjes = ['Sk8er Boi','Allemaal','Piano Man','Sultans of Swing','Dancing Queen','Jailhouse Rock']
louises_lijst = Spotify(louises_liedjes)

print('Eerst luisterde Louise naar', louises_lijst.huidig_liedje)

louises_lijst.volgende()
louises_lijst.volgende()
louises_lijst.volgende()
louises_lijst.volgende()

print('Het huidige liedje is', louises_lijst.huidig_liedje)

2.5.5 Bonus: En nu echt zelf een interactie aan je klasse toevoegen

class Spotify:
    def __init__(self,liedjes):
        self.afspeellijst = liedjes
        self.huidige_index = 0
        self.huidig_liedje = liedjes[self.huidige_index]

    def volgende(self):
        volgende_index = self.huidige_index + 1
        # controleer of de hele lijst doorlopen is
        if volgende_index == len(self.afspeellijst):
            # als de hele lijst doorlopen is, begin je terug van vooraf aan
            self.huidige_index = 0
        else:
            # als de hele lijst nog niet doorlopen is, dan wordt de huidige index een cijfertje hoger
            self.huidige_index = volgende_index
        self.huidig_liedje = self.afspeellijst[self.huidige_index]

    def vorige(self):
        if self.huidige_index == 0:
            self.huidige_index = len(self.afspeellijst) - 1
        else:
            self.huidige_index -= 1
        self.huidig_liedje = self.afspeellijst[self.huidige_index]

louises_liedjes = ['Sk8er Boi','Allemaal','Piano Man','Sultans of Swing','Dancing Queen','Jailhouse Rock']
louises_lijst = Spotify(louises_liedjes)

louises_lijst.vorige()
louises_lijst.vorige()

print('Het huidige liedje is', louises_lijst.huidig_liedje)

2.5.6 Klassen uitgelegd

class Huisdier:

    def __init__(self, naam):
        self.naam = naam

# Dit hoort niet meer bij de klasse.
mijn_dier = Huisdier("Fluffy")
print(mijn_dier.naam)

2.5.8 Porsche

class Porsche:

    def __init__(self, uitstoot, topsnelheid, model):
        self.uitstoot = uitstoot
        self.topsnelheid = topsnelheid
        self.model = model

    def print_specificaties(self):
        print("De Porsche heeft een topsnelheid van", self.topsnelheid, "km/h en een uitstoot van", self.uitstoot, "g/km.")

    def print_model(self):
        print("Het model van de Porsche is", self.model)

2.5.9 Blaffende honden bijten niet

class Hond:
    def __init__(self, naam, ras):
        self.naam = naam
        self.ras = ras

    def blaf(self):
        print('Woef! Mijn naam is', self.naam)
    
    def bijt(self):
        print('Ik bijt niet!')

    def ras_hond(self):
        print('Ik ben een', self.ras)

2.5.10 Liedjes liken

class Spotify:
    def __init__(self,liedjes):
        self.afspeellijst = liedjes
        self.huidige_index = 0
        self.huidig_liedje = liedjes[self.huidige_index]

    def volgende(self):
        volgende_index = self.huidige_index + 1
        # controleer of de hele lijst doorlopen is
        if volgende_index == len(self.afspeellijst):
            # als de hele lijst doorlopen is, begin je terug van vooraf aan
            self.huidige_index = 0
        else:
            # als de hele lijst nog niet doorlopen is, dan wordt de huidige index een cijfertje hoger
            self.huidige_index = volgende_index
        self.huidig_liedje = self.afspeellijst[self.huidige_index]

    def like(self, liedje):
        self.afspeellijst.append(liedje)

    def print_afspeellijst(self):
        for liedje in self.afspeellijst:
            print(liedje)

2.5.11 Liedjes beter liken

class Spotify:
    def __init__(self,liedjes):
        self.afspeellijst = liedjes
        self.huidige_index = 0
        self.huidig_liedje = liedjes[self.huidige_index]

    def volgende(self):
        volgende_index = self.huidige_index + 1
        # controleer of de hele lijst doorlopen is
        if volgende_index == len(self.afspeellijst):
            # als de hele lijst doorlopen is, begin je terug van vooraf aan
            self.huidige_index = 0
        else:
            # als de hele lijst nog niet doorlopen is, dan wordt de huidige index een cijfertje hoger
            self.huidige_index = volgende_index
        self.huidig_liedje = self.afspeellijst[self.huidige_index]

    def like(self, liedje):
        if liedje not in self.afspeellijst:
            self.afspeellijst.append(liedje)

    def print_afspeellijst(self):
        for liedje in self.afspeellijst:
            print(liedje)

2.5.12 Objecten

class Spotify:
    def __init__(self,liedjes):
        self.afspeellijst = liedjes
        self.huidige_index = 0
        self.huidig_liedje = liedjes[self.huidige_index]

    def volgende(self):
        volgende_index = self.huidige_index + 1
        # controleer of de hele lijst doorlopen is
        if volgende_index == len(self.afspeellijst):
            # als de hele lijst doorlopen is, begin je terug van vooraf aan
            self.huidige_index = 0
        else:
            # als de hele lijst nog niet doorlopen is, dan wordt de huidige index een cijfertje hoger
            self.huidige_index = volgende_index
        self.huidig_liedje = self.afspeellijst[self.huidige_index]

alyas_liedjes = ['Rolling in the Deep', 'Shallow', 'Easy on Me', 'Someone Like You']
alyas_lijst = Spotify(alyas_liedjes)
print(alyas_lijst.huidig_liedje)
alyas_lijst.volgende()
print(alyas_lijst.huidig_liedje)

2.5.14 Speelkaarten

class Speelkaart:
    def __init__(self, soort, waarde):
        self.soort = soort # zet het attribuut soort op de waarde van de parameter soort.
        self.waarde = waarde

    def info(self):
        return self.soort + ' ' + str(self.waarde)

2.5.15 Klaveren 2, de slechtse kaart

class Speelkaart:

    def __init__(self, soort, waarde):
        toegelaten_soorten = ['schoppen', 'harten', 'ruiten', 'klaveren']
        toegelaten_waardes = list(range(1, 11)) + ['boer', 'dame', 'heer']

        if soort in toegelaten_soorten and waarde in toegelaten_waardes:
            self.soort = soort
            self.waarde = waarde
        else:
            self.soort = 'klaveren'
            self.waarde = 2

    def info(self):
        return self.soort + ' ' + str(self.waarde)

2.5.16 Trouwplanner

class Gastenlijst:

    def __init__(self):
        self.gasten = []

    def voeg_toe(self, gast):
        if gast not in self.gasten:
            self.gasten.append(gast)

    def verontschuldig(self, gast):
        if gast in self.gasten:
            self.gasten.remove(gast)

    def aantal_gasten(self):
        return len(self.gasten)


lijst = Gastenlijst()

lijst.voeg_toe('Josianne')
lijst.voeg_toe('Pierre')
lijst.voeg_toe('Nele')
lijst.verontschuldig('Jef')  # staat niet op de lijst, dus niets verandert
lijst.verontschuldig('Nele')

print("Er komen momenteel", lijst.aantal_gasten(), "gasten.")

2.5.17 Pukkelpop

class Gastenlijst:

    def __init__(self):
        self.gasten = []

    def voeg_toe(self, gast):
        if gast not in self.gasten:
            self.gasten.append(gast)

    def verontschuldig(self, gast):
        if gast in self.gasten:
            self.gasten.remove(gast)

    def aantal_gasten(self):
        return len(self.gasten)


pkp = Gastenlijst()

pkp.voeg_toe('Karel')
pkp.voeg_toe('Riyaan')
pkp.voeg_toe('Lasse')

pkp.voeg_toe('Ansje')
pkp.voeg_toe('Lara')

print("Er zijn", pkp.aantal_gasten(), "gasten aanwezig.")

pkp.verontschuldig('Ansje')
pkp.verontschuldig('Lara')

pkp.voeg_toe('Lara')
pkp.voeg_toe('Minnie')

2.5.18 Klantenkaartensysteem

class Klantenkaart:
    def __init__(self, kruisje, gratis):
        self.kruisje = kruisje
        self.gratis = gratis
        self._kruisjes = 0

    def koop(self, bedrag):
        nieuwe_kruisjes = int(bedrag // self.kruisje)
        self._kruisjes += nieuwe_kruisjes
        while self._kruisjes >= self.gratis:
            print("Proficiat! Je krijgt een gratis product!")
            self._kruisjes -= self.gratis

    def kruisjes(self):
        print("Je hebt momenteel", self._kruisjes, "kruisjes.")

2.5.19 Klantenkaarten van Hassan en van Izmir

class Klantenkaart:
    def __init__(self, kruisje, gratis):
        self.kruisje = kruisje
        self.gratis = gratis
        self._kruisjes = 0

    def koop(self, bedrag):
        nieuwe_kruisjes = int(bedrag / self.kruisje)
        self._kruisjes += nieuwe_kruisjes
        while self._kruisjes >= self.gratis:
            print("Proficiat! Je krijgt een gratis product!")
            self._kruisjes -= self.gratis

    def kruisjes(self):
        print("Je hebt momenteel", self._kruisjes, "kruisjes.")

# Situatie 1
joni_kaart = Klantenkaart(5, 10)

joni_kaart.koop(23.40)   # 4 kruisjes
joni_kaart.koop(13.20)   # 2 kruisjes => totaal: 6
joni_kaart.koop(17.50)   # 3 kruisjes => totaal: 9
joni_kaart.kruisjes()    # Print: 9 kruisjes
joni_kaart.koop(26.00)   # 5 kruisjes => totaal: 14 => 1 gratis, 4 over
joni_kaart.kruisjes()    # Print: 4 kruisjes

# Situatie 2
nero_kaart = Klantenkaart(5, 10)

nero_kaart.koop(155)
nero_kaart.kruisjes()

# Situatie 3
ivana_kaart = Klantenkaart(3, 20)
ivana_kaart.koop(29.50)
ivana_kaart.koop(17.80)
ivana_kaart.kruisjes()
ivana_kaart.koop(17.80)
ivana_kaart.kruisjes()

2.5.20 Klantenkaarten van bakker Cindy

class Klantenkaart:
    def __init__(self, kruisje, gratis):
        self.kruisje = kruisje
        self.gratis = gratis
        self._kruisjes = 0

    def koop(self, bedrag):
        nieuwe_kruisjes = int(bedrag / self.kruisje)
        self._kruisjes += nieuwe_kruisjes
        while self._kruisjes >= self.gratis:
            print("Proficiat! Je krijgt een gratis product!")
            self._kruisjes -= self.gratis

    def kruisjes(self):
        print("Je hebt momenteel", self._kruisjes, "kruisjes.")

# Simulatie voor Bakkerij Cindy
bakker = Klantenkaart(1, 7)  # Per brood (1 stuk), 7 nodig voor gratis

# 1. Je bestelt vier broden op zaterdag.
bakker.koop(4)

# 2. De week erna bestel je opnieuw vier broden.
bakker.koop(4)

# 3. Zondag geef je een feestje: je bestelt vijf broden.
bakker.koop(5)

# 4. Too-good-too-go met drie broden
bakker.koop(3)

# 5. Print hoeveel kruisjes er op je kaart staan.
bakker.kruisjes()

# 6. Je koopt nog een brood!
bakker.koop(1)