🧩 Как создать судоку на питоне | Подробная инструкция и примеры 🐍

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

Для создания судоку на питоне вам потребуется использовать свойства и функции, чтобы генерировать и проверять правильность судоку.

Вот пример кода, который поможет вам создать судоку:

import random


def create_sudoku():
    board = [[0] * 9 for _ in range(9)]

    for i in range(9):
        for j in range(9):
            # Генерируем случайное число от 1 до 9
            num = random.randint(1, 9)
            # Проверяем, чтобы это число не нарушило правила судоку
            while not is_valid(board, i, j, num):
                num = random.randint(1, 9)
            # Заполняем ячейку доски сгенерированным числом
            board[i][j] = num

    return board


def is_valid(board, row, col, num):
    # Проверяем, чтобы число не находилось в том же столбце
    for i in range(9):
        if board[i][col] == num:
            return False

    # Проверяем, чтобы число не находилось в той же строке
    for j in range(9):
        if board[row][j] == num:
            return False

    # Проверяем, чтобы число не находилось в том же квадрате
    start_row = (row // 3) * 3
    start_col = (col // 3) * 3
    for i in range(start_row, start_row + 3):
        for j in range(start_col, start_col + 3):
            if board[i][j] == num:
                return False

    return True


sudoku = create_sudoku()
print(sudoku)

В этом примере мы используем двумерный массив для представления судоку. Функция create_sudoku() генерирует случайные числа и проверяет их на правильность с помощью функции is_valid(). Если число проходит проверку, оно заполняется в соответствующую ячейку доски.

Вы можете запустить этот код, чтобы получить сгенерированное судоку в консоли.

Надеюсь, этот код поможет вам создать судоку на питоне!

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

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

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

Шаг 1: Создание игровой доски

Первым шагом в создании судоку является создание игровой доски. Мы можем использовать двумерный список для представления доски. Каждый элемент списка будет представлять одну ячейку на доске. Начальное состояние доски будет содержать некоторые значения, которые уже известны, а остальные ячейки будут пустыми.


    board = [
        [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]
    ]
  

В примере выше, нули представляют пустые ячейки, которые мы будем заполнять во время игры. Запишите свое начальное состояние доски в переменную "board".

Шаг 2: Проверка правильности решения

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


    def is_valid(board):
        for i in range(9):
            row = set()
            col = set()
            square = set()
            for j in range(9):
                # Проверка для текущей строки
                if board[i][j] in row:
                    return False
                row.add(board[i][j])
                
                # Проверка для текущего столбца
                if board[j][i] in col:
                    return False
                col.add(board[j][i])
                
                # Проверка для текущего квадрата 3x3
                row_index = 3*(i//3) + j//3
                col_index = 3*(i%3) + j%3
                if board[row_index][col_index] in square:
                    return False
                square.add(board[row_index][col_index])
        return True
  

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

Шаг 3: Решение судоку

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


    def solve_sudoku(board):
        for i in range(9):
            for j in range(9):
                if board[i][j] == 0:
                    for k in range(1, 10):
                        if is_valid_move(board, i, j, k):
                            board[i][j] = k
                            if solve_sudoku(board):
                                return True
                            board[i][j] = 0
                    return False
        return True
  

Функция "solve_sudoku" проверяет каждую пустую ячейку на возможные значения от 1 до 9. Если значение является допустимым ходом, оно будет установлено в текущую ячейку, и функция будет вызвана рекурсивно для заполнения следующей пустой ячейки. Если функция успешно заполнит всю доску и вернется "True", это означает, что судоку была правильно решена.

Шаг 4: Интерфейс пользователя

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


    def print_board(board):
        for i in range(9):
            for j in range(9):
                print(board[i][j], end=' ')
            print()
        print()

    def play_sudoku():
        print("Добро пожаловать в игру судоку!")
        print("Введите значения от 1 до 9 для заполнения ячеек, или 0 для пустой ячейки.")
        print("Введите 'q', чтобы закончить игру.\n")
        
        board = [
            [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]
        ]
        
        while True:
            print_board(board)
            
            row = int(input("Введите номер строки (от 1 до 9): ")) - 1
            if row < 0 or row >= 9:
                print("Некорректный номер строки. Попробуйте еще раз.")
                continue
            
            col = int(input("Введите номер столбца (от 1 до 9): ")) - 1
            if col < 0 or col >= 9:
                print("Некорректный номер столбца. Попробуйте еще раз.")
                continue

            value = int(input("Введите значение (от 1 до 9): "))
            if value < 0 or value > 9:
                print("Некорректное значение. Попробуйте еще раз.")
                continue

            board[row][col] = value

            if is_valid(board):
                if solve_sudoku(board):
                    print("Поздравляю! Вы правильно решили судоку!")
                    break
                else:
                    print("Текущее состояние доски неверное. Продолжайте решать судоку.")
            else:
                print("Некорректное состояние доски. Продолжайте решать судоку.")
            
            print()
  

Функция "print_board" выводит текущее состояние доски, а функция "play_sudoku" позволяет пользователю вводить значения в пустые ячейки и проверять правильность своего решения.

Заключение

Теперь вы знаете, как создать игру судоку на языке Python. Мы рассмотрели шаги, необходимые для создания игровой доски, проверки правильности решения, решения самой игры и создания интерфейса пользователя. Надеюсь, эта статья была полезной и помогла вам лучше понять судоку и программирование на Python.

Видео по теме

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

Решение Судоку на Python

Create Sudoku Solver with Python in 20 minutes

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

🔍 Как перенести текст в print python: простой способ и инструкция | SEO-оптимизированный заголовок

Как определить максимальное значение в списке Python? 🔎🐍

🔍 Как найти индекс значения в списке Python? 🐍

🧩 Как создать судоку на питоне | Подробная инструкция и примеры 🐍

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

🧐 Что значит init в 🐍 Python? Узнайте все о инициализации в Питоне

Как правильно использовать else в Python? Научись с помощью этих простых шагов! 😎