代码不起作用,清除错误消息,但找不到源代码



我有以下代码,根本找不到错误的原因。 这是一个井字游戏,它接受用户输入并将其放在板上,同时检查并决定它是否是平局,或者是否有任何玩家获胜。我在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
theBoard = " " * 10
# later...
theBoard[2] = # anything

这是行不通的,因为str是不可变的,也就是说,您无法更改它们的各个元素。如果要更改字符串的元素,则无法将其转换为list

将 Board 更改为列表而不是字符串。

在 Python 中,字符串是不可变的,因此您无法就地更改其字符。

相关内容

最新更新