【问题标题】:Your code send nothing back test error python?您的代码没有返回测试错误 python?
【发布时间】:2022-12-17 12:03:08
【问题描述】:

我实际上通过了测试,我在这里计算所有可能路线的最低总碳足迹。 我知道有多种方法可以做到这一点,但我试过这样的事情:

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)

但是到了测试用例 7,他们总是说有一个错误,你的代码没有返回任何内容,我无法访问列表来在我身边尝试。 因此,如果有人可以帮助我知道错误在哪里。 这是我们可以获得的表格的示例:

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

我试图更改条件以检查小时、分钟和秒数,但没有任何效果。

【问题讨论】:

    标签: python-3.x list testing


    【解决方案1】:

    你写了

    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]:
    

    这看起来很不方便。 人类将阅读/调试此代码;人类擅长讲故事。 使用单词(“seconde”)比使用数字([0])好得多。

    另外,我更喜欢 meilleurEmmission 的标识符 为了与上面的代码保持一致,澄清一下 有二氧化碳单位,但这是次要的一点。 (PEP-8 要求 meilleur_emmission,随便什么。)

    不便从这里开始:

            compositionAller.append([heure, minutes, secondes, ville, emmission])
    

    开始进口。

    import datetime as dt
    

    我们知道我们将不得不比较 H,M,S 和 H,M,S。 为什么要让它痛苦,为什么要零敲碎打? 这是表示同一事物的两种更好的方法:

    1. 保留 H、M、S,但是作为元组: .append([(heure, minutes, secondes), ville, emmission])
    2. 放弃 H,M,更喜欢 SI 单位:.append([dt.timeinterval(hours=heure, minutes=minutes, seconds=secondes), ville, emmission])

      如果您更喜欢整数,那么 dt.timeinterval(...).total_seconds() 会 给你例如五分钟的旅程需要 300 秒。

      好吧,突然那个巨大的if表情有 变得更易于管理,这很容易 问哪个旅程的持续时间更短。


      您说您的代码没有概括所有测试用例。

      这是原始代码中的另一个表达式 这让我担心:

          if ville == "Paris-Lyon":
      

      这看起来非常硬编码。

      我不知道原来的问题陈述是什么, 以及有效的城市名称可能是什么。

      但我担心你需要

          start, end = ville.split("-")
      

      你可能需要一些更奇特的逻辑, 也许通过 dict 查找, 跟踪出站和入站路线 对于不一定是多个城市 巴黎或里昂。 另外,如果我们必须处理 Paris -> Auxerre 其次是欧塞尔->里昂复合路线, 然后是更复杂的图形方法 将需要遍历。

      好机会!

    【讨论】:

      猜你喜欢
      • 2012-05-15
      • 1970-01-01
      • 1970-01-01
      • 2016-12-11
      • 2018-07-07
      • 1970-01-01
      • 2021-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多