Een kortingkaart wordt gekenmerkt door de naam van de klant (string), en het totaal bedrag dat de klant besteed heeft (float).
Per groep van $$N$$ aankopen, kan de klant een korting krijgen. Zodra dus dit aantal aankopen bereikt is, kan de klant korting vragen.
Zodra deze korting aangevraagd wordt, verdwijnt de groep van $$N$$ aankopen van zijn kaart. Indien op het moment van aanvraag het aantal
aankopen $$ \ge mN$$ is met $$m$$ geheel, dan kan de klant voor deze $$m$$ groepen van $$N$$ aankopen een korting uitbetaald krijgen.
De $$mN$$ aankopen verdwijnen dan van de kaart.
Programmeer in de klasse Kortingkaart
het volgende:
Kortingkaart
aan te maken. De constructor heeft als argumenten de naam van de klant, de grootheid $$N$$ en het kortingspercentage als reëel getal. Een korting van
5% wordt voorgesteld als $$0.05$$.
+=
met als 2de operand een reëel getal registreert een nieuwe aankoop op de kaart. Je mag ervan uitgaan dat de aankoop een strikt positief bedrag betreft.
+
: deze binaire operator construeert een nieuwe kortingkaart, waarbij de aankopen van beide operandi gegroepeerd worden op voorwaarde dat het om kaarten van dezelfde
klant gaat. Is dit het geval, dan wordt een nieuwe kaart gemaakt. In dit geval wordt de naam van de klant overgenomen. Als aankopen worden eerst alle aankopen van het linker operand
geregistreerd, en nadien alle aankopen van het rechteroperand. De aankopen op de kaarten die samengevoegd werden, worden verwijderd. De paramter $$N$$ van de nieuwe kaart is het maximum van de parameters $$N$$ van de operandi.
Het kortingspercentage is het minimum van de percentages van de operandi.Indien het gaat om kaarten van verschillende klanten, dan
is het resultaat het linkeroperand, en blijven de aankopen op de kaarten ongewijzigd.
vraag_korting()
geeft als resultaat de korting. Deze korting is berekend als een percentage op het totale aankoopbedrag van de eerste $$mN$$ aankopen
van de kaart ($$m$$ geheel en zo groot mogelijk). Deze $$mN$$ aankopen worden van de kaart verwijderd.
__str__()
levert volgende gedaante op: [klantnaam:N=kortinggroep:P=kortingpercentage:S=totale_aankoopsom:A=aantal_aankopen]
. De gegevens totale_aankoopsom
en aantal_aankopen
worden berekend op aankopen waarop nog
korting mogelijk is. Voor de klant met naam "Jan"
, die voor een bedrag 30.5 aangekocht heeft en dit deed via 3 aankopen, wordt dit: [Jan:N=3:P=0.050000:S=30.500000:A=3]
, indien korting per groep van 3
aankopen kan gevraagd worden, en het kortingpercentage 5% bedraagt. Gebruik voor het voorstellen van reële getallen
het formaat %f
.
get_totale_korting()
(zonder argumenten). Deze methode geeft het totaal bedrag aan korting dat aangevraagd werd, voor alle kaarten samen. Programmeer deze methode als een statische methode.
reset_totale_korting()
(zonder argumenten). De methode zorgt ervoor dat voor het bepalen van de totale korting over alle kaarten heen, het bepalen van de totale korting terug bij 0.0 start. Programmeer ook deze methode als een statische methode.
Kortingkaart.reset_totale_korting() jan1 = Kortingkaart('Jan', 3, 0.05) print(jan1) -> [Jan:N=3:P=0.050000:S=0.000000:A=0] jan1 += 40.0 jan1 += 20.0 jan1 += 70.0 jan1 += 10.0 print(jan1) -> [Jan:N=3:P=0.050000:S=140.000000:A=4] print(jan1.vraag_korting()) -> 6.5 print(jan1) -> [Jan:N=3:P=0.050000:S=10.000000:A=1] jan2 = Kortingkaart('Jan', 4, 0.1) jan2 += 10.0 jan2 += 100.0 jan2 += 50.0 jan2 += 25.0 jan3 = jan1 + jan2 print(jan3) -> [Jan:N=4:P=0.050000:S=195.000000:A=5] print(jan1) -> [Jan:N=3:P=0.050000:S=0.000000:A=0] print(jan2) -> [Jan:N=4:P=0.100000:S=0.000000:A=0] print(jan3.vraag_korting()) -> 8.5 print(Kortingkaart.get_totale_korting()) -> 15.0