Python实现简易自动售货机系统:初始化、管理与交易逻辑详解
本文展示使用Python构建的简易自动售货机系统,涵盖初始化设定、管理员查询及顾客购买流程。系统限制硬币面额为一至十元,要求钱盒余额满足找零需求,并处理多次购买与余额计算逻辑,适合初学者理解状态管理与条件判断。
Python自动售货机系统概述
本示例提供了一套使用Python编写的自动售货机完整代码,供读者参考学习。
以下是自动售货机的核心代码实现部分。
核心代码实现与初始化逻辑
while True:
n=input('请选择操作:')
if n=='r':
l=input('请输入货物数量:')
v=l.split('-')
numA1=int(v[0])
numA2=int(v[1])
numA3=int(v[2])
numA4=int(v[3])
numA5=int(v[4])
numA6=int(v[5])
t=input('请输入硬币数量:')
u=t.split('-')
yiyuan=int(u[0])
liangyuan=int(u[1])
wuyuan=int(u[2])
shiyuan=int(u[3])
print('S001:Initialization is successful')
elif n=='q':
print('会员管理'.center(50,'*'))
print("""
操作目录
0-货物剩余量
1-钱盒""")
while True:
c=input()
if c=='0':
print('A1 %d A2 %d A3 %d A4%d A5 %d A6 %d' %(numA1,numA2,numA3,numA4,numA5,numA6))
elif c=='1':
print('1yuan coin number=%d 2yuan coin number=%d 5yuan coin number=%d 10 yuan coin number=%d' %(yiyuan,liangyuan,wuyuan,shiyuan))
elif n=='p':
counname=input('请选择商品:')
if counname=='1':
if numA1<=0:
print('E007:The goods sold out')
else:
m=input('请输入现金:')
if m=='1':
print('S003:Buy success,balance=1')
print('E009:Work failure')
numA1-=1
yiyuan+=1
elif m=='2':
print('S003:Buy success,balance=1')
numA1-=1
liangyuan+=1
yiyuan-=1
print('找您一元')
elif m=='5':
if yiyuan*1+liangyuan*2<5:
print('E003:Change is not enough,pay fail')
else:
print('S002:Pay success,balance=1')
print('S003:Buy success,balance=1')
numA1-=1
wuyuan+=1
liangyuan-=2
print('找您4元')
elif m=='10':
if yiyuan*1+liangyuan*2<10:
print('E003:Change is not enough,pay fail')
else:
print('S002:Pay success,balance=1')
print('S003:Buy success,balance=1')
shiyuan+=1
wuyuan-=1
liangyuan-=2
print('找您9元')
else:
print('E002:Denomination error')
elif counname == '2':
if numA2 <= 0:
print('E007:The goods sold out')
else:
m=input('请输入现金:')
if m == '1':
print('E008:Lack of balance')
elif m == '2':
print('S003:Buy success,balance=1')
print('E009:Work failure')
numA2 -= 1
liangyuan += 1
elif m == '5':
if yiyuan * 1 + liangyuan * 2 < 5:
print('E003:Change is not enough,pay fail')
else:
print('S002:Pay success,balance=2')
print('S003:Buy success,balance=1')
wuyuan+=1
yiyuan-=1
liangyuan-=1
print('找您三元')
elif m == '10':
if yiyuan * 1 + liangyuan * 2 < 10:
print('E003:Change is not enough,pay fail')
else:
print('S002:Pay success,balance=2')
print('S003:Buy success,balance=1')
numA2-=1
shiyuan+=1
wuyuan-=1
yiyuan-=1
liangyuan-=2
print('找您8元')
else:
print('E002:Denomination error')
elif counname == '3':
if numA3 <= 0:
print('E007:The goods sold out')
else:
m=input('请输入现金:')
if m == '1':
print('E008:Lack of balance')
elif m == '2':
print('E008:Lack of balance')
elif m == '5':
if yiyuan * 1 + liangyuan * 2 < 5:
print('E003:Change is not enough,pay fail')
else:
print('S002:Pay success,balance=3')
print('S003:Buy success,balance=1')
numA3-=1
wuyuan += 1
liangyuan -= 1
print('找您三元')
elif m == '10':
if yiyuan * 1 + liangyuan * 2 < 10:
print('E003:Change is not enough,pay fail')
else:
print('S002:Pay success,balance=3')
print('S003:Buy success,balance=1')
numA3 -= 1
shiyuan += 1
wuyuan -= 1
liangyuan -= 1
print('找您7元')
else:
print('E002:Denomination error')
elif counname == '4':
if numA4 <= 0:
print('E007:The goods sold out')
else:
m=input('请输入现金:')
if m == '1':
print('E008:Lack of balance')
elif m == '2':
print('E008:Lack of balance')
elif m == '5':
if yiyuan * 1 + liangyuan * 2 < 5:
print('E003:Change is not enough,pay fail')
else:
print('S002:Pay success,balance=4')
print('S003:Buy success,balance=1')
numA4 -= 1
wuyuan += 1
yiyuan -= 1
print('找您1元')
elif m == '10':
if yiyuan * 1 + liangyuan * 2 < 10:
print('E003:Change is not enough,pay fail')
else:
print('S002:Pay success,balance=4')
print('S003:Buy success,balance=1')
numA4 -= 1
shiyuan += 1
wuyuan -= 1
yiyuan -= 1
print('找您6元')
else:
print('E002:Denomination error')
elif counname == '5':
if numA5 <= 0:
print('E007:The goods sold out')
else:
m=input('请输入现金:')
if m == '1':
print('E008:Lack of balance')
elif m == '2':
print('E008:Lack of balance')
elif m == '5':
print('E008:Lack of balance')
elif m == '10':
if yiyuan * 1 + liangyuan * 2 < 10:
print('E003:Change is not enough,pay fail')
else:
print('S002:Pay success,balance=6')
print('S003:Buy success,balance=1')
numA5 -= 1
shiyuan += 1
liangyuan-=2
print('找您4元')
else:
print('E002:Denomination error')
elif counname == '6':
if numA6 <= 0:
print('E007:The goods sold out')
else:
m=input('请输入现金:')
if m == '1':
print('E008:Lack of balance')
elif m == '2':
print('E008:Lack of balance')
elif m == '5':
print('S003:Buy success,balance=1')
print('E009:Work failure')
numA6 -= 1
wuyuan+=1
elif m == '10':
if yiyuan * 1 + liangyuan * 2 < 10:
print('E003:Change is not enough,pay fail')
else:
print('S002:Pay success,balance=5')
print('S003:Buy success,balance=1')
numA6 -= 1
shiyuan += 1
wuyuan -= 1
print('找您5元')
else:
print('E006:Goods does not exist')
else:
print('操作无效')业务规则与状态约束说明
代码逻辑说明:钱盒内仅包含一元、两元、五元和十元面额的硬币,顾客投入的硬币也仅限于此四种。系统设定钱盒内一元和两元硬币的总面额必须足以覆盖顾客本次投入的面额,以确保找零可行。顾客单次操作只能投入一次硬币并购买一件商品,但支持通过多次投入实现多次购买。货物初始数量及硬币储备由管理员在初始化阶段设定,管理员拥有查询钱币及货物数量的权限,但查询结束后必须退出该模式。若顾客投入金额恰好等于商品价格,则判定为购买成功且系统余额归零,此时若后续无足够硬币找零,将导致交易失败,意味着后续无法继续购买。
系统交互指令解析
系统交互指令如下:输入“r”代表初始化操作,程序必须在执行任何交易前完成初始化;输入“q”代表管理员模式,用于查看钱盒状态和货物库存;输入“p”代表顾客模式,用于执行购买商品、付款及获取找零的操作。
运行界面展示
系统运行界面示例如下所示:



以上内容为本文的全部介绍,希望能为读者提供有益的学习参考,欢迎继续支持本站获取更多技术资源。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









