2014-01-29 52 views
5

所以我剛剛完成了這個問題的一部分,並提交了正確的答案,但無法理解爲什麼它是正確的。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:列表索引超出範圍。任何人都可以解釋爲什麼第一個是正確的,而不是第二個?

謝謝!

回答

6
["O"]*5 

這產生大小爲5的列表,填充有 「O」:["O", "O", "O", "O", "O"]

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

此附加(增加了列表的末尾)上面所列登上[]。在循環中做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 
0

我認爲這個問題很簡單:當你運行你的代碼,你的陣列是空的!

你可以發出

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

將其初始化爲嵌套,五個地方陣列。

你也可以使用一個字典來模擬無限嵌套數組:

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

這是因爲每次運行board.append(["O"] *5)一次創建一個新的列表(因爲追加語句中使用的方括號中)。

如果你要使用board.append("O" *5)代替,你會得到一個列表中包含五個要素:

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

的* 5乘以字符串。如果你只是從一個交互式提示'O' * 5運行你:

'OOOOO'

但是,如果你運行它['O'] * 5乘以列表中的文本,你會得到五個元素的列表。

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

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

2

Python列表開始是空的:

board = [] # empty list 

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

board[0] 

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

在第一個版本,在通過for循環每次出行,你append(添加到列表的末尾)包含五個"O"新的列表。如果你想board名單包含25個"O" S,你應該使用extend代替:

for i in range(board_size): 
    board.extend(["O"] *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()

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) 
buttleship對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: ")) 

最後步驟允許.. Play遊戲BettleShip CodeAcademy

from random import randint 

板= [] 對於x在範圍(5): board.append([「O」] * 5)

def print_board(board): fo r排在板上: print「」.join(row)

print「讓我們玩戰艦吧!「 print_board(板)

DEF random_row(板): 返回randint(0,LEN(板) - 1)

DEF random_col(板): 返回randint(0,LEN(板[0 ]) - 1)

ship_row = random_row(板) ship_col = random_col(板) 打印ship_row 打印ship_col

變爲= 0 贏= 0 用於依次範圍(4): 如果反過來< = 5: guess_row = INT(的raw_input( 「猜行:」)) guess_col = INT(的raw_input( 「猜山口:」))

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

代碼應該看喜歡這個。 board = [] for i in range(0, 5): board.append(["O"]*5) print(board)