需要一些关于如何解决这个涉及递归和循环的问题的想法



我正在为大学考试而学习,我正在努力解决这个问题,那里有一家"水果存储"公司为他的客户提供存储服务。公司想知道仓库里储存的水果有多少吨。我必须开发一个函数来接收带有水果库存的字典。(练习给了我们字典以防万一)。每个仓库可能包含分支和子分支。我们必须把所有仓库里所有水果的吨数加起来,然后打印出答案。

下面是给出的字典:

warehouses = { 
"Warehouse Lisboa": [
{ "name": "apples", "tons": 4},
{ "name": "oranges", "tons": 10},
{ "name": "lemons", "tons": 50}
], 
"Warehouse Cascais": { 
"Branch 1": [
{ "name": "apples", "tons": 10},
{ "name": "oranges", "tons": 24}
],
"Branch 2": [
{ "name": "apples", "tons": 16},
{ "name": "oranges", "tons": 8}
]
}, 
"Warehouse Oeiras": { 

"Branch 1": { 
"Sub Branch 1":{
"Sub sub Branch 1": [
{ "name": "lemons", "tons": 10}       
]
} 
},

你可以看到,有些仓库没有分支,有些仓库有多个分支,所以我们应该使用循环和递归。

这是我到目前为止所想到的。

def stock_fruits(warehouses):
tons1 = 0
for key in warehouses:
if type(warehouses[key]) == list:
tons1 += warehouses["tons"]

else:
stock_fruits(warehouses[key])

return tons1 

可以遍历集合的所有项:

warehouses = {
"Warehouse Lisboa": [{
"name": "apples",
"tons": 4
}, {
"name": "oranges",
"tons": 10
}, {
"name": "lemons",
"tons": 50
}],
"Warehouse Cascais": {
"Branch 1": [{
"name": "apples",
"tons": 10
}, {
"name": "oranges",
"tons": 24
}],
"Branch 2": [{
"name": "apples",
"tons": 16
}, {
"name": "oranges",
"tons": 8
}]
},
"Warehouse Oeiras": {
"Branch 1": {
"Sub Branch 1": {
"Sub sub Branch 1": [{
"name": "lemons",
"tons": 10
}]
}
}
}
}

def findFruits(obj, name, result):
if isinstance(obj, list):
for item in obj:
result = findFruits(item, name, result)
elif isinstance(obj, dict):
if "name" in obj and obj['name'] == name:
result += obj['tons']
else:
for k, v in obj.items():
result = findFruits(v, name, result)
return result

for fruit in ('apples', "lemons"):
res = 0
res = findFruits(warehouses, fruit, res)
print(res)

:

30
60

你可以这样做:

def fruit_stock(warehouses, fruit):
total = 0
for warehouse in warehouses:
if type(warehouses[warehouse]) == list:
for item in warehouses[warehouse]:
if item['name'] == fruit:
total += item['tons']
else:
total += fruit_stock(warehouses[warehouse], fruit)
return total
fruit_stock(warehouses1, 'lemons')
# 60

如果你不需要检查任何特定的水果:

def fruit_stock(warehouses):
total = 0
for warehouse in warehouses:
if type(warehouses[warehouse]) == list:
for item in warehouses[warehouse]:
total += item['tons']
else:
total += fruit_stock(warehouses[warehouse])
return total
fruit_stock(warehouses1)
# 132

最新更新