2016-07-07 82 views
0

這裏是我的所有代碼如何分配字符串中的字符?

from random import randint 

board = [] 

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

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

print_board(board) 

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

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

print("Play some battleship") 

ship_row = ship_row(board) 
ship_col = ship_col(board) 

print(ship_row) 
print(ship_col) 


for i in range(4): 
    print("Turn "), i + 1 
     guess_row = int(input("Guess Row:")) 
     guess_col = int(input("Guess Col:")) 

if guess_row == ship_row and guess_col == ship_col: 
    print("Congratulations! You sunk my battleship!") 
    break 
else: 
    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" 
     if (i == 3): 
      print("Game Over") 
    print_board(board) 

當這樣跑,你在董事會得到一個錯誤[guess_row] [guess_col] =「X」這樣的問題是如何插入在這兩個指標的串X ?

+0

有關錯誤代碼的問題應該總是包含* full *錯誤消息和回溯,以及代碼應該執行的操作的描述。你也應該將你的代碼減少到[MCVE]。這個問題包括許多與您的問題無關的鱈魚。 – skrrgwasme

回答

3

board是五個5個字符的字符串的列表。您正試圖分配給現有字符串中的特定字符,即突變字符串對象。這是不可能的,因爲Python中的字符串是immutableTutorial也提到了這一點)。

In [1]: row = '0' * 5 

In [2]: row 
Out[2]: '00000' 

In [3]: row[3] = 'X' 
--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-3-954d03c86f5a> in <module>() 
----> 1 row[3] = 'X' 

TypeError: 'str' object does not support item assignment 

你可以,但是,組織board爲字符的列表的列表,在這種情況下,你的作業就會工作。

In [4]: row = ['0'] * 5 

In [5]: row 
Out[5]: ['0', '0', '0', '0', '0'] 

In [6]: row[3] = 'X' 

In [7]: row 
Out[7]: ['0', '0', '0', 'X', '0']