如何从Cell邻居列表中随机生成单个(x,y)格式的坐标结果?
问题:从单元格的邻居中随机选取一个坐标
在学校作业中,cell是一个包含x、y坐标的点。需要先生成该点的邻居列表,再从邻居中随机选取一个,返回单个(x,y)格式的坐标。
原代码
import random #Qst1 cell=(2,3) lgn, col = cell def voisines_PI(cell): n=[(lgn-1,col-1),(lgn-1,col+1),(lgn+1,col+1),(lgn+1,col-1)] return n print(voisines_PI(cell)) #Qst2 def voisine_PI_alea(cell): m= 0 b= len(voisines_PI(cell)) g= random.randint(m,b) return g print(voisine_PI_alea(voisines_PI(cell)))
原代码存在的问题
voisines_PI函数未使用传入的cell参数,而是依赖全局的lgn和col,无法处理任意输入的cellvoisine_PI_alea函数返回的是随机索引而非目标坐标,且调用时错误地传入邻居列表而非cellrandom.randint(m,b)的范围错误:randint是闭区间,列表索引范围是0到len(列表)-1,使用randint(0, len(列表))会导致索引越界
修正后的代码
import random # 生成cell的四个对角邻居列表 def voisines_PI(cell): lgn, col = cell # 从传入的参数中解析坐标,保证函数通用性 return [(lgn-1, col-1), (lgn-1, col+1), (lgn+1, col+1), (lgn+1, col-1)] # 从邻居列表中随机选取一个坐标 def voisine_PI_alea(cell): neighbors = voisines_PI(cell) return random.choice(neighbors) # 直接用random.choice简化随机选取逻辑 # 测试示例 cell = (2, 3) print("所有邻居:", voisines_PI(cell)) print("随机选中的邻居:", voisine_PI_alea(cell))
修正说明
- 修正
voisines_PI函数:在函数内部解析传入的cell参数,不再依赖全局变量,函数可以处理任意(x,y)格式的cell输入 - 重写
voisine_PI_alea函数:- 先获取目标cell的邻居列表
- 使用
random.choice()直接从列表中随机选取元素,无需手动计算索引,彻底避免索引越界问题
- 修正调用逻辑:调用
voisine_PI_alea时传入的是原始cell,符合函数的参数设计
内容的提问来源于stack exchange,提问作者RmZ_lbs
相关产品推荐
相关产品推荐

