An ATM, a.k.a. Cash Withdrawal Machine, uses a computer program to interact with the customer and count the number of banknotes to dispense based on the customer’s requested amount.
In the UK, ATM’s tend to only stock £20 banknotes and £10 banknotes and apply the following rules:
- The minimal amount that can be withdrawn is £10,
- The maximal amount that can be withdrawn is £200,
- The amount to be withdrawn must be a multiple of 10 e.g. £10, £20, £30, £40, … £180, £190, £200.
Quotient (DIV) and Remainder (MOD)
To calculate how many £20 banknotes and how many £10 banknotes correspond to the requested amount, the ATM program uses two arithmetic operators called DIV and MOD.
The quotient (DIV) returns the result of the whole division. For instance:
The remainder (MOD) returns the remainder of the whole division. For instance:
By using these operators we can deduct that £70 pounds will result in:
- 70 DIV 20 = 3 banknotes of £20
- 70 MOD 20 = 10 (= 1 banknote of £10)
Note that in Python the DIV operator is // whereas the MOD operator is %.
- quotient = 70 // 20
- remainder = 70 % 20
Also to find out if a number is a multiple of 10, we can check if number MOD 10 == 0. Effectively, if the remainder of dividing this number by 10 is null, we can conclude that this number is a multiple of 10.
ATM Algorithm: Pseudocode
The suggested pseudocode for our ATM is as follows:
WHILE TRUE DISPLAY "Welcome to Python Bank ATM - Cash Withdrawal" amount = INPUT "How much would you like to withdraw today?" IF (amount MOD 10) != 0 THEN DISPLAY "You can only withdraw a multiple of ten!" ELSE IF amount<10 OR amount>200 THEN DISPLAY "You can only withdraw between £10 and £200" ELSE notes20 = amount DIV 20 notes10 = (amount MOD 20) / 10 DISPLAY "Collect your money: " DISPLAY " >> £20 Banknotes: " + notes20 DISPLAY " >> £10 Banknotes: " + notes10 DISPLAY "Thank you for using this Python Bank ATM." DISPLAY "Good Bye." END IF END IF END WHILE
Your task is to use this pseudocode to implement this algorithm using Python.
Extension Task 1
The bank reloads the ATM to its full capacity every morning. The ATM has a full capacity of £1,000.
Adapt this code so that:
- When you run the code, the ATM starts with a full capacity of £1,000.
- After each withdrawal, take away the amount withdrawn from the ATM total capacity.
- If the ATM is empty a message is displayed to inform that the ATM is not operational.
- If the ATM is not empty, change your code to check that it contains enough cash left to meet the amount requested by a customer before dispensing the banknotes.
- If the customer requested amount cannot be met, inform the customer of the maximum amount that is still available to withdraw.
Extension Task 2
When the bank reloads the ATM, it ensures that the ATM contains exactly:
- 30 banknotes of £20.
- 40 banknotes of £10.
Adapt your code to ensure that the ATM checks that there are enough banknotes of £20 or £10 before dispensing the banknotes. Note that if the ATM runs out of £20 banknotes, it may still be able to dispense the requested amount using £10 banknotes instead.