仓库的烦恼问题一。数据去重,统计。

问题遇到的现象和发生背景

仓库出纳的烦恼。
有一张仓库总数据,然后就是每天的入库流水,出库流水。一个星期后,做总结的时候,发现流水里的物料到底是在库房里还是出库了!

用代码块功能插入代码,请勿粘贴截图

如下图:库房物品用数字代替, 出库流水,入库流水。

库存: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

出库1:  7,8,3,6         入库1: 11,13
出库2:  4,9,2,1         入库2: 9,8,3
出库3:  3,8,5,10       入库3: 2,5,7
出库4:  5,2               入库4: 4,10,1
出库5:  10,4,9          入库5: 6, 5, 8, 4
出库6:  1,8,13,6,5    入库6: 2, 5, 6, 8
出库7:  11, 4, 6, 2     入库7: 3, 11, 2
我的解答思路和尝试过的方法

尝试过用字典,或者 列表,不知道怎么个算法。

我想要达到的结果

请问怎么用python 统计出最后库存是哪些?出库是哪些?某个物品被重复领用了多少次?

kf = []
wp = {}
qzmc=[]
wpcf={}

def ruku():
    wpm = input("请输入存入库房的物品名:")
    wpsl = eval(input("请输入存入库房物品{}的数量:".format(wpm)))
    if kf == []:
        wp["{}".format(wpm)] = "{}".format(wpsl)
        kf.append(wp)
    else:
        for i in kf:
            if "{}".format(wpm) in i.keys():
                dqwps = int(wp["{}".format(wpm)])
                sl = dqwps + wpsl
                wp["{}".format(wpm)] = "{}".format(sl)
            if "{}".format(wpm) not in i.keys():
                wp["{}".format(wpm)] = "{}".format(wpsl)
                kf.clear()
                kf.append(wp)

def chuku():
    wpm = input("请输入取出库房的物品名:")
    qzmc.append(wpm)
    for i in kf:
        if "{}".format(wpm) in i.keys():
            wpsl = eval(input("请输入取出库房物品{}的数量:".format(wpm)))
            dqwps = int(wp["{}".format(wpm)])
            sl = dqwps - wpsl
            if sl >= 0:
                wp["{}".format(wpm)] = "{}".format(sl)
                for i in qzmc:
                    wpcf[i] = qzmc.count(i)
            elif sl < 0:
                print("物品{}库存不足!".format(wpm))
        elif "{}".format(wpm) not in i.keys():
            print("物品{}不在库房!".format(wpm))


while True:
    cz = eval(input("请输入1或2,1表示存货,2表示取货:"))
    if cz == 1:
        ruku()
        print("《===当前库房所有商品及库存数量!及各物品被重复领用的次数===》")
        for kk, vv in kf[0].items():
            print("物品名:{}   库存数为:{}".format(kk,vv))

    elif cz == 2:
        if kf != [] or wpcf !={} :
            chuku()
            print("《===当前库房所有商品及库存数量!及各物品被重复领用的次数===》")
            for kk, vv in kf[0].items():
                print("物品名:{}   库存数为:{}".format(kk, vv))
            for kk, vv in wpcf.items():
                print("物品名:{}   重复取出次数:{}".format(kk, (int(vv)-1)))
        else:
            print("当前仓库没有货!请先增加货物!")

希望对你能有帮助!

class Stock():
    def __init__(self, initial_inventory:set):
        self.stock = initial_inventory
        self.inventory = {i:0 for i in self.stock}
    def put(self, inventory:set): # 入库
        for i in inventory:
            if i in self.stock:
                print(f"库存已有{i},请检查入库信息")
                return
        self.stock |= inventory
        for i in inventory:
            if i not in self.inventory:
                self.inventory[i]=0
    def get(self, inventory:set): # 出库
        for i in inventory:
            if i not in self.stock:
                print(f"库存没有{i},请检查出库信息")
                return
        self.stock -= inventory
        for i in inventory:
            self.inventory[i] += 1

s = Stock({1,2,3,4,5,6,7,8,9,10})
# 1
s.get({7,8,3,6})
s.put({11,13})
print(s.stock)
print(s.inventory)
# 2
s.get({4,9,2,1})
s.put({9,8,3})
print(s.stock)
print(s.inventory)
# 3
s.get({3,8,5,10})
s.put({2,5,7})
print(s.stock)
print(s.inventory)
# 4
s.get({5,2})
s.put({4,10,1})
print(s.stock)
print(s.inventory)
# 5
s.get({10,4,9})
s.put({6,5,8,4})
print(s.stock)
print(s.inventory)
# 6
s.get({1,8,13,6,5})
s.put({2,5,6,8})
print(s.stock)
print(s.inventory)
# 7
s.get({11,4,6,2})
s.put({3,11,2})
print(s.stock)
print(s.inventory)