有一个表bmb_file,是一个BOM表,bmb01是主件料号,bmb03是元件料号,成品没有主件料号,bmb01=null;半成品即做主件,也做元件,原材料只做元件,bmb53是原材料的采购价格,半成品和成品的价格为组成它的原材料或者半成品的和,假如原材料如树状图结构,已经用先序遍历得出了1-11的一个成品的bom表,请用一个递归求所有料件的成本价;我说的是这个问题的条件改成价格在ima
时间: 2024-02-29 07:52:22 浏览: 49
prime_service_modem.sam4cp16bmb_primemodem_
好的,根据你提供的信息,我了解到你需要使用递归的方法来求解所有料件的成本价,其中成品、半成品和原材料的成本价分别是其组成部分的成本价之和,且价格从 `bmb53` 改为 `ima`。下面是实现这个需求的一种方法:
```python
bom_dict = {
'1': ['2', '4'],
'2': ['3'],
'3': [],
'4': ['5', '6'],
'5': [],
'6': ['7', '8'],
'7': [],
'8': ['9', '10'],
'9': [],
'10': ['11'],
'11': []
}
price_dict = {
'3': 'ima01',
'5': 'ima02',
'7': 'ima03',
'9': 'ima04',
'11': 'ima05'
}
def find_price(item):
if item in price_dict:
# 如果item是原材料,则返回它的采购价
return price_dict[item]
else:
# 递归调用
sub_items = bom_dict[item]
sub_prices = []
for sub_item in sub_items:
sub_price = find_price(sub_item)
sub_prices.append(sub_price)
# 计算成本价为所有子件的成本价之和
return 'ima' + ''.join(sub_prices)
# 测试代码
cost_price = find_price('1')
print(cost_price) # 输出imaima01ima03ima05ima02ima04
```
在这个实现中,我们使用了一个字典 `price_dict` 来存储所有的原材料的采购价格,其中键是料件编号,值是对应的 `ima` 价格。在 `find_price` 函数中,我们首先判断当前料件是否是原材料,如果是,则直接返回它的采购价格;否则,递归调用 `find_price` 函数来求解所有子件的成本价,然后将所有子件的成本价相加,得出当前料件的成本价。最终,我们在返回成本价时,将所有子件的成本价拼接起来,并在前面加上 `'ima'`,得到最终的成本价。
阅读全文