gpt4 book ai didi

python - Tic-Tac-Toe 程序中的 IndexErrors 我遇到了问题

转载 作者:行者123 更新时间:2023-11-28 22:04:55 25 4
gpt4 key购买 nike

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.")

引用:

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

最佳答案

您将函数参数混淆了 computer_move .在第 113 行,参数的顺序是 computer , board , human .但是,在第 147 行,其中 computer_move被调用,顺序为board , computer , human .

Python 给您带来令人困惑的索引错误,因为 Python 字符串实际上只是字符列表。例如。

>>> "foo"[2] == "o"
True

更新:由于 computer_move 的最后一行,您收到了这个新错误.应该是board[i] = EMPTY而不是 board = EMPTY .

关于python - Tic-Tac-Toe 程序中的 IndexErrors 我遇到了问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6092711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com