🧩 Как создать судоку на питоне | Подробная инструкция и примеры 🐍
Как создать судоку на питоне?
Для создания судоку на питоне вам потребуется использовать свойства и функции, чтобы генерировать и проверять правильность судоку.
Вот пример кода, который поможет вам создать судоку:
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.