首先,了解一下FIFO(First In First Out)的基本原理,即先入先出。例如,读进一串数字[1,2,3,4,5],首先输出的是1,最后输出的是5.
在python中,queue中Queue模块中有put()(进入队列),get()(得到队列的数字),empty()(判断队列是否为空)来供队列使用
例如:输入一句:我有一只三酷猫!
import queue
s1 = '我是一只三酷猫!'
FIFO = queue.Queue()
按照先入先出原则,输出队列中的数
i = len(s1)-1
while i >= 0:
FIFO.put(s1[i])
i-=1
while not FIFO.empty():
print(FIFO.get())
输出结果:!猫酷三只一有我
掌握了FIFO的基本原理后,来看下面这个小例子,对药店当日财务及销售情况进行整理:
药店当日进货表,每一行的数据分别表示货号,药名,采购数量,实际数量,成本价:
['20191126001','阿莫西林',2,2,18],
['20191126002','咳嗽糖浆',1,1,35],
['20191126003','小儿清肺片',10,10,35],
['20191126004','阿莫西林',5,5,19]
药店当日销售表,每一行分别表示销售记录编号,货号,药名,销售数量,成本价,销售价:
['20191126001','','阿莫西林',2,0,25],
['20191126002','','咳嗽糖浆',1,0,48],
['20191126004','','阿莫西林',1,0,25]
首先弄清楚我们的需求:
1.更新采购表,根据销售表重新确定采购表中的实际数量
2.更新销售表,根据采购表确定销售表的货号和成本计价
InDetail=[ #货号,药名,入库数量,实际数量,成本价
['20191126001','阿莫西林',2,2,18],
['20191126002','咳嗽糖浆',1,1,35],
['20191126003','小儿清肺片',10,10,35],
['20191126004','阿莫西林',5,5,19]
]
SaleRecord=[ #销售记录编号,货号,药名,销售数量,成本价,销售价
['20191126001','','阿莫西林',2,0,25],
['20191126002','','咳嗽糖浆',1,0,48],
['20191126004','','阿莫西林',1,0,25]
]
读取销售记录表的每一行,循环采购表
i=0
s_len=len(SaleRecord)
while i < s_len:
Curr_Record=SaleRecord[i]
j=0
I_len=len(InDetail)
while j < I_len:
if InDetail[j][1] == Curr_Record[2] and InDetail[j][3] >= Curr_Record[3]:
SaleRecord[i][1] = InDetail[j][0] #获取入库单号
SaleRecord[i][4] = InDetail[j][4] #获取成本价
InDetail[j][3] = InDetail[j][3]-SaleRecord[i][3]
break
else:
j+=1
i+=1
输出更改后的销售清单和采购表:
print("处理后的销售表:")
for sale in SaleRecord:
print(sale)
print("处理后的采购表:")
for detail in InDetail:
print(detail)
输出结果如图:
处理后的销售表:
['20191126001', '20191126001', '阿莫西林', 2, 18, 25]
['20191126002', '20191126002', '咳嗽糖浆', 1, 35, 48]
['20191126004', '20191126004', '阿莫西林', 1, 19, 25]
处理后的采购表:
['20191126001', '阿莫西林', 2, 0, 18]
['20191126002', '咳嗽糖浆', 1, 0, 35]
['20191126003', '小儿清肺片', 10, 10, 35]
['20191126004', '阿莫西林', 5, 4, 19]