实现找给用户找零的操作,最大面值为 100 元。 找寻的零钱有以下几种: 50 元, 20
元, 10 元, 5 元, 1 元, 5 角, 1 角。比如,物品: 12.3 元,支付 100 元,程序应找寻: 1
个 50 元, 1 个 20 元, 1 个 10 元,一个 5 元, 2 个 1 元, 1 个 0.5 元, 2 个 0.1 元。可首先计
算出差额,然后用整除的方式计算。
利用 Python 实现收银找零操作,完成以下函数:
(1)商品枚举
函数原型: def list_goods()
返回值:字符串,使用字典类型表示商品,转换为字符串后返回;按商品名称顺序显示
所有商品的名称和价格,如下所示:
{'item01': 2.3, 'item02': 35.8, 'item03': 16.3, 'item04': 12, 'item05': 13.6, 'item06': 29, 'item07':
17.4, 'item08': 63.9, 'item09': 56.7, 'item10': 23.8}
(2)付款找零
函数原型: def get_changes(items, pay)
参数 items: list 类型,表示需要购买的商品;
参数 pay:数字类型,表示付款纸币面额,只付一张纸币。
返回值:如果参数均合规,返回字典,输出各个面值的数目及对应个数;如果购买商品
列表清单中存在不合规的商品时,输出“item15 不存在,请重新选择。”多个商品间使用顿
号分隔,如“item11、 item13 不存在,请重新选择。”如果支付金额不足时,输出:“支付
金额不足,请重新支付。”
# 题目二:类似找零钱的操作
money=[50,20,10,5,1,0.5,0.1] # 纸币面额
item_dict = {'item01' : 2.3, 'item02' : 35.8, 'item03' : 16.3, 'item04' : 12,
'item05' : 13.6, 'item06' : 29, 'item07' : 17.4, 'item08' : 63.9,
'item09' : 56.7, 'item10' : 23.8} # 商品名称与价格
def list_goods():
goods=''
for i in item_dict:
goods=goods+i+':'+str(item_dict[i])+' '
return goods
def get_changes(items, pay):
pay_in=0#需要支付的金额
for i in items:
if i not in item_dict:
print ('%s不存在,请重新选择.' % i)
return -1
else:
pay_in+=item_dict[i]
pay_in=round(pay_in,2)
if pay < pay_in:
print ('支付金额不足,请重新支付。')
elif pay>pay_in:
pay_back=pay-pay_in
pay_back = round (pay_back, 2) # 考虑精度问题,保留两位小数
print('应找回',pay_back,'元')
m=money.copy()
pay_back = pay_back * 10#扩大十倍,克服精度的问题
pay_back_num=[0,0,0,0,0,0,0]#对应找回的个数
for i in range(7):
m[i]*=10
if pay_back // m[i] > 0:
pay_back_num[i] = pay_back // m[i]
pay_back = pay_back - pay_back_num[i] * m[i]
pay_back = round (pay_back, 2) # 考虑精度问题,保留两位小数
print (int (pay_back_num[i]), '个', money[i], '元 ')