import random class Game: def __init__(self): self.red = 2021 self.green = 2022 self.current = "Игрок" def get_divisors(self, n): return [i for i in range(1, n + 1) if n % i == 0] def move(self, color, n): if color == "r": if self.green == 0: return False if n in self.get_divisors(self.green) and n <= self.red: self.red -= n return True elif color == "g": if self.red == 0: return False if n in self.get_divisors(self.red) and n <= self.green: self.green -= n return True return False def computer_move(self): if self.red == 0 and self.green == 0: return options = [] if self.red > 0 and self.green > 0: for d in self.get_divisors(self.green): if d <= self.red: options.append(("r", d)) for d in self.get_divisors(self.red): if d <= self.green: options.append(("g", d)) if not options: return color, n = random.choice(options) self.move(color, n) if color == "r": print(f"Компьютер убрал {n} красных камней") else: print(f"Компьютер убрал {n} зелёных камней") def is_over(self): return self.red == 0 and self.green == 0 while True: game = Game() while True: print(f"\nКрасные: {game.red}, Зелёные: {game.green}") if game.current == "Игрок": try: color = input("Выберите цвет (r/g) или exit: ") if color == "exit": break n = int(input("Введите количество: ")) if game.move(color, n): if game.is_over(): print("Вы победили!") break game.current = "Компьютер" else: print("Некорректный ход") except: print("Ошибка ввода") else: game.computer_move() if game.is_over(): print("Победил компьютер") break game.current = "Игрок" if input("Сыграть ещё? (y/n): ") != "y": break