我有以下代码,根本找不到错误的原因。 这是一个井字游戏,它接受用户输入并将其放置在棋盘上,同时检查并确定是否平局,或者是否有任何玩家获胜。我正在Jupyter笔记本中进行此操作。当任何玩家必须选择棋盘上的位置时,都会出现以下错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-28-e7a9cb1b19c0> in <module>()
107 display_board(theBoard)
108 position = player_choice(theBoard)
--> 109 place_marker(theBoard, player1_marker, position)
110
111 if win_check(theBoard, player1_marker):
<ipython-input-28-e7a9cb1b19c0> in place_marker(board, marker, position)
34 def place_marker(board, marker, position):
35
---> 36 board[position] = marker
37
38
TypeError: 'str' object does not support item assignment
我检查了所有功能,但对我来说似乎无济于事。即使将其与正确的解决方案进行比较(这是一个过程),也绝不会碰运气。 这是代码:
from IPython.display import clear_output
import random
def display_board(board):
clear_output() # Or just print('\n'*100)
print(" | |")
print(" " + board[7] + " | " + board[8] + " | " + board[9])
print(" | |")
print("-----------")
print(" | |")
print(" " + board[4] + " | " + board[5] + " | " + board[6])
print(" | |")
print("-----------")
print(" | |")
print(" " + board[1] + " | " + board[2] + " | " + board[3])
print(" | |")
def player_input():
marker = ""
while not (marker == "X" or marker == "O"):
marker = input("Player 1: Do you want to be X or O? ").upper()
if marker == "X":
return ("X", "O")
else:
return ("O", "X")
def place_marker(board, marker, position):
board[position] = marker
def win_check(board, mark):
return ((board[7] == board[8] == board[9] == mark) or # across the top
(board[4] == board[5] == board[6] == mark) or # across the middle
(board[1] == board[2] == board[3] == mark) or # across the bottom
(board[7] == board[4] == board[1] == mark) or # down the lef tside
(board[8] == board[5] == board[2] == mark) or # down the middle
(board[9] == board[6] == board[3] == mark) or # down the right side
(board[7] == board[5] == board[3] == mark) or # diagonal
(board[9] == board[5] == board[1] == mark)) # diagonal
def choose_first():
flip = random.randint(0,1)
if flip == 0:
return "Player 2"
else:
return "Player 1"
def space_check(board, position):
return board[position] == " "
def full_board_check(board):
for i in range(1,10):
if space_check(board,i):
return False
return True
def player_choice(board):
position = 0
while position not in [1,2,3,4,5,6,7,8,9] or not space_check(board, position):
position = int(input("Choose your next position: (1-9)"))
return position
def replay():
return input("Do you want to play again? Enter Yes or No: ").lower().startswith("y")
print('Welcome to Tic Tac Toe!')
while True:
theBoard = " " * 10
player1_marker, player2_marker = player_input()
turn = choose_first()
print (turn + " will go first.")
play_game = input("Are you ready to play? Enter Yes or No.")
if play_game.lower()[0] == "y":
game_on = True
if turn == "Player 1":
display_board(theBoard)
position = player_choice(theBoard)
place_marker(theBoard, player1_marker, position)
if win_check(theBoard, player1_marker):
display_board(theBoard)
print("Congratulations! You have won the game!")
game_on = False
else:
if full_board_check(theBoard):
display_board(theBoard)
print("The game is a draw!")
break
else:
turn = "PLayer 2"
else:
display_board(theBoard)
position = player_choice(theBoard)
place_marker(theBoard, player2_marker, position)
if win_check(theBoard, player2_marker):
display_board(theBoard)
print("Player 2 has won!")
game_on = False
else:
if full_board_check(theBoard):
display_board(theBoard)
print("The game is a draw!")
break
else:
turn = "PLayer 1"
if not replay():
break
答案 0 :(得分:0)
将董事会更改为列表而不是字符串。
在Python中,字符串是不可变的,因此您不能就地更改其字符。
答案 1 :(得分:0)
theBoard = " " * 10
# later...
theBoard[2] = # anything
这是行不通的,因为str
元素是不可变的,也就是说,您不能更改其各个元素。如果要更改字符串的元素,您不能将其转换为list
。