类似找零钱的操作

实现找给用户找零的操作,最大面值为 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], '元 ')

猜你喜欢

转载自blog.csdn.net/qq_24624539/article/details/86611555
今日推荐