程序停止处理大量数据

Programm stops working with large numbers

我创建了一个很棒的代码,考虑到背包的最大允许重量,returns 列表中的项目通过重复枚举,总结它们的价格和重量,并给出结果。目前,我面临的问题是,当最大权重变大(例如 80)时,代码根本不会 运行。我真的不明白这是无限循环还是优化的问题,所以非常感谢你的帮助!

backpack_max = int(input('Backpack limit: '))
item_list = ['Rune', 'Arrows', 'Rock', 'Sword']
item_weight = [2, 4, 5, 10]
item_price = [20, 4, 1, 15]
backpack_fin_items = []
total_weight = 0
total_price = 0
count = 0

while total_weight+min(item_weight) < backpack_max:
  for item, price in zip(item_list, item_price):
    if total_weight+item_weight[count] <= backpack_max:
      total_weight += item_weight[count]
      backpack_fin_items.append(item.lower())
      total_price += price
      count += 1
      count %= len(item_list)
      joint = ', '.join(backpack_fin_items)
  
print (f'You are packed with loot! \n\nContent: {joint}\n\nTotal weight: {total_weight}/{backpack_max} kg\nTotal price: {total_price} coins\n\nHave a nice adventure, warrior!')

不是你的物品太多,而是你卡在背包里无法添加任何物品的状态。要调试这样的小程序,一个有用的方法是在代码中执行您不期望的事情的部分添加 print

while total_weight+min(item_weight) < backpack_max:
    print(total_weight, backpack_fin_items)
    # ...

无限循环打印:

74 ['rune', 'arrows', 'rock', 'sword', 'rune', 'arrows', 'rock', 'sword', 'rune', 'arrows', 'rock', 'sword', 'rune', 'arrows', 'rock']
74 ['rune', 'arrows', 'rock', 'sword', 'rune', 'arrows', 'rock', 'sword', 'rune', 'arrows', 'rock', 'sword', 'rune', 'arrows', 'rock']

这不直观,因为看起来我们应该能够添加重量为 2 的项目。

仔细查看代码:

    for item, price in zip(item_list, item_price):
        if total_weight+item_weight[count] <= backpack_max:

我怀疑 item_weight[count] 有问题——我不清楚这将如何让你获得与 item 相关的权重,或者 count 应该做什么.

如果我只是将权重添加到您的 zip 表达式并删除所有引用 count 的行,否则,它工作正常:

    for item, price, weight in zip(item_list, item_price, item_weight):
        if total_weight + weight <= backpack_max:
            total_weight += weight