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

如何实现Python函数:计算从起点到各点再返回的总行程

解决Python行程总距离计算的问题

先说说你现有代码里的问题:

  • 缩进错误:Python对缩进要求严格,你写的value1那行缩进多了,for循环里的代码也没缩进,运行直接会报语法错误。
  • 索引逻辑错误:houses是坐标列表,每个元素是(x,y)这样的元组,start[0] - houses[0]是拿整数和元组相减,肯定报错;而且for i in houses里的i是坐标元组,不是数字索引,start[i]这种写法完全不成立,Python会直接抛出异常。
  • 缺少累加逻辑:你只写了减法表达式,但没把结果存到总距离里,也没维护当前位置的变化。
  • 遗漏返回起点的步骤:需求明确要求最后回到起点,你的代码完全没处理这部分。

正确实现代码

先明确:你给出的公式(x1-x2)+(y1-y2)会出现负数,实际行程距离应该是非负的,所以更合理的是用曼哈顿距离(绝对值之和)。下面的代码会同时标注两种情况,你可以根据需求选择:

def total_travel(houses, start):
    total_distance = 0
    current_pos = start  # 记录当前所在位置,初始为起点
    
    # 依次前往每个朋友家
    for house in houses:
        # 按你给出的公式计算(结果可能为负,仅适合特定场景)
        segment = (current_pos[0] - house[0]) + (current_pos[1] - house[1])
        # 如果是实际行程的曼哈顿距离,替换成下面这行
        # segment = abs(current_pos[0] - house[0]) + abs(current_pos[1] - house[1])
        
        total_distance += segment
        current_pos = house  # 更新当前位置为刚到达的朋友家
    
    # 最后从最后一个朋友家返回起点
    return_segment = (current_pos[0] - start[0]) + (current_pos[1] - start[1])
    # 曼哈顿距离版本:
    # return_segment = abs(current_pos[0] - start[0]) + abs(current_pos[1] - start[1])
    
    total_distance += return_segment
    return total_distance

测试示例

比如输入houses = [(1,1), (2,3)],start = (0,0):

  • 用你的原始公式计算总距离是-2 + (-3) + 5 = 0(显然不符合实际行程)
  • 用曼哈顿距离计算总距离是2 + 3 + 5 = 10(这才是真实的行程总长度)

内容的提问来源于stack exchange,提问作者user19895297

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 04:01:06