Python背包问题代码无语法错误但无输出,求排查原因
背包问题代码无输出问题分析
核心问题:逻辑错误导致代码未执行输出逻辑
你的代码无法输出的主要原因是循环内的continue语句位置错误,直接跳过了所有核心计算和输出代码:
for itm in lst: if wt == 0: itm.append(0) continue # 该语句会无条件执行,直接跳过循环体剩余所有代码 # 后续的重量计算、卡路里统计、输出逻辑永远不会运行
无论背包剩余重量wt是否为0,这个continue都会终止当前循环迭代,导致循环体后续的核心逻辑完全得不到执行,自然没有任何屏幕输出。
其他需要修正的问题
1. 字符串换行语法错误
代码中使用" "表示换行是无效的,Python中需用转义字符"\n",否则会触发字符串未闭合的语法错误。
2. 嵌套循环缩进与变量冲突
内层for itm in lst:循环缩进错误,且与外层循环变量重名,会导致变量覆盖和输出时机混乱。该循环应放在计算完成后的输出逻辑内部,仅执行一次。
3. 排序时机不合理
读取每个物品后就执行排序,效率低下,应在所有物品读取完成后统一排序。
4. 缺失文件输出逻辑
代码中完全没有写入输出文件的相关逻辑,若要实现文件输出,需添加文件写入操作。
修正后的可运行代码
# 读取输入文件 with open("inputPS1.txt") as f: # 读取物品数量 line = f.readline().strip().split(":") n = int(line[1].strip()) # 读取背包最大重量 line = f.readline().strip().split(":") remaining_wt = int(line[1].strip()) lst = [] # 读取所有物品信息 for line in f: line = line.strip().split("/") # 格式:[物品名称, 重量, 单位卡路里] lst.append([line[0], int(line[1].strip()), int(line[2].strip())]) # 所有物品读取完成后,按单位卡路里降序排序(贪心算法逻辑) lst = sorted(lst, key=lambda x: x[2], reverse=True) total_cals = 0 for itm in lst: if remaining_wt == 0: itm.append(0) continue # 仅当背包已满时跳过当前物品 if itm[1] <= remaining_wt: # 装入整个物品 itm.append(itm[1]) total_cals += itm[2] * itm[1] remaining_wt -= itm[1] else: # 装入部分物品 itm.append(remaining_wt) total_cals += itm[2] * remaining_wt remaining_wt = 0 # 按物品名称排序输出 lst = sorted(lst, key=lambda x: x[0]) # 屏幕输出 print(f"Total calories: {total_cals}\n") print("Food Item selection Ratio:\n") for itm in lst: print(f"{itm[0]}: {itm[3]}") # 写入输出文件 with open("outputPS1.txt", "w") as out_f: out_f.write(f"Total calories: {total_cals}\n\n") out_f.write("Food Item selection Ratio:\n") for itm in lst: out_f.write(f"{itm[0]}: {itm[3]}\n")
修正说明
- 调整
continue位置,仅当背包重量耗尽时跳过当前物品 - 修复字符串换行语法错误,使用f-string简化字符串拼接
- 将排序操作移至所有物品读取完成后,提升代码效率
- 添加文件写入逻辑,同时保留屏幕输出
- 重命名变量(如
wt改为remaining_wt),提升代码可读性
内容的提问来源于stack exchange,提问作者AAKASH SRIVASTAV
相关产品推荐
相关产品推荐

