#Задача 12. Вариант 28.
#1-50. Разработайте игру "Крестики-нолики". (см. М.Доусон Программируем на Python гл. 6).

# Mitin D.S., 28.05.2016, 14:53
X="X"
O="O"
EMPTY=" "
TIE="Ничья"
NUM_SQUARES=9

def display_instruct():
	print('''
Привет, студент! Давай поиграем в крестики-нолики! Вводи число от 0 до 8. Числа соответствуют полям доски - так, поле ниже:
0 | 1 | 2
---------
3 | 4 | 5
---------
6 | 7 | 8''')

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 == "да":
		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Уже занято. Выбери другое поле\n")
	return move
	
def computer_move(board, computer, human):
	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_winner(the_winner, computer, human):
	if the_winner != TIE:
		print("Три", the_winner, "!\n")
	else:
		print("Ничья!\n")
	if the_winner == computer:
		print("Я победил!")
	elif the_winner == human:
		print("Ты выиграл! Молодец!")
	elif the_winner == 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)
	the_winner=winner(board)
	congrat_winner(the_winner, computer, human)
	
main()
input("\n\nНажмите ENTER для продолжения.")
@@ -13,18 +13,18 @@
 %D0%92%D0%B0%D1%80%D0%B8%D0%B0%D0%BD%D1%82 
-28
+15
 .%0A#1-50.
@@ -3337,8 +3337,9 @@
 %D0%B6%D0%B5%D0%BD%D0%B8%D1%8F.%22)
+%0A

Update task_11_15.py