目录

用python实现先进先出法

目录

周末有朋友想用先进先出法计算股票的成本。

而这和我们平时审计时存货的先进先出法是相同的。

实际上存货的计价方式有先进先出、移动加权平均、月末一次移动加权平均等。

审计项目中大多数项目的计价方式是月末一次移动加权平均,这种方法比较简单。

而先进先出相对来说用 Excel 实现比较困难,因为出库的时候要计算其单价需要首先去找最开始的入库的,用完了再找其次最早的。

其实,有了 chatgpt 对于这种实现某种功能的代码来说,将非常简单。

我直接将我的需求:“使用 python 帮我写个存货用先进先出法计算成本的函数”发送给chatgpt,它就给出了我答案:

class FIFOInventory:
    def __init__(self):
        self.inventory = []

    def purchase(self, cost_per_unit, quantity):
        self.inventory.append((cost_per_unit, quantity))

    def sell(self, quantity):
        remaining_quantity = quantity
        total_cost = 0

        while remaining_quantity > 0 and self.inventory:
            cost_per_unit, available_quantity = self.inventory[0]

            if available_quantity <= remaining_quantity:
                total_cost += cost_per_unit * available_quantity
                remaining_quantity -= available_quantity
                self.inventory.pop(0)
            else:
                total_cost += cost_per_unit * remaining_quantity
                self.inventory[0] = (cost_per_unit, available_quantity - remaining_quantity)
                remaining_quantity = 0

        if remaining_quantity > 0:
            print(f"Insufficient inventory to sell {quantity} units.")
            return None

        return total_cost

# 使用示例
inventory_manager = FIFOInventory()

# 购买库存
inventory_manager.purchase(10, 100)  # 每单位成本10,数量100
inventory_manager.purchase(12, 50)   # 每单位成本12,数量50

# 销售库存
total_cost = inventory_manager.sell(120)  # 销售120个单位
if total_cost is not None:
    print(f"Total cost of goods sold: ${total_cost:.2f}")

如果我们将来遇到需要对选进先出法进行计价测试,就可以直接利用这段代码。

它帮我们封装成了一个类,入库我们使用 purchase 函数将数据存入库存,使用 sell 函数计算出库对应的成本,非常简单。

假如你不会 python ,想用Excel VBA实现,怎么办?

直接告诉它。

当然,如果你想能贴合你的数据,能直接运行,可以将数据粘贴几行给它,告诉它哪列是金额,哪列是数量,这样会有比较好的结果。