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

  • Tabs in several places broken. Namely: return in ask_yes_no one left, return in pieces also one tab left - Nikita Vasilchenko
  • What behavior do you expect? - Pavel Durmanov
  • one
    If you have an error, its text is desirable to bring in the question. Here you can immediately say that in the function return is hidden in the else block. Accordingly, if the condition is met, the function will return None , which will lead to an error. - mkkik
  • all corrected, but not determined by the winner! - Canno

0