博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python练习【5】【自动售货系统】
阅读量:6705 次
发布时间:2019-06-25

本文共 3575 字,大约阅读时间需要 11 分钟。

题目:

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] + ' '))# 信息初始化rdef 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') # 初始化成功信息# 投币pdef 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)) # 成功提示# 购买商品bdef 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
= 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=[] # 情况退币仓# 查询库存及存钱盒信息qdef 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

你可能感兴趣的文章
nyoj 37 回文字符串
查看>>
Lintcode--006(交叉字符串)
查看>>
ASP.NET Core 1.0基础之依赖注入
查看>>
Excel里的单元格提行
查看>>
Matlab最短路径问题记录
查看>>
c语言单链表实现
查看>>
tcpdump非常实用的抓包实例
查看>>
ORACLE 日期函数 MONTHS_BETWEEN
查看>>
struts2.3+spring3.2+hibernate4.2例子
查看>>
进程调度
查看>>
北京地铁新机场线列车亮相调试 设计时速160公里/小时
查看>>
css布局基础总结
查看>>
Koa源码解析
查看>>
webpack系列之一总览
查看>>
乌龙事件之chrome页面部分白屏
查看>>
FP 视角下的领域驱动设计
查看>>
玩转iOS开发:iOS中的Socket编程(二)
查看>>
如何打造BCH使用的刚性需求?
查看>>
一个小需求引发的思考
查看>>
JSX,了解一下?
查看>>