题解 | #自动售货系统#
自动售货系统
https://www.nowcoder.com/practice/cd82dc8a4727404ca5d32fcb487c50bf
import sys
商品表 = {'A1':[2,0],'A2':[3,0],'A3':[4,0],'A4':[5,0],'A5':[8,0],'A6':[6,0]}
存钱盒 = {10:0,5:0,2:0,1:0}
class 自动售货系统:
def __init__(self):
self.商品表={'A1':[2,0],'A2':[3,0],'A3':[4,0],'A4':[5,0],'A5':[8,0],'A6':[6,0]}
self.存钱盒 = {10:0,5:0,2:0,1:0}
self.投币金额 = 0
def 系统初始化(self,numA1,numA2,numA3,numA4,numA5,numA6,num1,num2,num5,num10):
try:
self.商品表['A1'][1] = int(numA1)
self.商品表['A2'][1] = int(numA2)
self.商品表['A3'][1] = int(numA3)
self.商品表['A4'][1] = int(numA4)
self.商品表['A5'][1] = int(numA5)
self.商品表['A6'][1] = int(numA6)
self.存钱盒[10] = int(num10)
self.存钱盒[5] = int(num5)
self.存钱盒[2] = int(num2)
self.存钱盒[1] = int(num1)
return 'S001:Initialization is successful'
except:
return '初始化失败'
def 投币(self,num):
if num not in self.存钱盒:
return 'E002:Denomination error'
if num not in [1,2] and self.存钱盒[1]+self.存钱盒[2]*2 < num:
return 'E003:Change is not enough, pay fail'
if sum([int(i[1][1]) for i in self.商品表.items()]) == 0:
return 'E005:All the goods sold out'
else:
self.投币金额 += num
self.存钱盒[num] += 1
return f'S002:Pay success,balance={self.投币金额}'
def gobuy(self,name):
if name not in self.商品表:
return 'E006:Goods does not exist'
if self.商品表[name][1] == 0:
return 'E007:The goods sold out'
if self.投币金额 < self.商品表[name][0]:
return 'E008:Lack of balance'
else:
self.商品表[name][1] -= 1
self.投币金额 -= self.商品表[name][0]
return f'S003:Buy success,balance={self.投币金额}'
def 退币(self):
if self.投币金额 == 0:
return 'E009:Work failure'
else:
num10,num5,num2,num1 = 0,0,0,0
if self.投币金额 >= 10:
num10 = self.投币金额//10
if num10 >= self.存钱盒[10]:
num10 = self.存钱盒[10]
self.投币金额 -= num10*10
if self.投币金额 >= 5:
num5 = self.投币金额//5
if num5 >= self.存钱盒[5]:
num5 = self.存钱盒[5]
self.投币金额 -= num5*5
if self.投币金额 >= 2:
num2 = self.投币金额//2
if num2 >= self.存钱盒[2]:
num2 = self.存钱盒[2]
self.投币金额 -= num2*2
if num1 >= self.存钱盒[1]:
num1 = self.存钱盒[1]
else:
num1 = self.投币金额
self.存钱盒[1] -= num1
self.存钱盒[2] -= num2
self.存钱盒[5] -= num5
self.存钱盒[10] -= num10
self.投币金额 = 0
return (f'1 yuan coin number={num1}\n'
+ f'2 yuan coin number={num2}\n'
+ f'5 yuan coin number={num5}\n'
+ f'10 yuan coin number={num10}')
def search(self,arg):
if arg == '0':
return (f'A1 2 {self.商品表["A1"][1]}\n'
+ f'A2 3 {self.商品表["A2"][1]}\n'
+ f'A3 4 {self.商品表["A3"][1]}\n'
+ f'A4 5 {self.商品表["A4"][1]}\n'
+ f'A5 8 {self.商品表["A5"][1]}\n'
+ f'A6 6 {self.商品表["A6"][1]}')
elif arg == '1':
return (f'1 yuan coin number = {self.存钱盒[1]}\n'
+ f'2 yuan coin number = {self.存钱盒[2]}\n'
+ f'5 yuan coin number = {self.存钱盒[5]}\n'
+ f'10 yuan coin number = {self.存钱盒[10]}')
else:
return 'E010:Parameter error'
A = 自动售货系统()
for line in sys.stdin:
a = line.strip().split(";")
for i in a[:-1]:
if i[0] == 'r':
list1 = i.split(" ")
numA1,numA2,numA3,numA4,numA5,numA6 = list1[1].split("-")
num1,num2,num5,num10 = list1[2].split("-")
re = A.系统初始化(numA1,numA2,numA3,numA4,numA5,numA6,num1,num2,num5,num10)
print(re)
elif i[0] == 'c':
print(A.退币())
elif i[0] == 'q':
list1 = i.split(" ")
try:
print(A.search(int(list1[1])))
except:
print('E010:Parameter error')
elif i[0] == 'p':
list1 = i.split(" ")
print(A.投币(int(list1[1])))
elif i[0] == 'b':
list1 = i.split(" ")
print(A.gobuy(list1[1]))
查看11道真题和解析