You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

嵌套列表元素修改及战舰游戏网格赋值失败问题求助

解决你的战舰网格修改问题

我来帮你捋捋代码里的几个问题,以及怎么修正它们:

问题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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 20:07:33