如何实现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
相关产品推荐
相关产品推荐

