Как написать судоку на Python: подробное руководство для начинающих

Чтобы написать игру в судоку на Python, вы можете использовать следующий код:

      
         # Импорт библиотеки для работы с судоку
         import numpy as np

         def solve_sudoku(board):
            # Проверка, если судоку уже решено, то возвращаем True
            if is_solved(board):
               return True
               
            # Находим пустую ячейку
            row, col = find_empty_cell(board)
            
            # Пробуем значения от 1 до 9
            for num in range(1, 10):
               # Проверяем, если значение подходит, то присваиваем его
               if is_valid(board, row, col, num):
                  board[row][col] = num

                  # Рекурсивно вызываем функцию для следующей ячейки
                  if solve_sudoku(board):
                     return True

                  # Если не получилось решить, то откатываем назад и пробуем другое значение
                  board[row][col] = 0

            # Если нет подходящего значения, то вернем False
            return False

         # Функция для проверки, если судоку решено
         def is_solved(board):
            for row in range(9):
               for col in range(9):
                  if board[row][col] == 0:
                     return False
            return True

         # Функция для поиска пустой ячейки
         def find_empty_cell(board):
            for row in range(9):
               for col in range(9):
                  if board[row][col] == 0:
                     return row, col
            return None

         # Функция для проверки, если значение подходит
         def is_valid(board, row, col, num):
            # Проверка в строке
            for i in range(9):
               if board[row][i] == num:
                  return False
            
            # Проверка в столбце
            for i in range(9):
               if board[i][col] == num:
                  return False
            
            # Проверка в квадрате 3x3
            start_row = (row // 3) * 3
            start_col = (col // 3) * 3
            for r in range(start_row, start_row + 3):
               for c in range(start_col, start_col + 3):
                  if board[r][c] == num:
                     return False
            
            return True

         # Пример использования функции
         board = np.array([
            [5, 3, 0, 0, 7, 0, 0, 0, 0],
            [6, 0, 0, 1, 9, 5, 0, 0, 0],
            [0, 9, 8, 0, 0, 0, 0, 6, 0],
            [8, 0, 0, 0, 6, 0, 0, 0, 3],
            [4, 0, 0, 8, 0, 3, 0, 0, 1],
            [7, 0, 0, 0, 2, 0, 0, 0, 6],
            [0, 6, 0, 0, 0, 0, 2, 8, 0],
            [0, 0, 0, 4, 1, 9, 0, 0, 5],
            [0, 0, 0, 0, 8, 0, 0, 7, 9]
         ])

         # Решаем судоку
         solve_sudoku(board)

         # Выводим результат
         print(board)
      
   

В этом коде мы используем библиотеку numpy для работы с судоку. Мы определяем функции для проверки, решения и вывода судоку. Затем мы создаем пример судоку, решаем его и выводим результат.

Детальный ответ

Как написать судоку на питоне?

В этой статье мы поговорим о том, как написать игру "Судоку" на языке программирования Python. Судоку - это логическая головоломка, в которой нужно заполнить таблицу 9x9 цифрами от 1 до 9 таким образом, чтобы в каждой строке, каждом столбце и каждом малом квадрате 3x3 все цифры встречались ровно один раз.

Шаг 1: Создание игрового поля

Первым шагом мы должны создать игровое поле для Судоку. Мы можем использовать двумерный массив или список списков, чтобы представить таблицу 9x9. Каждая ячейка будет содержать число от 1 до 9 или значение None, если ячейка пустая.


  # Создание пустого поля
  игровое_поле = [[None for _ in range(9)] for _ in range(9)]
  
  # Заполнение поля начальными значениями
  игровое_поле[0][0] = 5
  игровое_поле[0][1] = 3
  # остальные начальные значения
  

Шаг 2: Проверка правил

Следующим шагом мы должны реализовать функцию, которая будет проверять, что правила игры не нарушены. Эта функция будет принимать координаты ячейки и проверять соседние ячейки в строке, столбце и малом квадрате 3x3. Если какое-то правило нарушено, функция должна вернуть False.


  def проверить_правила(поле, строка, столбец, число):
      # Проверка строки
      for столбец_в_строке in range(9):
          if поле[строка][столбец_в_строке] == число:
              return False
      
      # Проверка столбца
      for строка_в_столбце in range(9):
          if поле[строка_в_столбце][столбец] == число:
              return False
      
      # Проверка малого квадрата 3x3
      начало_строки = (строка // 3) * 3
      начало_столбца = (столбец // 3) * 3
      for i in range(3):
          for j in range(3):
              if поле[начало_строки + i][начало_столбца + j] == число:
                  return False
      
      return True
  

Шаг 3: Рекурсивный алгоритм решения

Для решения Судоку мы будем использовать рекурсивный алгоритм. На каждом шаге алгоритма мы будем проверять доступные значения для текущей ячейки и пытаться установить их. Затем мы будем рекурсивно вызывать себя для следующей нерешенной ячейки, пока не найдем решение или не обнаружим, что текущая позиция неправильная.


  def решить_судоку(поле):
      for строка in range(9):
          for столбец in range(9):
              if поле[строка][столбец] is None:
                  for число in range(1, 10):
                      if проверить_правила(поле, строка, столбец, число):
                          поле[строка][столбец] = число
                          if решить_судоку(поле):
                              return True
                          поле[строка][столбец] = None
                  return False
      return True
  

Шаг 4: Тестирование и вывод результата

Чтобы протестировать нашу реализацию, мы можем создать игровое поле с несколькими известными значениями и попытаться его решить.


  игровое_поле = [
    [5, 3, None, None, 7, None, None, None, None],
    [6, None, None, 1, 9, 5, None, None, None],
    # остальные значения
  ]
  
  if решить_судоку(игровое_поле):
      print("Решение найдено!")
      # Вывод решенного поля
  else:
      print("Нет решения.")
  

Это основные шаги, которые нужно выполнить для написания игры "Судоку" на языке программирования Python. Вы можете использовать этот код в своих проектах или добавить свои улучшения к нему. Удачи в программировании!

Видео по теме

Решение Судоку (Sudoku) || Python задачи с технических собеседований

Задача Судоку (Hard) | Решаем задачи с Leetcode

Create Sudoku Solver with Python in 20 minutes

Похожие статьи:

Зачем нужны методы класса Python: руководство для начинающих

📊 Как импортировать файл csv в Python и использовать его для анализа данных?

Как удалить кнопку в tkinter python

Как написать судоку на Python: подробное руководство для начинающих

Как превратить список в кортеж в Python

Как много денег можно заработать на Python?

Как открыть скрипт написанный на Python: простые инструкции и советы