题解 | #自动售货系统# 完美解答
自动售货系统
https://www.nowcoder.com/practice/cd82dc8a4727404ca5d32fcb487c50bf
遇到这种题优先定义变量,类似于建立数据库
name = ['A1', 'A2', 'A3', 'A4', 'A5', 'A6']
nameK = {'A1': 0, 'A2': 1, 'A3': 2, 'A4': 3, 'A5': 4, 'A6': 5}
price = [2, 3, 4, 5, 8, 6]
count = [0] * 6
money = [1, 2, 5, 10]
moneyK = {1: 0, 2: 1, 5: 2, 10: 3}
moneyC = [0] * 4
# 可用余额
amount = 0
# 初始化
def r(sl):
global count, moneyC
count = list(map(int,sl[0].split('-')))
moneyC = list(map(int,sl[1].split('-')))
print('S001:Initialization is successful')
# 投币
def p(sl):
global amount, moneyC
a = int(sl[0])
if a not in money:
print('E002:Denomination error')
return
if a not in money[:2] and money[0] * moneyC[0] + money[1] * moneyC[1] < a:
print('E003:Change is not enough, pay fail')
return
if sum(count) == 0:
print('E005:All the goods sold out')
return
amount += a
moneyC[moneyK[a]] += 1
print(f'S002:Pay success,balance={amount}')
return
# 购买商品
def b(sl):
global amount, count
if sl[0] not in name:
print('E006:Goods does not exist')
return
i = nameK[sl[0]]
if count[i] == 0:
print('E007:The goods sold out')
return
if amount < price[i]:
print('E008:Lack of balance')
return
amount -= price[i]
count[i] -= 1
print(f'S003:Buy success,balance={amount}')
return
# 退币
def c(sl):
global amount, moneyC
if amount == 0:
print('E009:Work failure')
return
back = [0] * len(money)
i = 3
while i >= 0 and amount > 0:
if money[i] > amount or moneyC[i] == 0:
i -= 1
continue
amount -= money[i]
moneyC[i] -= 1
back[i] += 1
if sum(back) ==0:
print('E009:Work failure')
return
for j in range(len(money)):
print(f'{money[j]} yuan coin number={back[j]}')
return
# 查询
def q(sl):
if len(sl) < 1 or sl[0] not in ['0', '1']:
print('E010:Parameter error')
return
if sl[0] == '0':
c = list(enumerate(count))[::-1]
c_sort = sorted(c, key=lambda x: x[1], reverse=True)
for i, j in c_sort:
print(f'{name[i]} {price[i]} {count[i]}')
else:
for i in range(len(money)):
print(f'{money[i]} yuan coin number={moneyC[i]}')
return
try:
while True:
st = [s.split() for s in input().split(';') if s]
for s in st:
if len(s) > 0 and s[0] in globals():
globals()[s[0]](s[1:])
else:
print('E010:Parameter error')
except:
pass
