如何调试pd_map函数实现标注最近披萨店的网格地图生成
代码问题排查与修复
导致返回None的直接原因
你自定义的near_one函数,在存在唯一最近门店的分支仅写了res.index(min(res)),没有加return语句,Python中函数没有显式返回值时默认返回None,这是运行结果全为None的核心原因。
其他存在的问题
- 逻辑顺序错误:在计算单门店距离的循环内部就判断最小值,此时还没有遍历完全部门店,判断逻辑完全不成立,需要等所有门店距离计算完成后再做判断。
- 变量未定义:多门店距离相等的分支返回的
X没有加引号,属于未定义变量,运行会直接报错。 - 依赖未导入:使用了
math.sqrt但没有提前导入math模块,运行会报错。 - 冗余代码:开头创建
map1并遍历的代码没有任何实际作用,可以直接删除。
修正后的完整代码
import math # 系统提供的工具函数 def create_zero_matrix(n,m): return [[0 for i in range(m)] for j in range(n)] def m_tight_print(m): for i in range(len(m)): line = '' for j in range(len(m[0])): line += str(m[i][j]) print(line) def pd_map(r,c,sites): def near_one(x,y,sites): res = [] # 先计算所有门店到当前点的距离 for n in range(len(sites)): # 比较距离可以不用开平方,直接用平方和对比速度更快,不影响结果 dist = (x-sites[n][0])**2 + (y-sites[n][1])**2 res.append(dist) min_dist = min(res) if res.count(min_dist) == 1: return res.index(min_dist) else: # 多门店距离相等时返回X,可根据需求调整填充值 return 'X' map2 = [] for i in range(r): row = [] for j in range(c): row.append(near_one(i,j,sites)) map2.append(row) return map2
内容的提问来源于stack exchange,提问作者hanrui zhang
相关产品推荐
相关产品推荐

