X = "X" O = "O" EMPTY = " " TIE = "ничья" NUM_SQUARES = 9 def display_instruct(): """Выводит инструкцию для игрока""" print( """ добро пожаловать в игру крестики-нолики сдесь вы будите играть с ИИ вы должни победить его и доказать свое право на существование поле для игры +---+---+---+ | 0 | 1 | 2 | +---+---+---+ | 3 | 4 | 5 | +---+---+---+ | 6 | 7 | 8 | +---+---+---+ \n """ ) # основная часть print("это инструкция для игры в XO") display_instruct() print("надеюсь все понятно") 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("хочешь ходить первым? (y/n): ") if go_first == "y": print("\nНу что же даю тебе фору: играйте крестиками") human = "X" computer = "O" else : print("\nТвоя удаль тебя погубит... Буду начинать я") computer = "X" human = "O" return computer, human 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("\t", board[3], "|", board[4], "|", board[5]) print("\t", "----------") print("\t", board[6], "|", board[7], "|", board[8]) 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 return None def human_move(board, human): legal = legal_moves(board) move = None while move not in legal: move = ask_number("Твой ход. выбери одно из полей (0 - 8): ", 0, NUM_SQUARES) if move not in legal: print("\nЭто поле уже занято") print("ладно...") return move def computer_move(board, human, computer): """ Делает ход за ПК пр """ board = board[:] BEST_MOVES = (4,0,2,6,8,1,3,5,7) print("Я беру поле номером", end = " ") for move in legal_moves(board): board[move] = computer if winner(board) == computer: print(move) return move board[move] = EMPTY for move in legal_moves(board): board[move] = human if winner(board) == human: print(move) return move board[move] = EMPTY for move in BEST_MOVES: if move in legal_moves(board): print(move) return move def next_turn(turn): if turn == X: return O else: return X def congrat(theWinner, computer, human): if theWinner != TIE: print("три " , theWinner, "в ряд") else: print(TIE) if theWinner == computer: print("выиграл ПК") elif theWinner == human: print("Выиграл Человек") elif theWinner == TIE: print("ничья") def main(): display_instruct() computer, human = pieces() turn = X board = new_board() display_board(board) while not winner(board): if turn == human: move = human_move(board, human) board[move] = human else: move = computer_move(board, computer, human) board[move] = computer display_board(board) turn = next_turn(turn) theWinner = winner(board) congrat(theWinner, computer, human) main() I do not understand why it does not work when I press on y
returnis hidden in theelseblock. Accordingly, if the condition is met, the function will returnNone, which will lead to an error. - mkkik