用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实现,怎么办?
直接告诉它。
当然,如果你想能贴合你的数据,能直接运行,可以将数据粘贴几行给它,告诉它哪列是金额,哪列是数量,这样会有比较好的结果。