Sudoku Puzzle Checker Python

use*_*351 -12 python

我有一个文件,其中包含一个9x9数独谜题,每个数字之间有空格,如何删除所有空格,还检查列或行中没有重复的数字和3x3子部分

while True:
    try:
        file = input("Enter the filename: ")
        myfile = open (file, "r")
        break
    except FileNotFoundError: 
        print ("The File You Have Entered Does Not Exist")
myfile.close() 
my_var = [myfile]
Run Code Online (Sandbox Code Playgroud)

我基本上不知道如何计算该文件中的数字量而不包括它们之间的空格,以及它们是否是任何重复出现的数字.我已经尝试了一切

Mar*_*ers 6

将一行以空格分隔的数字转换为整数列表:

puzzle = [int(n) for n in line.split()]
Run Code Online (Sandbox Code Playgroud)

并测试数独是否有效:

from itertools import product

block_indices = [[x + y + s for s in (0, 1, 2, 9, 10, 11, 18, 19, 20)]
                 for x, y in product(range(0, 81, 27), range(0, 9, 3))]

def per9(iterable):
    # group iterable in chunks of 9
    return zip(*([iter(iterable)] * 9))

def is_valid_sudoku(s):
    return (
        # rows
        all(len(set(r)) == 9 for r in per9(s)) and
        # columns
        all(len(set(c)) == 9 for c in zip(*per9(s))) and
        # blocks
        all(len(set(s[i] for i in ix)) == 9 for ix in block_indices)
    )
Run Code Online (Sandbox Code Playgroud)

给定一个数独数字列表(81个整数),is_valid_sudoku()如果数字代表有效的Soduku解决方案,则返回True.

该解决方案紧凑,快速,高效; 它使用生成器和all()测试来检测早期行,列或块是否每个都包含9个唯一的整数.没有进行输入验证; 它假设您的输入仅为整数1 - 9.

我将理解它是如何作为练习对读者的作用; 如果你无法向自己解释它是如何工作的,你可能也不想向老师展示它!