Python Tic Tac Toe程序中的索引器我有问题
回溯:Python Tic Tac Toe程序中的索引器我有问题,python,debugging,indexing,tic-tac-toe,Python,Debugging,Indexing,Tic Tac Toe,回溯: I've pasted the code here: X = "X" O = "O" board = [] EMPTY = "" def instructions_prompt (): print "\t\t\tNoughts and Crosses" print \ """Foolish human. Now that you've entered this Python program, there is no exit. None!
I've pasted the code here:
X = "X"
O = "O"
board = []
EMPTY = ""
def instructions_prompt ():
print "\t\t\tNoughts and Crosses"
print \
"""Foolish human. Now that you've entered this Python program,
there is no exit. None! (At any point in the game if you feel
like you are intimidated by my presence, hit 0 to exit)
This challenge of wits will be one of many failures in your life.
The instructions are as follows:
1. Select a number from the following key:
0 | 1 | 2
---------
3 | 4 | 5
---------
6 | 7 | 8
to place X or O which is predetermined by whether or not you start
the game.
2. Try to save face while failing. And don't talk about Fight Club."""
def start_prompt ():
choice = raw_input ("Would you like to go first (Y/N)?")
lower = choice.lower()
if lower == "y":
human = X
computer = O
print "You're",human
print "I am",computer
elif lower == "n":
computer = X
human = O
print "You're",human
print "I'm in",computer
return human, computer
def display_board (board):
print "",board[0],"|",board[1],"|",board[2],""
print "---------"
print "",board[3],"|",board[4],"|",board[5],""
print "---------"
print "",board[6],"|",board[7],"|",board[8],""
def turn_switcher (turn):
if turn == X:
return O
else:
return X
def fresh_board ():
for i in range (9):
board.append (EMPTY)
return board
def request_move ():
try:
square = int(raw_input("Where'd you like your square to be?"))
if square>8 or square<0:
print "This program can't proceed as that number is not on the board."
else:
return square
except:
print "That's not a number on the board. This program can't proceed."
def legal_moves (board):
legal_moves = []
for i in range (9):
if board [i] == EMPTY:
legal_moves.append(i)
return legal_moves
def winner (board):
if board[0] == board [1] == board [2] != EMPTY:
winner = board [0]
return winner
elif board [0] == board [3] == board [6] != EMPTY:
winner = board [0]
return winner
elif board [0] == board [4] == board [8] != EMPTY:
winner = board [0]
return winner
elif board [1] == board [4] == board [7] != EMPTY:
winner = board [1]
return winner
elif board [2] == board [5] == board [8] != EMPTY:
winner = board [2]
return winner
elif board [2] == board [4] == board [6] != EMPTY:
winner = board [2]
return winner
elif board [6] == board [7] == board [8] != EMPTY:
winner = board [8]
return winner
elif EMPTY not in board:
return None
def human_move (board, square):
legal = legal_moves(board)
if square not in legal:
print "This is not a legal move"
sys.exit()
else:
return square
def computer_move (computer, board, human):
best = (4,0,8,2,6,1,3,5,7)
board = board [:]
legal = legal_moves(board)
for i in legal:
board[i] = computer
if winner(board) == computer:
return i
board = EMPTY
#Stopping human from winning
for i in legal_moves(board):
board [i] = human
if winner(board) == human:
return i
for i in best:
if i in legal_moves(board):
return i
def main ():
instructions_prompt ()
human, computer = start_prompt ()
turn = X
board = fresh_board()
request_move ()
display_board (board)
while not winner(board):
if turn == human:
square = request_move()
move = human_move (board, square)
board[move] = human
else:
move = computer_move(computer, board, human)
board[move] = computer
display_board(board)
turn = turn_switcher(turn)
main ()
raw_input ("Enter a key to end.")
你对“计算机移动”功能的论点混淆了。在第113行,参数按计算机、电路板、人的顺序排列。然而,在第147行,计算机移动被称为,顺序是板,计算机,人 Python给您带来了令人困惑的索引错误,因为Python字符串实际上只是字符列表。例如
Traceback (most recent call last):
File "C:\Users\COMPAQ\Desktop\NoughtsCrosses.py", line 152, in <module>
main ()
File "C:\Users\COMPAQ\Desktop\NoughtsCrosses.py", line 147, in main
move = computer_move(computer, board, human)
File "C:\Users\COMPAQ\Desktop\NoughtsCrosses.py", line 118, in computer_move
board[i] = computer
TypeError: 'str' object does not support item assignment
更新:由于计算机移动的最后一行,您将收到此新错误。它应该是board[i]=EMPTY,而不是board=EMPTY。如果可能的话,尽量使问题独立。它使回答者更容易回答,因此即使网络上的所有其他站点一夜之间消失,也应该保持有用!那很有趣,我不知道。但是,当我更改参数时,同样的片段会出现错误。我已将更改添加到原始问题中。谢谢你再看一遍
>>> "foo"[2] == "o"
True