Python 为战列舰创建并初始化5x5网格

Python 为战列舰创建并初始化5x5网格,python,list,grid,initialization,Python,List,Grid,Initialization,所以我刚刚完成了代码学院战舰问题的一部分,并提交了一个正确的答案,但我很难理解为什么它是正确的 其想法是将5x5网格构建为一块板,填充“O”。我使用的正确代码是: board = [] board_size=5 for i in range(board_size): board.append(["O"] *5) 然而,我不明白为什么这没有在一行中创建25个“O”,因为我从未指定迭代到单独的行。我试过了 for i in range(board_size): board[i

所以我刚刚完成了代码学院战舰问题的一部分,并提交了一个正确的答案,但我很难理解为什么它是正确的

其想法是将5x5网格构建为一块板,填充“O”。我使用的正确代码是:

board = []
board_size=5

for i in range(board_size):

    board.append(["O"] *5)
然而,我不明白为什么这没有在一行中创建25个“O”,因为我从未指定迭代到单独的行。我试过了

for i in range(board_size):

    board[i].append(["O"] *5)
但这给了我一个错误:
索引器错误:列表索引超出范围
。有人能解释为什么第一个是正确的而第二个不是

["O"]*5
这将创建一个大小为5的列表,其中填充“O”:
[“O”、“O”、“O”、“O”]

这会将上述列表追加(添加到列表末尾)到board[]。在循环中执行此操作5次,将创建一个包含上述5个列表的列表

[["O", "O", "O", "O", "O"],
["O", "O", "O", "O", "O"],
["O", "O", "O", "O", "O"],
["O", "O", "O", "O", "O"],
["O", "O", "O", "O", "O"]]
您的代码不起作用,因为列表在python中没有用大小初始化,它只是作为一个空容器启动
[]
。为了让您的工作顺利进行,您可以:

board = [[],[],[],[],[]]
在你的循环中:

board[i] = ["O"]*5

我认为问题很简单:当运行代码时,数组是空的

你可以发布一个

board = [[], [], [], [], []]
将其初始化为嵌套的五位数组

还可以使用dict模拟无限嵌套数组:

board=defaultdict(lambda:defaultdict(lambda:[]))

这是因为每次运行
board.append([“O”]*5)
时都会创建一个新列表(因为append语句中使用了方括号)

如果使用
board.append(“O”*5)
,则会得到一个包含五个元素的列表,如:

['oooo','OOOOO','OOOOO','OOOOO','OOOOO']

*5乘以字符串。如果您只是在交互式提示符下运行
'O'*5
,您会得到:

“噢”

但是,如果运行
['O']*5
,它会将列表中的文本相乘,得到一个包含五个元素的列表

['O','O','O','O','O']


您附加了五个列表,每个列表有5个元素。

Python列表开始时为空:

board = [] # empty list
与某些编程语言不同,您不指定或初始化数组的边界,因此如果您尝试按索引访问:

board[0]
您将获得一个
索引器
;还没有任何索引
0

在第一个版本中,在通过
for
循环的每次行程中,您
附加
(添加到列表末尾)一个包含五个
“O”
的新列表。如果您希望
列表包含25个
“O”
s,则应使用
扩展

for i in range(board_size):
    board.extend(["O"] *5)
在此代码中,
以空列表开始<代码>[“O”]*5将创建一个等于
[“O”、“O”、“O”、“O”]
的列表。然后它将被附加到列表
。在本例中,这将发生5次,因为
board\u size==5

for i in range(board_size):

    board[i].append(["O"] *5)

由于
append()
list
类的一种方法,除非索引
i
中的项是一个列表,否则这将不起作用。如果您想在
i
中插入内容,您可以使用列表方法
insert()

board = []
for i in range(5):
    board.append(["O"]*5)

print board
board = []

def print_board(board):
    for x in range(5):
        board= (["O"] * 5)
        print board
    return board

print_board(board)
代码学院的第二步

board = []
for i in range(5):
    board.append(["O"]*5)

print board
board = []

def print_board(board):
    for x in range(5):
        board= (["O"] * 5)
        print board
    return board

print_board(board)
代码学院的第三步

board = []

def print_board(board):
    for x in range(5):
        board= (["O"] * 5)
        print " ".join(board)
    return board

print_board(board)
from random import randint

board = []

for x in range(0,5):
    board.append(["O"] * 5)

def print_board(board):
    for row in board:
        print " ".join(row)

def random_row(board):
    return randint(0, len(board) - 1)

def random_col(board):
    return randint(0, len(board[0]) - 1)

ship_row = random_row(board)
ship_col = random_col(board)


guess_row = int(raw_input("Guess Row: "))
guess_col = int(raw_input("Guess Col: "))
第四步

from random import randint 

board = []

for x in range(0, 5):
    board.append(["O"] * 5)

def print_board(board):
    for row in board:
        board = " ".join(row)
        return  board

def random_row(board):
    return randint(0, len(board) - 1)

def random_col(board):
    return randint(0, len(board) - 1)

print print_board(board)
print random_row(board)
print random_col(board)
在codeacademy上的第五步

board = []

def print_board(board):
    for x in range(5):
        board= (["O"] * 5)
        print " ".join(board)
    return board

print_board(board)
from random import randint

board = []

for x in range(0,5):
    board.append(["O"] * 5)

def print_board(board):
    for row in board:
        print " ".join(row)

def random_row(board):
    return randint(0, len(board) - 1)

def random_col(board):
    return randint(0, len(board[0]) - 1)

ship_row = random_row(board)
ship_col = random_col(board)


guess_row = int(raw_input("Guess Row: "))
guess_col = int(raw_input("Guess Col: "))
最后一步是。。玩游戏BettleShip CodeAcademy 董事会=[] 对于范围(5)内的x: 董事会追加([“O”]*5)

def打印板(板): 对于板中的行: 打印“”连接(行)

打印“让我们玩战舰吧!” 印刷电路板

def随机_行(板): 返回randint(0,len(板)-1)

def随机_柱(板): 返回randint(0,len(板[0])-1)

船行=随机船行(板) 船列=随机列(船列) 打印发货行 打印船型

圈数=0 赢=0 对于交车范围(4): 如果第4圈)或(猜列<0或猜列>4): 打印“哦,那甚至不在海里。” elif(董事会[猜测行][猜测列]=“X”): 打印“你已经猜到了。” 其他: 打印“你错过了我的战舰!” 棋盘[猜一排][猜一列]=“X” 打印(旋转+1) 印刷电路板 elif圈数==3: 打印“游戏结束” 其他: 打印“最大翻转尝试已结束重试”
代码应该是这样的。

董事会=[]
对于范围(0,5)内的i:
董事会追加([“O”]*5)
印刷(电路板)