"""Bepaal voor alle bedragen in het opgegeven tekstbestand een minimale gepaste betaling als lijst van euromunten en van oude NL munten. """ ## Definieer constanten euromunten = [ 200, 100, 50, 20, 10, 5, 2, 1 ] # munten in dalende volgorde oudeNLmunten = [ 500, 250, 100, 25, 10, 5, 1 ] # oude NL munten in dalende volgorde ## Definieer routines def openTekstbestand ( ) : """Vraag naam van invoerbestand op en open het voor lezen via inp Pre: True Ret: poort naar tekstbestand geopend voor lezen, de naam ervan is opgevraagd via standaard invoer, de leeskop staat vooraan """ bestandsnaam = raw_input ( 'Geef naam van tekstbestand met bedragen: ' ) return file ( bestandsnaam, 'r' ) def verwerkTekstbestand ( inp ) : """Verwerk alle regels uit tekstbestand inp Pre: inp is gekoppeld aan tekstbestand geopend voor lezen; de leeskop in inp staat vooraan Post: voor alle bedragen in inp is een minimale betaling afgedrukt; de leeskop in inp staat achteraan """ for regel in inp : # print repr ( regel ) # alleen voor foutendiagnose bedrag = eval ( regel ) # het bedrag op de regel print '%3d:' % bedrag, minimaleBetaling ( euromunten, bedrag ) print ' ', minimaleBetaling ( oudeNLmunten, bedrag ) def minimaleBetaling ( munten, bedrag ) : """Bepaal minimale betaling van bedrag Pre: munten is lijst van muntsoorten, dalend gesorteerd bedrag is geheel getal met 0 <= bedrag <= 500 Ret: minimale betaling van bedrag met munten """ betaling = [ ] # reeds gevonden deel van de betaling restbedrag = bedrag # resterende te passen bedrag #@ inv: sum(betaling) + restbedrag = bedrag for munt in munten : while restbedrag >= munt : betaling.append ( munt ) restbedrag = restbedrag - munt assert restbedrag == 0 # dus sum(betaling) = bedrag return betaling ## Begin van het programma opgebouwd uit de routines verwerkTekstbestand ( openTekstbestand ( ) ) ## Einde