簡體   English   中英

為戰艦創建並初始化5x5網格

[英]Create and initialize 5x5 grid for Battleships

所以我剛剛完成了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 任何人都可以解釋為什么第一個是正確的而不是第二個?

["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

Python列表從空開始:

board = [] # empty list

與某些編程語言不同,您不指定或初始化數組的邊界,因此如果您嘗試通過索引訪問:

board[0]

你會得到一個IndexError ; 還沒有任何索引0

在第一個版本中,在每次通過for循環的行程中,您append (添加到列表的末尾)一個包含五個"O"新列表 如果您希望board列表包含25 "O" ,則應使用extend代替:

for i in range(board_size):
    board.extend(["O"] *5)

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

我認為問題很簡單:當你運行代碼時,你的數組是空的!

你可以發一個

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

將其初始化為嵌套的五位數組。

您還可以使用dict來模擬無限嵌套的數組:

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

這是因為每次運行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個元素。

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處插入一些東西,你會使用list方法insert()

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)

第四步

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上的第五步buttleship

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):for board in board:print“”。join(row)

打印“讓我們玩戰艦!” 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)print ship_row print ship_col

turn = 0 win = 0 for turn in range(4):if turn <= 5:guess_row = int(raw_input(“Guess Row:”))guess_col = int(raw_input(“Guess 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"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM