这段代码的第26行给了我一个错误,我无法修复它。请帮我弄清楚。
这是一条线:
path[road]['distance_from_start'] = path.get(road, {}).get('distance_from_start') + path.get(road, {}).get('distance_to_neighbor')
它应该找到的是地图中起点和终点之间有多个中间站的最短路径。在
import math
def my_function(M, start, goal):
frontier = set([start])
expanded = set()
chosen = start
chosen_coordinates = M.intersections[chosen]
goal_coordinates = M.intersections[goal]
roads_to_choose = M.roads[chosen]
path = {}
while frontier != set():
if chosen != goal:
for road in roads_to_choose:
if road not in expanded:
frontier.add(road)
path[road] = {}
path[road]['coordinate'] = {}
path[road]['roads'] = {}
path[road]['distance_to_goal'] = {}
path[road]['distance_to_neighbor'] = {}
path[road]['distance_from_start'] = {}
path[road]['g_plus_h'] = {}
path[road]['path_list'] = {}
path[road]['coordinate'] = M.intersections[road]
path[road]['roads'] = M.roads[road]
path[road]['distance_to_neighbor'] = math.sqrt(((M.intersections[road][0]-chosen_coordinates[0])**2) + ((M.intersections[road][1]-chosen_coordinates[1])**2))
path[road]['distance_from_start'] = path.get(road, {}).get('distance_from_start') + path.get(road, {}).get('distance_to_neighbor')
path[road]['distance_to_goal'] = math.sqrt(((goal_coordinates[0]-M.intersections[road][0])**2) + ((goal_coordinates[1]-M.intersections[road][1])**2))
path[road]['g_plus_h'] = path[road]['distance_from_start'] + path[road]['distance_to_goal']
path[road]['path_list'] = path[chosen]['path_list'].append(road)
frontier.remove(chosen)
expanded.add(chosen)
if x not in expanded:
chosen = min(path.keys(), key=lambda x:path[x]['g_plus_h'])
path[road]['distance_from_start'] = path.get(chosen, {}).get('distance_from_start')
else:
print("Short path called")
return path[goal]['path_list']
您正在尝试添加两个字典项,如下所示:
这是错误的方法,这就是为什么你得到这个错误。你到底想怎么处理这两个听写,你的结果取决于这一点。如果要合并它们,请尝试以下操作:
在Python3.5或更高版本中:
^{pr2}$在Python2(或3.4或更低版本)中,编写一个函数:
通过查看您的代码,您的问题可以通过在开始时更改分配来解决
然后你就可以得到你的结果了。在
相关问题 更多 >
编程相关推荐