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", ]
可能的错误点及修复方案
索引越界异常导致程序终止
代码用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])时间判断逻辑冗余且易出错
把时间转换成总秒数进行比较,逻辑更清晰,避免运算符优先级或多条件组合的错误:# 新增时间转换函数 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)无符合条件的往返组合导致输出异常
如果测试用例7中所有去程时间都晚于返程时间,原代码中MeilleurTrajet会保持初始的None,此时print(None)可能被判题系统视为无输出。修复后通过初始化为无穷大,能明确区分无符合条件的情况并输出None。
内容的提问来源于stack exchange,提问作者Kal-1
相关产品推荐
相关产品推荐

