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

Python代码无输出问题排查:求往返路线最小总碳足迹

问题排查:计算往返路线最低总碳足迹代码无输出

我需要计算所有巴黎-里昂往返路线的最低总碳足迹,编写了如下Python代码,但在测试用例7时始终无输出,且无法查看该测试用例的输入数据。调整时间判断条件后仍未解决问题,希望帮忙排查错误。

我的代码

compositionAller = []
compositionRetour = []
for element in range(int(lines[0])):
    date = lines[element + 1].split(" ")[0]
    heure, minutes, secondes = map(int, date.split(":"))
    ville = lines[element + 1].split(" ")[1]
    emmission = int(lines[element + 1].split(" ")[2])
    if ville == "Paris-Lyon":
        compositionAller.append([heure, minutes, secondes, ville, emmission])
    else:
        compositionRetour.append([heure, minutes, secondes, ville, emmission])

MeilleurTrajet = None
for aller in compositionAller:
    for retour in compositionRetour:
        if aller[0] == retour[0] and aller[1] < retour[1]or aller[0] < retour[0] or aller[0] == retour[0] and aller[1] == retour[1] and aller[2] <= retour[2] :
            if not MeilleurTrajet or MeilleurTrajet > aller[-1] + retour[-1]:
                MeilleurTrajet = aller[-1] + retour[-1]

print(MeilleurTrajet)

输入示例

[
"500",
"22:24:09 Paris-Lyon 487",
"09:39:29 Paris-Lyon 2",
"10:20:32 Lyon-Paris 3",
]

可能的错误点及修复方案

  1. 索引越界异常导致程序终止
    代码用range(int(lines[0]))循环,但如果lines[0]指定的数量大于实际后续记录的条数,循环到后面时lines[element+1]会超出列表长度,抛出IndexError,程序直接崩溃,无法执行到print语句,所以无输出。
    修复:直接遍历除第一条外的所有记录,避免索引越界:

    # 替换原循环部分
    compositionAller = []
    compositionRetour = []
    for line in lines[1:]:
        parts = line.split(" ")
        date = parts[0]
        heure, minutes, secondes = map(int, date.split(":"))
        ville = parts[1]
        emmission = int(parts[2])
        if ville == "Paris-Lyon":
            compositionAller.append([heure, minutes, secondes, ville, emmission])
        else:
            compositionRetour.append([heure, minutes, secondes, ville, emmission])
    
  2. 时间判断逻辑冗余且易出错
    把时间转换成总秒数进行比较,逻辑更清晰,避免运算符优先级或多条件组合的错误:

    # 新增时间转换函数
    def time_to_seconds(time_list):
        h, m, s = time_list
        return h * 3600 + m * 60 + s
    
    # 替换原嵌套循环部分
    MeilleurTrajet = float('inf')  # 初始化为无穷大,便于后续比较
    for aller in compositionAller:
        aller_seconds = time_to_seconds(aller[:3])
        for retour in compositionRetour:
            retour_seconds = time_to_seconds(retour[:3])
            if aller_seconds <= retour_seconds:
                total = aller[-1] + retour[-1]
                if total < MeilleurTrajet:
                    MeilleurTrajet = total
    
    # 处理无符合条件路线的情况
    print(MeilleurTrajet if MeilleurTrajet != float('inf') else None)
    
  3. 无符合条件的往返组合导致输出异常
    如果测试用例7中所有去程时间都晚于返程时间,原代码中MeilleurTrajet会保持初始的None,此时print(None)可能被判题系统视为无输出。修复后通过初始化为无穷大,能明确区分无符合条件的情况并输出None。

内容的提问来源于stack exchange,提问作者Kal-1

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 18:50:41