1 回答

TA貢獻1852條經(jīng)驗 獲得超7個贊
正如Prune在評論中指出的那樣,通過迭代比使用遞歸更好地解決了這個問題。我寫了一些方法,以防萬一你好奇:是一個遞歸函數(shù),是一個更干凈的迭代解決方案。請注意,他們假設(shè)您的列表已排序。split_change_r
split_change
cur_unit
class Register:
cur_unit = [100, 50, 20, 10, 5, 1, .25, .10, .05, .01]
reg_amount = []
def load_reg(self):
self.reg_amount = float(input('Enter amount of money in register...\n'))
def split_change_r(self, amount, l = []):
next_cur = [a for a in self.cur_unit if a <= amount][0]
if next_cur == amount:
return l + [next_cur]
else:
# here is the recursive call
return self.split_change_r(round(amount - next_cur, 2), l + [next_cur])
def split_change(self, amount):
r = []
while(amount != 0):
next_cur = [a for a in self.cur_unit if a <= amount][0]
amount = round(amount - next_cur, 2)
r.append(next_cur)
return r
def transaction(self):
trans_amount = float(input('Enter the cost of the transaction...\n'))
if trans_amount > self.reg_amount:
print("I'm sorry, but we don't have enough money in the register to allow this transaction...\n")
else:
cash_paid = float(input('Enter how much money you will pay with...\n'))
change_due = cash_paid - trans_amount
new_reg_amount = self.reg_amount - change_due
if new_reg_amount < 0:
print("I'm sorry, but we don't have enough money in the register to allow this transaction...\n")
else:
new_reg_amount = round(new_reg_amount, 2)
change_due = round(change_due, 2)
print('\n' + str(new_reg_amount))
print(change_due)
return self.split_change(change_due)
reg = Register()
reg.load_reg()
res = reg.transaction()
print(res)
輸出示例:
Enter amount of money in register...
200
Enter the cost of the transaction...
24.24
Enter how much money you will pay with...
50
174.24
25.76
[20, 5, 0.25, 0.25, 0.25, 0.01]
添加回答
舉報