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

时间:2014-01-29 14:47:28

标签: python list grid initialization

所以我刚刚完成了CodeAcademy Battleship问题的一部分,并提交了正确的答案,但我很难理解为什么它是正确的。

这个想法是建立一个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)

但这给了我错误:IndexError: list index out of range。任何人都可以解释为什么第一个是正确的而不是第二个?

7 个答案:

答案 0 :(得分:6)

["O"]*5

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

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

这将上面的列表(添加到列表末尾)附加到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

答案 1 :(得分:2)

Python列表从空开始:

board = [] # empty list

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

board[0]

你会得到IndexError;还没有任何索引0

在第一个版本中,在for循环的每次旅行中,您append(添加到列表末尾)包含五个{{1>的新列表 }}秒。如果您希望"O"列表包含25个board,则应使用"O"代替:

extend

答案 2 :(得分:1)

代码应如下所示。 board = [] for i in range(0, 5): board.append(["O"]*5) print(board)

答案 3 :(得分:0)

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

您可以发出

board = [[], [], [], [], []]

将其初始化为嵌套的五位数组。

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

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

答案 4 :(得分:0)

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

如果您使用board.append("O" *5)代替,则会获得包含以下五个元素的单个列表:

  

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

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

  

'OOOOO'

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

  

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

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

答案 5 :(得分:0)

board = []
board_size=5

for i in range(board_size):

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

在此代码board中以空列表开头。 ["O"] * 5将创建一个等于["O", "O", "O", "O", "O"]的列表。然后将其附加到列表board。从board_size == 5开始,此示例将发生5次。

for i in range(board_size):

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

除非索引i的项目是列表,否则这将无效,因为append()list类的方法。如果您想在i处插入内容,则可以使用列表方法insert()

答案 6 :(得分:0)

codeacademy的第一步

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

print board

codeacademy的第二步

board = []

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

print_board(board)

codeacademy的第三步

board = []

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

print_board(board)

第4步

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

的第四步
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

from random import randint

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

def print_board(board):     对于行内:         打印" "。加入(行)

打印"让我们玩战舰!" print_board(板)

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) 打印ship_row print ship_col

变为= 0 赢= 0 转入范围(4):     如果转< = 5:         guess_row = int(raw_input(" Guess Row:"))         guess_col = int(raw_input("猜猜Col:"))

    if guess_row == ship_row and guess_col == ship_col:
        print "Congratulations! You sunk my battleship!"
        win +=1
        if win == 2:
            break
    else:
        turns +=1
        if (guess_row < 0 or guess_row > 4) or (guess_col < 0 or guess_col > 4):
            print "Oops, that's not even in the ocean."
        elif(board[guess_row][guess_col] == "X"):
            print "You guessed that one already."
        else:
            print "You missed my battleship!"
            board[guess_row][guess_col] = "X"
            print (turn + 1)
        print_board(board)
elif turns == 3:
    print "Game Over"
else:
    print "Max Turn try is over Try Again"