如何将数独生成器输出的连续数字串转换为二维列表网格格式
实现思路
首先拆解原boardToCode的逻辑:它将9*9的二维数独数组按行遍历,把所有元素转为字符串后拼接(原代码用逗号分隔,你给出的生成器输出是无分隔的连续数字串,两种情况的处理逻辑只差一步分割操作)。逆逻辑只要反过来操作即可:
- 把输入的字符串转为长度为81的整数一维数组
- 将一维数组按每9个元素切割为一组,拼接为9行的二维数组,就是目标数独格式
代码实现
适配连续数字串输入(你提供的数独生成器输出格式)
def codeToBoard(self, input_code=None): raw_code = input_code if input_code else self.code # 逐字符转换为整数,得到长度为81的一维列表 one_dim_list = [int(c) for c in raw_code.strip()] # 每9个元素切分为一行,生成9*9二维数组 sudoku_board = [one_dim_list[i*9 : (i+1)*9] for i in range(9)] if not input_code: self.board = sudoku_board return sudoku_board
适配原boardToCode返回的逗号分隔字符串输入
如果输入是boardToCode返回的逗号分隔格式,只需要修改一维列表生成逻辑即可:
# 把上面代码里的one_dim_list生成行替换为下面的即可 one_dim_list = [int(item) for item in raw_code.strip().split(',')]
输出指定格式
如果需要打印成你给出的my_sudoku = [的代码格式,增加如下打印方法即可:
def print_sudoku_board(board): print("my_sudoku =[") for row in board: print(f" {row},") print("]")
调用示例:
# 假设你拿到生成器输出的字符串 sudoku_str = "800034065534267891100589304213000706456010000098640502900358000020476109687920050" board = codeToBoard(sudoku_str) print_sudoku_board(board)
运行后直接输出你需要的格式内容。
内容的提问来源于stack exchange,提问作者Turgut Aydemir
相关产品推荐
相关产品推荐

