Немного подправил гуляющую по интернету реализацию крестиков-ноликов, и прикрутил к ней бота, тыкающего нолик рандомно. Ходит он первым, чтобы достичь хоть какого-то паритета с игроком.
import random
board = list(range(1, 10))
WIN_MAP = ((0, 1, 2), (3, 4, 5), (6, 7, 8), (0, 3, 6),
(1, 4, 7), (2, 5, 8), (0, 4, 8), (2, 4, 6))
def draw_board(board):
print("-" * 13)
for i in range(3):
print("|", board[0 + i * 3],
"|", board[1 + i * 3],
"|", board[2 + i * 3], "|")
print("-" * 13)
def player_turn():
draw_board(board)
while True:
try:
player_answer = int(input("Куда поставим X?\n>>> "))
except:
print("Некорректный ввод. Введите число.")
continue
if player_answer >= 1 and player_answer <= 9:
if str(board[player_answer - 1]) not in "X0":
board[player_answer - 1] = 'X'
break
else:
print("Эта клетка уже занята!")
continue
else:
print("Некорректный ввод. Введите число от 1 до 9.")
continue
return
def check_win(board):
for each in WIN_MAP:
if board[each[0]] == board[each[1]] == board[each[2]]:
return board[each[0]]
return False
def bot_turn():
while True:
bot_choice = random.choice(board)
if str(bot_choice) not in "X0":
board[bot_choice - 1] = '0'
print('Бот поставил 0 на', bot_choice)
return True
else:
continue
def main(board):
counter = 0
while True:
if counter % 2 == 0:
bot_turn()
else:
player_turn()
counter += 1
if counter > 4:
tmp = check_win(board)
if tmp == '0':
print("Победил бот")
break
elif tmp == 'X':
print("Вы победили!")
break
if counter == 9:
print("Ничья!")
break
draw_board(board)
input("Нажмите Enter для выхода.")
return 0
if __name__ == '__main__':
main(board)