Het doel in deze vraag is om een bankensysteem te ontwikkelen waarin een saldo bijgehouden wordt.
Bedragen worden steeds opgegeven via een tuple van 2 gehele getallen, namelijk een aantal euro en een aantal
eurocent. Je mag aannemen dat bedragen die zo voorgesteld worden steeds positief zijn, en het aantal
eurocent strik kleiner is dan 100.
Het bankensysteem laat toe om het saldo van een persoon aan te passen,
en om geld te transferen van persoon A naar B.
Programmeer in de klasse Bank
het volgende:
- een constructor met 3 argumenten, namelijk
- de naam van de bank (een string)
- het eurogedeelte van een startkapitaal voor een nieuwe klant dat de bank toekent wanneer een
nieuwe rekening geopend wordt
- idem voor het eurocentgedeelte
- de methode
__str__()
levert een string-gedaante op. Om deze te construeren, bouw
je een lijst van tuples. Deze lijst noemen we hierna . Elk van de tuples uit
bestaat uit 2 componenten, namelijk de naam van een klant
(type str
) en zijn/haar saldo (type float
). De volgorde in deze lijst
is alfabetisch, geordent volgens de standaard ingebouwde sorted()
-functie. Elk tuple
wordt omgezet naar de gedaante , waarbij het saldo met 2 decimalen na de komma
voorgesteld wordt. Deze strings worden voor elk tuple opgebouwd, en gescheiden door een komma
aaneengeschakeld tot de string .
De string-gedaante van de bank wordt uiteindelijk opgebouwd als
- de operator "==" levert True indien voor banken waarvan de namen gelijk zijn, alsook de startkapitalen
(dus het euro-gedeelte en het eurocent-gedeelte).
- een geschikte
__repr__()
-methode
- de operator "+=" waarbij in het linkerlid een genest tuple is van de vorm
. Indien het gaat om een klant
die al over een rekening in de bank beschikt, wordt het bedrag bij zijn saldo bijgeteld. Indien
het om een nieuwe klant gaat, dat wordt het opgegeven bedrag, vermeerderd met het startkapitaal
(opgegeven in de constructor van het bank-object) op zijn rekening geplaatst.
- de operator "-=" heeft een identieke werken, alleen wordt het bedrag nu afgetrokken
- de methode
transfer()
heeft 3 argumenten, namelijk:
- een string die een klant voorstelt waarvan de transfer moet gebeuren
- een string die een klant voorstelt naar waar de transfer moet gebeuren
- een tuple dat een te transfereren bedrag voorstelt (beide componenten zijn niet-negatief)
Indien beide klanten over een rekening beschikken, gaat de transfer door. Indien dit niet het geval is,
heeft de methode geen effect. De methode levert geen resultaat (dus None
), maar het gevolg van
de oproep is dat er eventueel een transfer van geld tussen 2 personen kan doorgaan.
Voorbeeld
a = Bank('Bank1',2,50)
str(a) # '[Bank1,]'
b = Bank('Bank2',2,50)
c = Bank('Bank1',2,50)
a == b # False
a == c # True
a == eval(repr(a)) # True
a == eval(repr(b)) #False
for k in zip(['Jan', 'Filip', 'Pieter', 'Jan'],[10, 20, 30, 40],[50, 0, 50, 0]):
... a += (k[0],(k[1],k[2]))
str(a) # '[Bank1,Filip:22.50,Jan:53.00,Pieter:33.00]'
for k in zip(['An', 'Jan', 'Filip', 'Pieter'],[10, 20, 20, 30],[50, 50, 0, 10]):
... a -= (k[0],(k[1],k[2]))
str(a) # '[Bank1,An:-8.00,Filip:2.50,Jan:32.50,Pieter:2.90]'
a.transfer('Jan','Filip',(10, 20))
str(a) # '[Bank1,An:-8.00,Filip:12.70,Jan:22.30,Pieter:2.90]'