Python练习【5】【自动售货系统】

题目:

Python练习【5】【自动售货系统】
Python练习【5】【自动售货系统】
Python练习【5】【自动售货系统】
Python练习【5】【自动售货系统】
Python练习【5】【自动售货系统】
Python练习【5】【自动售货系统】
Python练习【5】【自动售货系统】
Python练习【5】【自动售货系统】
Python练习【5】【自动售货系统】
Python练习【5】【自动售货系统】
Python练习【5】【自动售货系统】
Python练习【5】【自动售货系统】


代码:

# 商品属性
prize_default = [2, 3, 4, 5, 8, 6]
goods_info = {'A' + str(i+1): dict(prize=prize_default[i], quantity=0) for i in range(6)}

# 存钱盒信息
money_default = [1, 2, 5, 10]
moneybox_info = {money_default[i]: 0 for i in range(4)}

money_balance = 0# 投入累计
cmd_list = ['r', 'p', 'b', 'c', 'q']# 命令类型
cmd_in_all=[]# 命令仓
refund_coin=[]# 退币仓

# 命令拆分并执行
def cmd_exec():
    cmd_in = input()
    if (cmd_in[0] not in cmd_list) or not cmd_in.endswith(';'): # 输入命令不合法提示并返回
        print('invalid cmd')
        return
    cmd_in_all = cmd_in.rstrip(';').split(';')# 多个命令分割
    for i in cmd_in_all: # 多个命令依次执行
        cmd_choice(i)
    cmd_in_all=[] # 清空命令仓

# 输入命令并判断
def cmd_choice(cmd_in):
    if cmd_in[0] not in cmd_list: # 命令不合法提示并返回
        print('invalid cmd')
        return
    else: # 命令合法执行相应命令
        cmd_def[cmd_list.index(cmd_in[0])](cmd_in.lstrip(cmd_in[0] + ' '))

# 信息初始化r
def info_init(input_info):
    init_info = input_info.split(' ') # 从空格处断开分出两个字符串
    # 限制输入数据的范围
    for i in init_info:  # 遍历两个字符串
        for j in i.split('-'): # 从字符串中提出数字信息
            if int(j) > 10: # 如果单个赋值超过10,输出提示信息
                print('out of range , Initialization failed')
                return
    for i,v in zip(goods_info,init_info[0].split('-')): # 存入商品数量
        goods_info[i]['quantity'] = int(v)
    for i,v in zip(money_default,init_info[1].split('-')): # 存入钱币数量
        moneybox_info[i] = int(v)
    print('S001:Initialization is successful') # 初始化成功信息

# 投币p
def put_in_money(money):
    global money_balance
    money = int(money) # 将字符串转成数值
    if money not in money_default: # 投入不是10,5,2,1的硬币报错并返回
        print('E002:Denomination error')
        return
    if money != 1 and money != 2: # 1,2硬币不适用下面规则
        if money > moneybox_info[2] * 2 + moneybox_info[1] * 1: # 投入硬币大于盒内2,1硬币的总数时报错并返回
            print('E003:Change is not enough,pay fail')
            return
    if money_balance > 10: # 余额大于10时报错并返回
        print('E004:Pay the balance is beyond the scope biggest')
        return
    for i in goods_info: # 遍历货物数量
        if goods_info[i]['quantity'] != 0: # 有货跳出循环
            break
    else: # 没货报错并返回
        print('E005:All the goods sold out')
        return
    money_balance += money # 成功投币计入余额
    moneybox_info[money] += 1 # 投入币放入存钱盒
    print('S002:Pay success,balance='+str(money_balance)) # 成功提示

# 购买商品b
def buy(goods):
    global money_balance
    if goods not in goods_info: # 商品不存在提示并返回
        print('E0:Goods does not exist')
        return
    if goods_info[goods]['quantity']==0: # 商品数量为0提示并返回
        print('E007:The goods sold out')
        return
    if money_balance<goods_info[goods]['prize']: # 余额不足提示并返回
        print('E008:Lack of balance')
        return
    money_balance-=goods_info[goods]['prize'] # 成功余额减少
    goods_info[goods]['quantity']-=1 # 成功数量减一
    print('S003:Buy success,balance='+str(money_balance)) # 购买成功提示

