**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