You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 18:15:42