# 退币c
def refund(*arg):
    global money_balance
    global refund_coin
    if money_balance==0: # 余额为0时提示并返回
        print('E009:Works failure')
        return
    else:
        for i in money_default[::-1]: # 余额不为0时,从高到低遍历存钱盒里的硬币
            while moneybox_info[i]!=0 and money_balance>= i: # 当余额大于该面值硬币且该硬币数大于0时
                refund_coin.append(i) # 将要退回的硬币存入列表
                money_balance-=i # 余额减去对应值
                moneybox_info[i]-=1 # 存钱盒内该类硬币数量减去1
        else:
            coin_back=[refund_coin.count(i) for i in money_default]
            # 统计应退各类硬币数
            print(coin_back)
            for i in range(4): # 打印退币信息
                print(money_default[i],'yuan coin number='+str(coin_back[i]))
            refund_coin=[] # 情况退币仓

# 查询库存及存钱盒信息q
def inquire(cmd):
    if cmd=='0': # 查询商品信息
        for i in sorted(goods_info.items(),key=lambda a:a[1]['quantity'],reverse=True):
            print(i[0],i[1]['prize'],i[1]['quantity'])
    if cmd=='1': # 查询存钱盒信息
        for i in money_default:  # 打印退币信息
            print(str(i), 'yuan coin number=' + str(moneybox_info[i]))

# 命令对应函数列表
cmd_def = [info_init, put_in_money, buy, refund, inquire]
while True:
    try:
        cmd_exec()
    except Exception as error:
        print('system exception')

测试结果:

初始化:

Python练习【5】【自动售货系统】

投币:

Python练习【5】【自动售货系统】

购买:

Python练习【5】【自动售货系统】

退币:

Python练习【5】【自动售货系统】

查询:

Python练习【5】【自动售货系统】
Python练习【5】【自动售货系统】

多命令:

Python练习【5】【自动售货系统】

转载于:https://blog.51cto.com/13992211/2330207

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【开发版V4.0】2020新版京东淘宝拼多多自动抢单系统源码|全开源|接单返佣 可完美运行某站3000+源码直接打包!! 一款新上线的淘宝自动抢单平台,跟传统抢单大的区别就是平台取用第三方匹配平台,自动匹配订单,简单化了程序,效率更高,收益更高,使用户、商家,平台都有得益! 全新界面简洁美观,功能强大完整,完美运营,持续更新中! 全开源系统,免授权无后门,资金安全有保障,无后顾之优! 更新日志: Ⅰ、新增利息宝功能,余额转入理财 Ⅱ、优化抢单体验,显示随倒计时和提示内容 Ⅲ、新增首页和订单页面UI特效 Ⅳ、修复抢单页面回调不能返回原分类的问题 Ⅴ、修复邀请码必填项 Ⅵ、新增抢单时间段控制 Ⅶ、新增完成多少任务量才可提现等多项规则,有效控盘。 Ⅷ、新增后台代理商数据报表,实时查看网体数据,提升运营效率。 Ⅸ、新增抢单提示音 Ⅹ、新增充值提现时间段设置 。。。 操作方法:扫码注册登录APP,填写收货信息,充值(100元起),建议先充值100元试水,充值时平台会有上下浮动金额,按平台提示金额充值就可以了。 佣金是所抢金额的0.31%,可抢订单金额是余额的10-70%,每天可抢70单,抢单时间为每天8-20点。 温馨提示:若您选择了自动抢单且离开抢单界面有可能系统派单了您没接收到,导致订单被冻结。建议您点击自动抢单了不要离开抢单界面。或者有事离开的时候点击停止抢单。系统 才能知道您已经取消了抢单操作。 代理制度:可享往下三级代理佣金,一级16%、二级8%、三级4。 提现规则:佣金满100元就可以提现,提现T+1到账,15点前。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值