10X10网格随机游走(A-Z)代码异常:仅显示起始'A'
10×10网格随机游走填充A-Z仅显示起始'A'的问题排查与解决
这种情况几乎可以确定是移动合法性的条件判断存在隐性逻辑错误,导致每次尝试移动都被判定为非法,无法推进到后续字母的填充。以下是最常见的几个坑和对应的排查、修复方法:
常见问题点与修复
边界判断区间错误
10×10网格的索引范围是0-9,如果你的条件写成new_x >=0 and new_x <=10或者new_x >0 and new_x <10,都会导致边界位置被误判为越界。正确的边界判断应该是:0 <= new_x < 10 and 0 <= new_y < 10占用状态判断逻辑颠倒
若你写的是grid[new_x][new_y] != '.'来判断是否可移动,那逻辑完全反了——应该是当目标位置等于.(未被填充)时才允许移动。正确的判断应为:grid[new_x][new_y] == '.'方向尝试逻辑缺失循环
很多人会犯这个错:每次只随机选一个方向,若该方向不合法就直接跳过当前字母的填充,而不是重新尝试其他方向。正确的做法是循环尝试直到找到合法方向,或者先筛选出所有合法方向再随机选择,示例如下:import random # 初始化网格 grid = [['.' for _ in range(10)] for _ in range(10)] current_x, current_y = 5, 5 # 起始位置可自定义 grid[current_x][current_y] = 'A' directions = [(-1,0), (1,0), (0,-1), (0,1)] # 上下左右 # 填充B到Z for char in range(ord('B'), ord('Z')+1): valid_moves = [] # 先筛选所有合法方向 for dx, dy in directions: nx = current_x + dx ny = current_y + dy if 0 <= nx <10 and 0 <= ny <10 and grid[nx][ny] == '.': valid_moves.append((dx, dy)) if valid_moves: dx, dy = random.choice(valid_moves) current_x += dx current_y += dy grid[current_x][current_y] = chr(char) else: # 可选:无合法移动时的处理(比如提前终止) break
排查步骤
- 单独打印每次生成的
new_x和new_y,验证是否在0-9范围内。 - 打印
grid[new_x][new_y]的当前值,确认判断逻辑是否和预期一致。 - 检查是否在方向不合法时,没有重新尝试其他方向,直接结束了当前字母的填充流程。
内容的提问来源于stack exchange,提问作者Pepe Cuesta
相关产品推荐
相关产品推荐

