编辑代码

def knapsack(fruits, capacity):
    fruits.sort(key=lambda x: x[2] / x[1], reverse=True)

    weight = 0
    value = 0

    print("装水果的策略:")

    for fruit in fruits:
        if weight + fruit[1] <= capacity:
            weight += fruit[1]
            value += fruit[2]
            print(f"装入 {fruit[0]},重量:{fruit[1]}kg,价值:{fruit[2]}")
        else:
            fraction = (capacity - weight) / fruit[1]
            weight += fraction * fruit[1]
            value += fraction * fruit[2]
            print(f"装入 {fruit[0]} 的部分,重量:{fraction * fruit[1]}kg,价值:{fraction * fruit[2]}")
            break

    print(f"总重量:{weight}kg,总价值:{value}")

if __name__ == "__main__":
    fruits = [
        ("苹果", 15, 300),
        ("香蕉", 18, 180),
        ("橘子", 10, 150),
        ("猕猴桃", 9, 270)
    ]

    backpack= 20

    knapsack(fruits, backpack)