Здравствуйте. Переделал игру крестики и нолики из книги Доусона. Все работает корректно, кроме функций, которые меняют игровое поле. Не могу понять: почему программа позволяет ставить отметки в одну и клетку и попросту перезаписывает ее, помогите пожалуйста разобраться.Ошибка ,вероятно, в функциях player1_move(board,player1),player2_move(board,player2,player1) либо в legal_moves(board).Заранее. благодарю.
X = "X"
O = "O"
TIE = "Ничья"
NUM_SQUARES = 9
EMPTY = " "
def ask_yes_no(question):
response = None
while response not in ("y","n"):
response = input(question).lower()
return response
def ask_number(question,low,high):
response = None
while response not in range(low,high):
response = int(input(question))
return response
def pieces():
go_first = ask_yes_no("Будете ходить первым?")
if go_first == "y":
player1 = X
player2 = O
else:
player2 = X
player1 = O
return player2,player1
def new_board():
board = []
for square in range(NUM_SQUARES):
board.append(EMPTY)
return board
def display_board(board):
print("\n\t",board[0],"|",board[1],"|",board[2])
print("\t","---------")
print("\n\t",board[3],"|",board[4],"|",board[5])
print("\t","---------")
print("\n\t",board[6],"|",board[7],"|",board[8],"\n")
def legal_moves(board):
moves = []
for square in range(NUM_SQUARES):
if board[square] == EMPTY:
moves.append(square)
return moves
def winner(board):
WAYS_TO_WIN = ((0,1,2),
(3,4,5),
(6,7,8),
(0,3,6),
(1,4,7),
(2,5,8),
(0,4,8),
(2,4,6))
for row in WAYS_TO_WIN:
if board[row[0]] == board[row[1]] == board[row[2]]!= EMPTY:
winner = board[row[0]]
return winner
if EMPTY not in board:
return TIE
def player1_move(board,player1):
print("Ходит 1 игрок")
legal = legal_moves(board)
move = None
while move not in legal:
move = ask_number("Выбери одно из доступных полей:",0,NUM_SQUARES)
if move not in legal:
print("занято!")
return move
def player2_move(board,player1,player2):
print("Ходит 2 игрок!")
legal = legal_moves(board)
move = None
while move not in legal:
move = ask_number("Выбери одно из доступных полей:",0,NUM_SQUARES)
if move not in legal:
print("Занято!")
return move
def next_turn(turn):
if turn == X:
return O
else:
return X
def congrat_winner(the_winner,player2,player1):
if the_winner != TIE:
print("Победа!")
else:
print("Ничья!")
if winner == player2:
print("Победил 2 игрок!")
elif winner == player1:
print("Победил 1 игрок!")
elif the_winner == TIE:
print("ничья!")
def main():
player2,player1 = pieces()
turn = X
board = new_board()
display_board(board)
while not winner(board):
if turn == player1:
move = player1_move(board,player1)
board[move] = player1
else:
move = player2_move(board,player2,player1)
board[move] = player2
display_board(board)
turn = next_turn(turn)
the_winner = winner(board)
congrat_winner(the_winner,player2,player1)
main()
input()