程序停止处理大量数据
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
我创建了一个很棒的代码,考虑到背包的最大允许重量,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