Program: Algorithms_1_overdraft.py

Program: Algorithms_1_overdraft.py

#Algorithms and Computational Thinking
#Program for Example 1
#
# Calculate the penalty without sorting the withdrawals
def calculatePenalty1(withdrawals, balance):
    total = 0
    for i in range (len (withdrawals)):
        total = total + withdrawals[i]
        if total > balance:
            break

    cutoff_notsorted = i
    penalty = 25 * (len (withdrawals) - cutoff_notsorted) #calculate penalty

    return penalty

#Calculate the penalty after sorting the withdrawals
def calculatePenalty2(withdrawals, balance):
    total = 0
    withdrawals.sort()
    withdrawals.reverse()

    for i in range (len (withdrawals)):
        total = total + withdrawals[i]
        if total > balance:
            break

    cutoff_sorted = i
    penalty = 25 * (len (withdrawals) - i)

    return penalty

#Example data
total_balance = 120
withdrawal_list = [2, 7, 15, 5, 80, 25, 10]

penalty1 = calculatePenalty1(withdrawal_list, total_balance)
penalty2 = calculatePenalty2(withdrawal_list, total_balance)
print "Penalty when withdrawals are processed in order of made transactions: ", penalty1
print "Penalty when withdrawals are processed from the largest to the smallest: ", penalty2

if (penalty2 > penalty1):
    print "Bank profit: ", penalty2-penalty1

Output:

Penalty when withdrawals are processed in order of made transactions:  50
Penalty when withdrawals are processed from the largest to the smallest:  100
Bank profit:  50