嵌套列表元素修改及战舰游戏网格赋值失败问题求助
解决你的战舰网格修改问题
我来帮你捋捋代码里的几个问题,以及怎么修正它们:
问题1:随机坐标越界
你用random.randint(0,8)生成坐标,但你的网格是8x8的,索引范围是0到7(因为range(0,8)创建的是0-7的8个元素)。如果生成8的话,访问ocean[8]就会抛出索引错误。
问题2:坐标列表生成逻辑错误
你在循环里每次都重新创建xAxis和yAxis空列表再append,这样最后这两个列表里只会保留最后一次循环生成的数值,而不是8个坐标。应该先初始化空列表,再在循环里持续添加。
问题3:网格赋值语法错误
最后那句[ocean[yAxis[num]]] = 2完全不对,二维列表的赋值应该是ocean[行索引][列索引] = 新值的形式。
修正后的完整代码
import random # 创建8x8的海洋网格,初始值都是0 ocean = [] for _ in range(8): row = [0] * 8 # 用这个方式创建行更简洁 ocean.append(row) # 生成8组随机坐标(x是列,y是行) x_coords = [] y_coords = [] for _ in range(8): # 生成0-7之间的随机整数,避免索引越界 x = random.randint(0, 7) y = random.randint(0, 7) x_coords.append(x) y_coords.append(y) # 将对应位置的网格值改为2 for num in range(8): y = y_coords[num] x = x_coords[num] ocean[y][x] = 2 # 可以打印网格验证一下 for row in ocean: print(row)
额外优化建议
如果不想重复生成可能重叠的战舰位置(比如两个战舰出现在同一个格子),可以用集合来确保坐标唯一:
# 生成8个不重复的坐标 unique_coords = set() while len(unique_coords) < 8: x = random.randint(0,7) y = random.randint(0,7) unique_coords.add( (x,y) ) # 赋值到网格 for x, y in unique_coords: ocean[y][x] = 2
这样就能确保每个战舰位置都是唯一的啦~
内容的提问来源于stack exchange,提问作者Alex Gauss
相关产品推荐
相关产品推荐

