Ответы
Код:
from random import randrange
def display_board(board):
# Функція виводить стан дошки на консоль.
for row in board:
print("+-------+-------+-------+")
for cell in row:
print(f"| {cell} ", end='')
print("|")
print("+-------+-------+-------+")
def enter_move(board):
# Функція запитує користувача про його хід та оновлює дошку.
while True:
try:
move = int(input("Введіть свій хід (від 1 до 9): "))
if 1 <= move <= 9:
row = (move - 1) // 3
col = (move - 1) % 3
if board[row][col] == str(move):
board[row][col] = 'O'
break
else:
print("Цей квадрат вже зайнятий. Спробуйте ще раз.")
else:
print("Введіть число від 1 до 9.")
except ValueError:
print("Неправильний формат вводу. Введіть ціле число від 1 до 9.")
def make_list_of_free_fields(board):
# Функція створює список вільних квадратів на дошці.
free_fields = []
for row in range(3):
for col in range(3):
if board[row][col] != 'X' and board[row][col] != 'O':
free_fields.append((row, col))
return free_fields
def winner_for(board, sign):
# Функція перевіряє, чи є переможець з певним знаком (X або O).
for row in range(3):
if all(board[row][col] == sign for col in range(3)):
return True
for col in range(3):
if all(board[row][col] == sign for row in range(3)):
return True
if all(board[i][i] == sign for i in range(3)) or all(board[i][2 - i] == sign for i in range(3)):
return True
return False
def draw_move(board):
# Функція робить хід комп'ютера та оновлює дошку.
free_fields = make_list_of_free_fields(board)
if free_fields:
row, col = free_fields[randrange(len(free_fields))]
board[row][col] = 'X'
if __name__ == "__main__":
# Початок гри
board = [['1', '2', '3'], ['4', 'X', '6'], ['7', '8', '9']]
display_board(board)
while True:
enter_move(board)
display_board(board)
if winner_for(board, 'O'):
print("Ви виграли!")
break
free_fields = make_list_of_free_fields(board)
if not free_fields:
print("Гра закінчилася в нічию!")
break
draw_move(board)
display_board(board)
if winner_for(board, 'X'):
print("Комп'ютер виграв!")
break