﻿{"id":564,"date":"2020-11-04T00:29:12","date_gmt":"2020-11-03T16:29:12","guid":{"rendered":"https:\/\/byy3.com\/?p=564"},"modified":"2021-01-09T10:10:08","modified_gmt":"2021-01-09T02:10:08","slug":"%e4%bd%bf%e7%94%a8python%e7%94%9f%e6%88%90sudoku%e6%b8%b8%e6%88%8f","status":"publish","type":"post","link":"https:\/\/byy3.com\/?p=564","title":{"rendered":"\u4f7f\u7528python\u751f\u6210sudoku\u6e38\u620f\u9644\u52a02\u4e2a\u72ec\u7acb\u7a0b\u5e8f\uff0c\u751f\u6210sudoku\u9898\u5e93\u548c\u89e3\u51b3sudoku\u7684\u7a0b\u5e8f"},"content":{"rendered":"<p>#\u8bf4\u660e\u65b0\u5efasudoku\u6587\u4ef6\u5939\u4e0b\u9762\u7531\u4e24\u4e2a\u6a21\u5757\u7ec4\u6210\u5206\u522b\u4e3a\u4e3b\u7a0b\u5e8fgui.py\u548c\u89e3\u51b3\u6a21\u5757solve.py \u6e38\u620f\u8fd0\u884c\u4e3b\u7a0b\u5e8fgui.py<\/p>\n<p>#\u6e38\u620f\u73a9\u6cd5\u518d\u751f\u6210\u7684\u5df2\u77e5\u4ee3\u7801\u4e2d\u7684\u6570\u7ec4 9x9\u7684\u9898\u76ee \u751f\u6210\u5df2\u77e5\u6e38\u620f\uff0c\u7136\u540e\u518d\u56fe\u5f62\u754c\u9762\u4e2d\u8f93\u5165\u8f93\u5165\u4f7f\u7528\u56de\u8f66\u8fdb\u884c\u786e\u8ba4<\/p>\n<p># GUI.py<br \/>\n# RUN THIS FILE<br \/>\nimport pygame<br \/>\nfrom solver import solve, valid<br \/>\nimport time<br \/>\npygame.font.init()<\/p>\n<p>class Grid:<br \/>\n# To change the starting board change this<br \/>\nboard = [<br \/>\n[0, 0, 0, 0, 2, 4, 0, 0, 3],<br \/>\n[3, 0, 0, 5, 0, 0, 0, 2, 0],<br \/>\n[0, 0, 4, 0, 0, 0, 1, 6, 0],<br \/>\n[0, 7, 6, 1, 0, 0, 0, 0, 0],<br \/>\n[0, 0, 0, 0, 6, 2, 8, 0, 0],<br \/>\n[0, 1, 0, 8, 0, 0, 6, 0, 7],<br \/>\n[0, 3, 0, 4, 0, 0, 5, 0, 8],<br \/>\n[0, 0, 7, 2, 0, 5, 0, 0, 0],<br \/>\n[0, 5, 0, 9, 8, 7, 0, 4, 2]<br \/>\n]<\/p>\n<p>def __init__(self, rows, cols, width, height):<br \/>\nself.rows = rows<br \/>\nself.cols = cols<br \/>\nself.cubes = [[Cube(self.board[i][j], i, j, width, height) for j in range(cols)] for i in range(rows)]<br \/>\nself.width = width<br \/>\nself.height = height<br \/>\nself.model = None<br \/>\nself.selected = None<\/p>\n<p>def update_model(self):<br \/>\nself.model = [[self.cubes[i][j].value for j in range(self.cols)] for i in range(self.rows)]<\/p>\n<p>def place(self, val):<br \/>\nrow, col = self.selected<br \/>\nif self.cubes[row][col].value == 0:<br \/>\nself.cubes[row][col].set(val)<br \/>\nself.update_model()<\/p>\n<p>if valid(self.model, val, (row,col)) and solve(self.model):<br \/>\nreturn True<br \/>\nelse:<br \/>\nself.cubes[row][col].set(0)<br \/>\nself.cubes[row][col].set_temp(0)<br \/>\nself.update_model()<br \/>\nreturn False<\/p>\n<p>def sketch(self, val):<br \/>\nrow, col = self.selected<br \/>\nself.cubes[row][col].set_temp(val)<\/p>\n<p>def draw(self, win):<br \/>\n# Draw Grid Lines<br \/>\ngap = self.width \/ 9<br \/>\nfor i in range(self.rows+1):<br \/>\nif i % 3 == 0 and i != 0:<br \/>\nthick = 4<br \/>\nelse:<br \/>\nthick = 1<br \/>\npygame.draw.line(win, (0,0,0), (0, i*gap), (self.width, i*gap), thick)<br \/>\npygame.draw.line(win, (0, 0, 0), (i * gap, 0), (i * gap, self.height), thick)<\/p>\n<p># Draw Cubes<br \/>\nfor i in range(self.rows):<br \/>\nfor j in range(self.cols):<br \/>\nself.cubes[i][j].draw(win)<\/p>\n<p>def select(self, row, col):<br \/>\n# Reset all other<br \/>\nfor i in range(self.rows):<br \/>\nfor j in range(self.cols):<br \/>\nself.cubes[i][j].selected = False<\/p>\n<p>self.cubes[row][col].selected = True<br \/>\nself.selected = (row, col)<\/p>\n<p>def clear(self):<br \/>\nrow, col = self.selected<br \/>\nif self.cubes[row][col].value == 0:<br \/>\nself.cubes[row][col].set_temp(0)<\/p>\n<p>def click(self, pos):<br \/>\n\"\"\"<br \/>\n:param: pos<br \/>\n:return: (row, col)<br \/>\n\"\"\"<br \/>\nif pos[0] &lt; self.width and pos[1] &lt; self.height:<br \/>\ngap = self.width \/ 9<br \/>\nx = pos[0] \/\/ gap<br \/>\ny = pos[1] \/\/ gap<br \/>\nreturn (int(y),int(x))<br \/>\nelse:<br \/>\nreturn None<\/p>\n<p>def is_finished(self):<br \/>\nfor i in range(self.rows):<br \/>\nfor j in range(self.cols):<br \/>\nif self.cubes[i][j].value == 0:<br \/>\nreturn False<br \/>\nreturn True<\/p>\n<p>class Cube:<br \/>\nrows = 9<br \/>\ncols = 9<\/p>\n<p>def __init__(self, value, row, col, width ,height):<br \/>\nself.value = value<br \/>\nself.temp = 0<br \/>\nself.row = row<br \/>\nself.col = col<br \/>\nself.width = width<br \/>\nself.height = height<br \/>\nself.selected = False<\/p>\n<p>def draw(self, win):<br \/>\nfnt = pygame.font.SysFont(\"comicsans\", 40)<\/p>\n<p>gap = self.width \/ 9<br \/>\nx = self.col * gap<br \/>\ny = self.row * gap<\/p>\n<p>if self.temp != 0 and self.value == 0:<br \/>\ntext = fnt.render(str(self.temp), 1, (128,128,128))<br \/>\nwin.blit(text, (x+5, y+5))<br \/>\nelif not(self.value == 0):<br \/>\ntext = fnt.render(str(self.value), 1, (0, 0, 0))<br \/>\nwin.blit(text, (x + (gap\/2 - text.get_width()\/2), y + (gap\/2 - text.get_height()\/2)))<\/p>\n<p>if self.selected:<br \/>\npygame.draw.rect(win, (255,0,0), (x,y, gap ,gap), 3)<\/p>\n<p>def set(self, val):<br \/>\nself.value = val<\/p>\n<p>def set_temp(self, val):<br \/>\nself.temp = val<\/p>\n<p>def redraw_window(win, board, time, strikes):<br \/>\nwin.fill((255,255,255))<br \/>\n# Draw time<br \/>\nfnt = pygame.font.SysFont(\"comicsans\", 40)<br \/>\ntext = fnt.render(\"Time: \" + format_time(time), 1, (0,0,0))<br \/>\nwin.blit(text, (540 - 160, 560))<br \/>\n# Draw Strikes<br \/>\ntext = fnt.render(\"X \" * strikes, 1, (255, 0, 0))<br \/>\nwin.blit(text, (20, 560))<br \/>\n# Draw grid and board<br \/>\nboard.draw(win)<\/p>\n<p>def format_time(secs):<br \/>\nsec = secs%60<br \/>\nminute = secs\/\/60<br \/>\nhour = minute\/\/60<\/p>\n<p>mat = \" \" + str(minute) + \":\" + str(sec)<br \/>\nreturn mat<\/p>\n<p>def main():<br \/>\nwin = pygame.display.set_mode((540,600))<br \/>\npygame.display.set_caption(\"Sudoku\")<br \/>\nboard = Grid(9, 9, 540, 540)<br \/>\nkey = None<br \/>\nrun = True<br \/>\nstart = time.time()<br \/>\nstrikes = 0<br \/>\nwhile run:<\/p>\n<p>play_time = round(time.time() - start)<\/p>\n<p>for event in pygame.event.get():<br \/>\nif event.type == pygame.QUIT:<br \/>\nrun = False<br \/>\nif event.type == pygame.KEYDOWN:<br \/>\nif event.key == pygame.K_1:<br \/>\nkey = 1<br \/>\nif event.key == pygame.K_2:<br \/>\nkey = 2<br \/>\nif event.key == pygame.K_3:<br \/>\nkey = 3<br \/>\nif event.key == pygame.K_4:<br \/>\nkey = 4<br \/>\nif event.key == pygame.K_5:<br \/>\nkey = 5<br \/>\nif event.key == pygame.K_6:<br \/>\nkey = 6<br \/>\nif event.key == pygame.K_7:<br \/>\nkey = 7<br \/>\nif event.key == pygame.K_8:<br \/>\nkey = 8<br \/>\nif event.key == pygame.K_9:<br \/>\nkey = 9<br \/>\nif event.key == pygame.K_DELETE:<br \/>\nboard.clear()<br \/>\nkey = None<br \/>\nif event.key == pygame.K_RETURN:<br \/>\ni, j = board.selected<br \/>\nif board.cubes[i][j].temp != 0:<br \/>\nif board.place(board.cubes[i][j].temp):<br \/>\nprint(\"Success\")<br \/>\nelse:<br \/>\nprint(\"Wrong\")<br \/>\nstrikes += 1<br \/>\nkey = None<\/p>\n<p>if board.is_finished():<br \/>\nprint(\"Game over\")<br \/>\nrun = False<\/p>\n<p>if event.type == pygame.MOUSEBUTTONDOWN:<br \/>\npos = pygame.mouse.get_pos()<br \/>\nclicked = board.click(pos)<br \/>\nif clicked:<br \/>\nboard.select(clicked[0], clicked[1])<br \/>\nkey = None<\/p>\n<p>if board.selected and key != None:<br \/>\nboard.sketch(key)<\/p>\n<p>redraw_window(win, board, play_time, strikes)<br \/>\npygame.display.update()<\/p>\n<p>main()<br \/>\npygame.quit()<\/p>\n<p>&nbsp;<\/p>\n<hr \/>\n<p># solver.py<\/p>\n<p>def solve(bo):<br \/>\nfind = find_empty(bo)<br \/>\nif not find:<br \/>\nreturn True<br \/>\nelse:<br \/>\nrow, col = find<\/p>\n<p>for i in range(1,10):<br \/>\nif valid(bo, i, (row, col)):<br \/>\nbo[row][col] = i<\/p>\n<p>if solve(bo):<br \/>\nreturn True<\/p>\n<p>bo[row][col] = 0<\/p>\n<p>return False<\/p>\n<p>def valid(bo, num, pos):<br \/>\n# Check row<br \/>\nfor i in range(len(bo[0])):<br \/>\nif bo[pos[0]][i] == num and pos[1] != i:<br \/>\nreturn False<\/p>\n<p># Check column<br \/>\nfor i in range(len(bo)):<br \/>\nif bo[i][pos[1]] == num and pos[0] != i:<br \/>\nreturn False<\/p>\n<p># Check box<br \/>\nbox_x = pos[1] \/\/ 3<br \/>\nbox_y = pos[0] \/\/ 3<\/p>\n<p>for i in range(box_y*3, box_y*3 + 3):<br \/>\nfor j in range(box_x * 3, box_x*3 + 3):<br \/>\nif bo[i][j] == num and (i,j) != pos:<br \/>\nreturn False<\/p>\n<p>return True<\/p>\n<p>def print_board(bo):<br \/>\nfor i in range(len(bo)):<br \/>\nif i % 3 == 0 and i != 0:<br \/>\nprint(\"- - - - - - - - - - - - - \")<\/p>\n<p>for j in range(len(bo[0])):<br \/>\nif j % 3 == 0 and j != 0:<br \/>\nprint(\" | \", end=\"\")<\/p>\n<p>if j == 8:<br \/>\nprint(bo[i][j])<br \/>\nelse:<br \/>\nprint(str(bo[i][j]) + \" \", end=\"\")<\/p>\n<p>def find_empty(bo):<br \/>\nfor i in range(len(bo)):<br \/>\nfor j in range(len(bo[0])):<br \/>\nif bo[i][j] == 0:<br \/>\nreturn (i, j) # row, col<\/p>\n<p>return None<\/p>\n<hr \/>\n<p>\u9644\u52a0\u89e3\u51b3\u72ec\u7acb\u7a0b\u5e8f\uff08\u7528\u4e8e\u89e3\u51b3\u65e0\u6cd5\u5b8c\u6210\u7684sudoku\uff09<\/p>\n<p>import random<br \/>\nimport sys<br \/>\nimport numpy as np<\/p>\n<p>sys.setrecursionlimit(100000) # \u53d1\u73b0python\u9ed8\u8ba4\u7684\u9012\u5f52\u6df1\u5ea6\u662f\u5f88\u6709\u9650\u7684<br \/>\n#\uff08\u9ed8\u8ba4\u662f1000\uff09\uff0c\u56e0\u6b64\u5f53\u9012\u5f52\u6df1\u5ea6\u8d85\u8fc7999\u7684<br \/>\n# \u6837\u5b50\uff0c\u5c31\u4f1a\u5f15\u53d1\u8fd9\u6837\u7684\u4e00\u4e2a\u5f02\u5e38\u3002<\/p>\n<p>def get_next(m:\"\u6570\u72ec\u77e9\u9635\", x:\"\u7a7a\u767d\u683c\u884c\u6570\", y:\"\u7a7a\u767d\u683c\u5217\u6570\"):<br \/>\n\"\"\" \u529f\u80fd\uff1a\u83b7\u5f97\u4e0b\u4e00\u4e2a\u7a7a\u767d\u683c\u5728\u6570\u72ec\u4e2d\u7684\u5750\u6807\u3002<br \/>\n\"\"\"<br \/>\nfor next_y in range(y+1, 9): # \u4e0b\u4e00\u4e2a\u7a7a\u767d\u683c\u548c\u5f53\u524d\u683c\u5728\u4e00\u884c\u7684\u60c5\u51b5<br \/>\nif m[x][next_y] == 0:<br \/>\nreturn x, next_y<br \/>\nfor next_x in range(x+1, 9): # \u4e0b\u4e00\u4e2a\u7a7a\u767d\u683c\u548c\u5f53\u524d\u683c\u4e0d\u5728\u4e00\u884c\u7684\u60c5\u51b5<br \/>\nfor next_y in range(0, 9):<br \/>\nif m[next_x][next_y] == 0:<br \/>\nreturn next_x, next_y<br \/>\nreturn -1, -1 # \u82e5\u4e0d\u5b58\u5728\u4e0b\u4e00\u4e2a\u7a7a\u767d\u683c\uff0c\u5219\u8fd4\u56de -1\uff0c-1<\/p>\n<p>def value(m:\"\u6570\u72ec\u77e9\u9635\", x:\"\u7a7a\u767d\u683c\u884c\u6570\", y:\"\u7a7a\u767d\u683c\u5217\u6570\"):<br \/>\n\"\"\" \u529f\u80fd\uff1a\u8fd4\u56de\u7b26\u5408\"\u6bcf\u4e2a\u6a2a\u6392\u548c\u7ad6\u6392\u4ee5\u53ca<br \/>\n\u4e5d\u5bab\u683c\u5185\u65e0\u76f8\u540c\u6570\u5b57\"\u8fd9\u4e2a\u6761\u4ef6\u7684\u6709\u6548\u503c\u3002<br \/>\n\"\"\"<br \/>\ni, j = x\/\/3, y\/\/3<br \/>\ngrid = [m[i*3+r][j*3+c] for r in range(3) for c in range(3)]<br \/>\nv = set([x for x in range(1,10)]) - set(grid) - set(m[x]) - \\<br \/>\nset(list(zip(*m))[y])<br \/>\nreturn list(v)<\/p>\n<p>def start_pos(m:\"\u6570\u72ec\u77e9\u9635\"):<br \/>\n\"\"\" \u529f\u80fd\uff1a\u8fd4\u56de\u7b2c\u4e00\u4e2a\u7a7a\u767d\u683c\u7684\u4f4d\u7f6e\u5750\u6807\"\"\"<br \/>\nfor x in range(9):<br \/>\nfor y in range(9):<br \/>\nif m[x][y] == 0:<br \/>\nreturn x, y<br \/>\nreturn False, False # \u82e5\u6570\u72ec\u5df2\u5b8c\u6210\uff0c\u5219\u8fd4\u56de False, False<\/p>\n<p>def try_sudoku(m:\"\u6570\u72ec\u77e9\u9635\", x:\"\u7a7a\u767d\u683c\u884c\u6570\", y:\"\u7a7a\u767d\u683c\u5217\u6570\"):<br \/>\n\"\"\" \u529f\u80fd\uff1a\u8bd5\u7740\u586b\u5199\u6570\u72ec \"\"\"<br \/>\nfor v in value(m, x, y):<br \/>\nm[x][y] = v<br \/>\nnext_x, next_y = get_next(m, x, y)<br \/>\nif next_y == -1: # \u5982\u679c\u65e0\u4e0b\u4e00\u4e2a\u7a7a\u767d\u683c<br \/>\nreturn True<br \/>\nelse:<br \/>\nend = try_sudoku(m, next_x, next_y) # \u9012\u5f52<br \/>\nif end:<br \/>\nreturn True<br \/>\nm[x][y] = 0 # \u5728\u9012\u5f52\u7684\u8fc7\u7a0b\u4e2d\uff0c\u5982\u679c\u6570\u72ec\u6ca1\u6709\u89e3\u5f00\uff0c<br \/>\n# \u5219\u56de\u6eaf\u5230\u4e0a\u4e00\u4e2a\u7a7a\u767d\u683c<\/p>\n<p>def sudoku(m):<br \/>\nx, y = start_pos(m)<br \/>\ntry_sudoku(m, x, y)<br \/>\nprint(np.array(m))<\/p>\n<p>&nbsp;<\/p>\n<p>if __name__ == \"__main__\":<br \/>\nm = [<br \/>\n[0, 0, 0, 0, 2, 4, 0, 0, 3],<br \/>\n[3, 0, 0, 5, 0, 0, 0, 2, 0],<br \/>\n[0, 0, 4, 0, 0, 0, 1, 6, 0],<br \/>\n[0, 7, 6, 1, 0, 0, 0, 0, 0],<br \/>\n[0, 0, 0, 0, 6, 2, 8, 0, 0],<br \/>\n[0, 1, 0, 8, 0, 0, 6, 0, 7],<br \/>\n[0, 3, 0, 4, 0, 0, 5, 0, 8],<br \/>\n[0, 0, 7, 2, 0, 5, 0, 0, 0],<br \/>\n[0, 5, 0, 9, 8, 7, 0, 4, 2]<br \/>\n]<\/p>\n<p>sudoku(m)<\/p>\n<p>\"\"\" \u6570\u72ec\u7ed3\u679c\u5982\u4e0b\uff1a<br \/>\n[<br \/>\n[6, 9, 5, 1, 2, 3, 7, 4, 8],<br \/>\n[7, 4, 1, 8, 6, 9, 2, 5, 3],<br \/>\n[2, 3, 8, 4, 5, 7, 1, 6, 9],<br \/>\n[8, 1, 6, 7, 4, 5, 3, 9, 2],<br \/>\n[5, 2, 4, 3, 9, 8, 6, 7, 1],<br \/>\n[3, 7, 9, 6, 1, 2, 4, 8, 5],<br \/>\n[4, 8, 3, 9, 7, 1, 5, 2, 6],<br \/>\n[1, 6, 2, 5, 8, 4, 9, 3, 7],<br \/>\n[9, 5, 7, 2, 3, 6, 8, 1, 4]<br \/>\n]<br \/>\n\"\"\"<\/p>\n<hr \/>\n<p>\u9644\u52a0\u7a0b\u5e8f2 \u7528\u4e8e\u751f\u6210sudoku\u7684\u6e38\u620f\u9898\u76ee\u6570\u7ec4<\/p>\n<p>import random<br \/>\nimport time<br \/>\ndef pr(a):#\u7528\u4e8e\u8f93\u51fa\u65b9\u4fbf\u9605\u8bfb\u7684\u7ed3\u679c<br \/>\nfor i in range(9):<br \/>\nif i%3==0:<br \/>\nprint('\\t---------\\t\\t---------\\t\\t---------')<br \/>\nfor j in range(9):<br \/>\nif j%3==0:<br \/>\nprint('|',end='\\t')<br \/>\nprint(a[i][j],end='\\t')<br \/>\nprint('|',end='\\n')<br \/>\nprint('\\t---------\\t\\t---------\\t\\t---------')<br \/>\ndef diff(d):<br \/>\nprint('\u6570\u72ec\u96be\u5ea6\uff1a',end='')<br \/>\nif d==0:<br \/>\nprint('\u6781\u5bb9\u6613')<br \/>\nif d==1:<br \/>\nprint('\u5bb9\u6613')<br \/>\nif d==2:<br \/>\nprint('\u4e00\u822c')<br \/>\nif d==3:<br \/>\nprint('\u56f0\u96be')<br \/>\nif d==4:<br \/>\nprint('\u6781\u56f0\u96be')<br \/>\ndef con(a):#\u7528\u4e8e\u5c06\u6570\u636e\u8f6c\u5316\u4e3a\u7b26\u5408\u683c\u5f0f\u7684\u5e8f\u5217<br \/>\nif len(a)==81:<br \/>\na_con=[[],[],[],[],[],[],[],[],[]]<br \/>\nfor i in range(9):<br \/>\nb=a[i*9:i*9+9]<br \/>\nfor j in range(9):<br \/>\na_con[i].append(int(b[j]))<br \/>\nreturn a_con<br \/>\nreturn False<br \/>\ndef examine_sudoku(sudoku):#\u68c0\u67e5\u662f\u5426\u7b26\u5408\u6570\u72ec\u89c4\u5219<br \/>\nif len(sudoku)!=9:<br \/>\nreturn False<br \/>\nfor i in range(9):<br \/>\nif len(sudoku[i])!=9 or sudoku[i].count([])&gt;0:<br \/>\nreturn False<br \/>\nfor j in range(1,10):<br \/>\nif sudoku[i].count(j)&gt;1:<br \/>\nreturn False<br \/>\nreturn True<br \/>\ndef complete(a):#\u7528\u4e8e\u68c0\u6d4b\u6570\u72ec\u662f\u5426\u5b8c\u6210<br \/>\nfor i in range(9):<br \/>\nfor j in range(9):<br \/>\nif type(a[i][j])!=int or a[i][j]==0:<br \/>\nreturn False<br \/>\nreturn True<br \/>\ndef copy(a):#\u590d\u5236\u6570\u72ec\u7684\u503c\uff0c\u7528\u4e8e\u540e\u671f\u5047\u8bbe\u6cd5\u8fd0\u7b97\u5931\u8d25\uff0c\u627e\u56de\u539f\u6765\u7684\u503c<br \/>\nd=[[], [], [], [], [], [], [], [], []]<br \/>\nfor i in range(9):<br \/>\nfor j in range(9):<br \/>\nif type(a[i][j])==int:<br \/>\nd[i].append(a[i][j])<br \/>\nelif type(a[i][j])==list:<br \/>\nd[i].append([])<br \/>\nfor k in a[i][j]:<br \/>\nd[i][j].append(k)<br \/>\nreturn d<br \/>\ndef extract_b_c(a):#\u75289\u884c\u8868\u793a\u7684a\uff0c\u5f97\u52309\u5217\u8868\u793a\u7684b\uff0c\u53ca9\u5bab\u8868\u793a\u7684c\uff0c\u5e76\u5bf9\u6bcf\u4e2a0\u6240\u5728\u7684\u4f4d\u7f6e\u7528[1,2,3,4,5,6,7,8,9]\u4ee3\u66ff\uff0c\u4f5c\u4e3a\u7b14\u8bb0<br \/>\nb=[[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0],<br \/>\n[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0],<br \/>\n[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0]]<br \/>\nc=[[],[],[],[],[],[],[],[],[]]<br \/>\nfor i in range(9):<br \/>\nfor j in range(9):<br \/>\nif a[i][j]==0:<br \/>\na[i][j] = [1,2,3,4,5,6,7,8,9]<br \/>\nb[j][i]=a[i][j]<br \/>\ns=ij_s(i,j)<br \/>\nc[s].append(a[i][j])<br \/>\nreturn b,c<br \/>\ndef ij_s(i,j):#\u7528i\u548cj\u6c42\u5f97\u5bab\u6240\u5728\u7684\u4f4d\u7f6es<br \/>\ns=i\/\/3*3+j\/\/3<br \/>\nreturn s<br \/>\ndef ij_t(i,j):#\u7528i\u548cj\u6c42\u5f97\u6240\u5728\u5bab\u91cc\u7684\u4f4d\u7f6et<br \/>\nt=i%3*3+j%3<br \/>\nreturn t<br \/>\ndef st_i(s,t):#\u7528s\u548ct\u6c42\u5f97\u539fi\u7684\u503c<br \/>\ni=s\/\/3*3+t\/\/3<br \/>\nreturn i<br \/>\ndef st_j(s, t):#\u7528s\u548ct\u6c42\u5f97\u539fj\u7684\u503c<br \/>\nj=s%3*3+t%3<br \/>\nreturn j<br \/>\ndef play_1(a,b,c,i,j,change):#\u5c06\u7b14\u8bb0\u4e2d\u540c\u884c\u3001\u540c\u5217\u53ca\u540c\u5bab\u7684\u7b14\u8bb0\u91cc\u5220\u9664\u5df2\u77e5\u6570\u5b57\uff0c\u5e76\u5c06\u552f\u4e00\u53ef\u80fd\u7684\u683c\u5b50\u53d8\u6210\u5df2\u77e5\u6570\u5b57<br \/>\ns=ij_s(i,j)<br \/>\nfor num in range(1,10):<br \/>\nfor k in range(9):<br \/>\nif type(a[i][k])==list and num in a[i] and num in a[i][k]:<br \/>\na[i][k].remove(num)<br \/>\nchange=True<br \/>\nif len(a[i][k])==1:<br \/>\nn=a[i][k][0]<br \/>\na[i][k]=n<br \/>\nb[k][i]=n<br \/>\nc[ij_s(i,k)][ij_t(i,k)]=n<br \/>\nchange=True<br \/>\nif type(b[j][k])==list and num in b[j] and num in b[j][k]:<br \/>\nb[j][k].remove(num)<br \/>\nchange=True<br \/>\nif len(b[j][k])==1:<br \/>\nn=b[j][k][0]<br \/>\na[k][j]=n<br \/>\nb[j][k]=n<br \/>\nc[ij_s(k,j)][ij_t(k,j)]=n<br \/>\nchange=True<br \/>\nif type(c[s][k])==list and num in c[s] and num in c[s][k]:<br \/>\nc[s][k].remove(num)<br \/>\nchange=True<br \/>\nif len(c[s][k])==1:<br \/>\nn=c[s][k][0]<br \/>\na[st_i(s,k)][st_j(s,k)]=n<br \/>\nb[st_j(s,k)][st_i(s,k)]=n<br \/>\nc[s][k]=n<br \/>\nchange=True<br \/>\nreturn a,b,c,change<br \/>\ndef play_2(a,b,c,i,j,change):#\u552f\u4e00\u5019\u9009\u6570\u6cd5<br \/>\ndef num_abc():<br \/>\nnum_a = [1, 2, 3, 4, 5, 6, 7, 8, 9]<br \/>\nnum_b = [1, 2, 3, 4, 5, 6, 7, 8, 9]<br \/>\nnum_c = [1, 2, 3, 4, 5, 6, 7, 8, 9]<br \/>\nfor k in range(1,10):<br \/>\nif k in a[i]:<br \/>\nnum_a.remove(k)<br \/>\nif k in b[j]:<br \/>\nnum_b.remove(k)<br \/>\nif k in c[s]:<br \/>\nnum_c.remove(k)<br \/>\nreturn num_a,num_b,num_c<br \/>\ns=ij_s(i,j)<br \/>\nnum_a,num_b,num_c=num_abc()<br \/>\nfor n in num_a:<br \/>\nt=0<br \/>\nfor k in range(9):<br \/>\nif type(a[i][k])==list and n in a[i][k]:<br \/>\nt+=1<br \/>\nif t==1:<br \/>\nfor k in range(9):<br \/>\nif type(a[i][k]) == list and n in a[i][k]:<br \/>\na[i][k] = n<br \/>\nb[k][i] = n<br \/>\nc[ij_s(i, k)][ij_t(i, k)] = n<br \/>\nnum_a, num_b, num_c = num_abc()<br \/>\nchange=True<br \/>\nfor n in num_b:<br \/>\nt=0<br \/>\nfor k in range(9):<br \/>\nif type(b[j][k])==list and n in b[j][k]:<br \/>\nt+=1<br \/>\nif t==1:<br \/>\nfor k in range(9):<br \/>\nif type(b[j][k])==list and n in b[j][k]:<br \/>\na[k][j] = n<br \/>\nb[j][k] = n<br \/>\nc[ij_s(k, j)][ij_t(k, j)] = n<br \/>\nnum_a, num_b, num_c = num_abc()<br \/>\nchange=True<br \/>\nfor n in num_c:<br \/>\nt=0<br \/>\nfor k in range(9):<br \/>\nif type(c[s][k])==list and n in c[s][k]:<br \/>\nt+=1<br \/>\nif t==1:<br \/>\nfor k in range(9):<br \/>\nif type(c[s][k])==list and n in c[s][k]:<br \/>\na[st_i(s,k)][st_j(s,k)]=n<br \/>\nb[st_j(s,k)][st_i(s,k)]=n<br \/>\nc[s][k]=n<br \/>\nchange=True<br \/>\nreturn a,b,c,change<br \/>\ndef play_3(a,b,c,i,j,change):#\u94fe\u6570\u5220\u51cf\u6cd5\uff0c\u4e13\u4e1a\u7528\u8bed\u662f\u8fd9\u6837\u7684\uff0c\u67092\u94fe\u6570\u30013\u94fe\u6570\u7684\uff0c\u6b64\u65b9\u6cd5\u6269\u5c55\u5230n\u94fe\u6570\uff08\u5e2e\u52a9\u6392\u9664\u4e0d\u53ef\u80fd\u9879\u7684\uff09<br \/>\nlist_a=[]<br \/>\nlist_b=[]<br \/>\nlist_c=[]<br \/>\ns=ij_s(i,j)<br \/>\nfor k in range(9):<br \/>\nif type(a[i][k]) == list:<br \/>\nlist_a.append(a[i][k])<br \/>\nfor k in range(9):<br \/>\nif type(b[j][k]) == list:<br \/>\nlist_b.append(b[j][k])<br \/>\nfor k in range(9):<br \/>\nif type(c[s][k]) == list:<br \/>\nlist_c.append(c[s][k])<br \/>\nfor k in range(3,len(list_a)+1):<br \/>\nl=[]<br \/>\nn=0<br \/>\nfor m in list_a:<br \/>\nif len(m)&lt;k:<br \/>\nfor p in m:<br \/>\nif p not in l:<br \/>\nl.append(p)<br \/>\nn+=1<br \/>\nif len(l)==n:<br \/>\nfor m in list_a:<br \/>\nfor p in m:<br \/>\nif p not in l:<br \/>\nfor q in l:<br \/>\nif q in m:<br \/>\nm.remove(q)<br \/>\nchange=True<br \/>\nfor k in range(3,len(list_b)+1):<br \/>\nl=[]<br \/>\nn=0<br \/>\nfor m in list_b:<br \/>\nif len(m)&lt;k:<br \/>\nfor p in m:<br \/>\nif p not in l:<br \/>\nl.append(p)<br \/>\nn+=1<br \/>\nif len(l)==n:<br \/>\nfor m in list_b:<br \/>\nfor p in m:<br \/>\nif p not in l:<br \/>\nfor q in l:<br \/>\nif q in m:<br \/>\nm.remove(q)<br \/>\nchange=True<br \/>\nfor k in range(3,len(list_c)+1):<br \/>\nl=[]<br \/>\nn=0<br \/>\nfor m in list_c:<br \/>\nif len(m)&lt;k:<br \/>\nfor p in m:<br \/>\nif p not in l:<br \/>\nl.append(p)<br \/>\nn+=1<br \/>\nif len(l)==n:<br \/>\nfor m in list_c:<br \/>\nfor p in m:<br \/>\nif p not in l:<br \/>\nfor q in l:<br \/>\nif q in m:<br \/>\nm.remove(q)<br \/>\nchange=True<br \/>\nreturn a,b,c,change<br \/>\ndef play_4(a,b,c,change):#\u533a\u5757\u6452\u9664\u6cd5<br \/>\nfor i in range(3):<br \/>\nm = [[], [], [], [], [], [], [], [], []]<br \/>\nfor k in range(3):<br \/>\nfor j in range(9):<br \/>\nif type(a[i * 3 + k][j]) == list:<br \/>\nfor n in a[i * 3 + k][j]:<br \/>\nif n not in m[k * 3 + j \/\/ 3]:<br \/>\nm[k * 3 + j \/\/ 3].append(n)<br \/>\nfor p in range(3):<br \/>\no = []<br \/>\nfor q in range(3):<br \/>\nif m[p * 3 + q]!=[]:<br \/>\nfor k in m[p * 3 + q]:<br \/>\nif k not in o:<br \/>\no.append(k)<br \/>\nif o!=[]:<br \/>\nfor s in o:<br \/>\nt = 0<br \/>\nfor q in range(3):<br \/>\nif s in m[p * 3 + q]:<br \/>\nt += 1<br \/>\nif t == 1:<br \/>\nfor q in range(3):<br \/>\nif s in m[p * 3 + q]:<br \/>\nif p == 0:<br \/>\nl = [1, 2]<br \/>\nelif p == 1:<br \/>\nl = [0, 2]<br \/>\nelse:<br \/>\nl = [0, 1]<br \/>\nfor k in l:<br \/>\nfor j in range(3):<br \/>\nif type(a[i * 3 + k][q*3+j]) == list and s in a[i * 3 + k][q*3+j]:<br \/>\na[i * 3 + k][q*3+j].remove(s)<br \/>\nchange = True<br \/>\nfor i in range(3):<br \/>\nm = [[], [], [], [], [], [], [], [], []]<br \/>\nfor k in range(3):<br \/>\nfor j in range(9):<br \/>\nif type(b[i * 3 + k][j]) == list:<br \/>\nfor n in b[i * 3 + k][j]:<br \/>\nif n not in m[k * 3 + j \/\/ 3]:<br \/>\nm[k * 3 + j \/\/ 3].append(n)<br \/>\nfor p in range(3):<br \/>\no = []<br \/>\nfor q in range(3):<br \/>\nif m[p * 3 + q]!=[]:<br \/>\nfor k in m[p * 3 + q]:<br \/>\nif k not in o:<br \/>\no.append(k)<br \/>\nif o!=[]:<br \/>\nfor s in o:<br \/>\nt = 0<br \/>\nfor q in range(3):<br \/>\nif s in m[p * 3 + q]:<br \/>\nt += 1<br \/>\nif t == 1:<br \/>\nfor q in range(3):<br \/>\nif s in m[p * 3 + q]:<br \/>\nif p == 0:<br \/>\nl = [1, 2]<br \/>\nelif p == 1:<br \/>\nl = [0, 2]<br \/>\nelse:<br \/>\nl = [0, 1]<br \/>\nfor k in l:<br \/>\nfor j in range(3):<br \/>\nif type(b[i * 3 + k][q*3+j]) == list and s in b[i * 3 + k][q*3+j]:<br \/>\nb[i * 3 + k][q*3+j].remove(s)<br \/>\nchange = True<br \/>\nreturn a,b,c,change<br \/>\ndef play_5(a,b,c,change,examine,a_copy):#\u5047\u8bbe\u6cd5<br \/>\nif examine==True:<br \/>\nfor l in range(2,10):<br \/>\nfor i in range(9):<br \/>\nfor j in range(9):<br \/>\nif type(a[i][j])==list and len(a[i][j])==l:<br \/>\na_copy=copy(a)<br \/>\nn=a[i][j][random.randint(0,len(a[i][j])-1)]<br \/>\na_copy[i][j].remove(n)<br \/>\nif len(a_copy[i][j])==1:<br \/>\na_copy[i][j]=a_copy[i][j][0]<br \/>\na[i][j]=n<br \/>\nb[j][i]=n<br \/>\nc[ij_s(i,j)][ij_t(i,j)]=n<br \/>\nchange=True<br \/>\nreturn a,b,c,change,examine,a_copy<br \/>\nif examine==False and examine_sudoku(a_copy)==True:<br \/>\na=a_copy<br \/>\nb,c=extract_b_c(a)<br \/>\nchange=True<br \/>\nexamine=True<br \/>\nreturn a,b,c,change,examine,a_copy<br \/>\nexamine=False<br \/>\nreturn a,b,c,change,examine,a_copy<br \/>\ndef play_all(a,b,c,change,examine,a_copy,d):#\u8fdb\u9636\u578b\u8fd0\u7b97\uff0c\u80fd\u521d\u7ea7\u65b9\u6cd5\u89e3\u51b3\u5c31\u4e0d\u7528\u9ad8\u7ea7\u7684\u65b9\u6cd5\uff0c\u7701\u65f6<br \/>\nfor i in range(9):<br \/>\nfor j in range(9):<br \/>\na,b,c,change=play_1(a,b,c,i,j,change)<br \/>\nif change==False:<br \/>\nfor i in range(9):<br \/>\nfor j in range(9):<br \/>\na,b,c,change=play_2(a,b,c,i,j,change)<br \/>\nif d&lt;1 and change==True:<br \/>\nif complete(a)==False:<br \/>\nd=1<br \/>\nif change==False:<br \/>\nfor i in range(9):<br \/>\nfor j in range(9):<br \/>\na,b,c,change=play_3(a,b,c,i,j,change)<br \/>\nif d&lt;2 and change==True:<br \/>\nif complete(a)==False:<br \/>\nd=2<br \/>\nif change==False:<br \/>\na,b,c,change=play_4(a,b,c,change)<br \/>\nif d&lt;3 and change==True:<br \/>\nif complete(a)==False:<br \/>\nd=3<br \/>\nif change==False:<br \/>\nexamine=examine_sudoku(a)<br \/>\na,b,c,change,examine,a_copy=play_5(a,b,c,change,examine,a_copy)<br \/>\nif d&lt;4 and change==True:<br \/>\nif complete(a)==False:<br \/>\nd=4<br \/>\nreturn a,b,c,change,examine,a_copy,d<br \/>\ndef play_all_1(a,b,c,change,examine,a_copy):#\u8fdb\u9636\u578b\u8fd0\u7b97\uff0c\u80fd\u521d\u7ea7\u65b9\u6cd5\u89e3\u51b3\u5c31\u4e0d\u7528\u9ad8\u7ea7\u7684\u65b9\u6cd5\uff0c\u7701\u65f6<br \/>\nfor i in range(9):<br \/>\nfor j in range(9):<br \/>\na,b,c,change=play_1(a,b,c,i,j,change)<br \/>\nif change==False:<br \/>\nfor i in range(9):<br \/>\nfor j in range(9):<br \/>\na,b,c,change=play_2(a,b,c,i,j,change)<br \/>\nif change==False:<br \/>\nfor i in range(9):<br \/>\nfor j in range(9):<br \/>\na,b,c,change=play_3(a,b,c,i,j,change)<br \/>\nif change==False:<br \/>\na,b,c,change=play_4(a,b,c,change)<br \/>\nreturn a,b,c,change,examine,a_copy<br \/>\ndef complate_sudoku(a):#\u8ba1\u7b97\u6570\u72ec\u7684\u4e3b\u4f53<br \/>\nif examine_sudoku(a)==False:<br \/>\nreturn False<br \/>\nb,c = extract_b_c(a)<br \/>\nif examine_sudoku(b)==False:<br \/>\nreturn False<br \/>\nif examine_sudoku(c)==False:<br \/>\nreturn False<br \/>\nchange = True#\u521d\u59cb\u5316change<br \/>\nexamine=True#\u521d\u59cb\u5316examine<br \/>\na_copy=[]#\u521d\u59cb\u5316a_copy<br \/>\nd=0<br \/>\nwhile change==True:<br \/>\nchange=False<br \/>\na,b,c,change,examine,a_copy,d=play_all(a,b,c,change,examine,a_copy,d)<br \/>\nexamine=examine_sudoku(a)&amp;examine_sudoku(b)&amp;examine_sudoku(c)<br \/>\nif complete(a)==False:<br \/>\nreturn None,4<br \/>\nreturn a,d<br \/>\nprint('\u6b63\u5728\u751f\u6210\u6570\u72ec......')<br \/>\nt=time.time()<br \/>\na=[[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0],<br \/>\n[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0],<br \/>\n[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0]]<br \/>\nl = [1, 2, 3, 4, 5, 6, 7, 8, 9]<br \/>\nfor j in range(9):<br \/>\nif j&lt;8:<br \/>\nk=random.randint(0,len(l)-1)<br \/>\na[0][j]=l[k]<br \/>\ndel l[k]<br \/>\nelse:<br \/>\na[0][j] = l[0]<br \/>\nl = [1, 2, 3, 4, 5, 6, 7, 8, 9]<br \/>\nl.remove(a[0][0])<br \/>\nl.remove(a[0][1])<br \/>\nl.remove(a[0][2])<br \/>\nfor i in range(1,9):<br \/>\nif i==3:<br \/>\nl = [1, 2, 3, 4, 5, 6, 7, 8, 9]<br \/>\nl.remove(a[0][0])<br \/>\nl.remove(a[1][0])<br \/>\nl.remove(a[2][0])<br \/>\nif i&lt;8:<br \/>\nk=random.randint(0,len(l)-1)<br \/>\na[i][0]=l[k]<br \/>\ndel l[k]<br \/>\nelse:<br \/>\na[i][0] = l[0]<br \/>\nl = [1, 2, 3, 4, 5, 6, 7, 8, 9]<br \/>\nl.remove(a[0][6])<br \/>\nl.remove(a[0][7])<br \/>\nl.remove(a[0][8])<br \/>\nfor i in range(1,9):<br \/>\nif i==3:<br \/>\nl = [1, 2, 3, 4, 5, 6, 7, 8, 9]<br \/>\nl.remove(a[0][8])<br \/>\nl.remove(a[1][8])<br \/>\nl.remove(a[2][8])<br \/>\nif i&lt;8:<br \/>\nif i==7:<br \/>\nif a[8][0] in l:<br \/>\na[7][8]=a[8][0]<br \/>\nl.remove(a[8][0])<br \/>\na[8][8]=l[0]<br \/>\nbreak<br \/>\nk=random.randint(0,len(l)-1)<br \/>\nwhile l[k]==a[i][0]:<br \/>\nk = random.randint(0, len(l) - 1)<br \/>\na[i][8]=l[k]<br \/>\ndel l[k]<br \/>\nelse:<br \/>\na[i][8] = l[0]<br \/>\nl = [1, 2, 3, 4, 5, 6, 7, 8, 9]<br \/>\nl.remove(a[8][0])<br \/>\nl.remove(a[8][8])<br \/>\nb, c = extract_b_c(a)<br \/>\na_copy2=[]<br \/>\nd=0<br \/>\nchange = True # \u521d\u59cb\u5316change<br \/>\nexamine = True # \u521d\u59cb\u5316examine<br \/>\na_co = [] # \u521d\u59cb\u5316a_copy<br \/>\nwhile change == True:<br \/>\nchange = False<br \/>\na, b, c, change, examine, a_co ,d= play_all(a, b, c, change, examine, a_co,d)<br \/>\nprint('\u6570\u72ec\u7b54\u6848\u751f\u6210\u5b8c\u6bd5\uff0c\u5f00\u59cb\u62a0\u9664\u6570\u5b57......')<br \/>\nti=0<br \/>\ncom=copy(a)<br \/>\nchange = True # \u521d\u59cb\u5316change<br \/>\nx=True<br \/>\nco=copy(a)<br \/>\nl=[0,1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,<br \/>\n27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,<br \/>\n54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80]<br \/>\nwhile x==True:<br \/>\nchange = True # \u521d\u59cb\u5316change<br \/>\nexamine = True # \u521d\u59cb\u5316examine<br \/>\na_co = [] # \u521d\u59cb\u5316a_copy<br \/>\nif len(l)&gt;1:<br \/>\nk=random.randint(0,len(l)-1)<br \/>\nelse:<br \/>\nk=0<br \/>\nx=False<br \/>\np=l[k]\/\/9<br \/>\nq=l[k]%9<br \/>\ndel l[k]<br \/>\nif co[p][q]==0:<br \/>\ncontinue<br \/>\nco[p][q]=0<br \/>\ncop=copy(co)<br \/>\ncop_b, cop_c = extract_b_c(cop)<br \/>\nwhile change == True:<br \/>\nchange = False<br \/>\ncop, cop_b, cop_c, change, examine, a_co= play_all_1(cop, cop_b, cop_c, change, examine, a_co)<br \/>\nif complete(cop)==True:<br \/>\na = copy(co)<br \/>\nelse:<br \/>\nif ti==0:<br \/>\nprint('\u4e00\u822c\u96be\u5ea6\u5df2\u751f\u6210\uff0c\u6b63\u5728\u7cbe\u7ec6\u63a8\u6572\u9aa8\u7070\u96be\u5ea6......')<br \/>\nti=1<br \/>\nfor i in range(9):<br \/>\nfor j in range(9):<br \/>\nif type(cop[i][j])==list and len(cop[i][j])==2:<br \/>\na_copy=copy(cop)<br \/>\nn=cop[i][j][0]<br \/>\na_copy[i][j]=a_copy[i][j][1]<br \/>\na_copy_b, a_copy_c = extract_b_c(a_copy)<br \/>\ncop[i][j]=n<br \/>\ncop_b[j][i]=n<br \/>\ncop_c[ij_s(i,j)][ij_t(i,j)]=n<br \/>\nchange=True<br \/>\nwhile change == True:<br \/>\nchange = False<br \/>\ncop, cop_b, cop_c, change, examine, a_co,d=play_all(cop, cop_b, cop_c, change, examine, a_co,d)<br \/>\nwhile change == True:<br \/>\nchange = False<br \/>\na_copy, a_copy_b, a_copy_c, change, examine, a_copy2,d=play_all(a_copy, a_copy_b, a_copy_c, change, examine, a_copy2,d)<br \/>\nif (complete(cop)==True and complete(a_copy)==False) or (complete(cop)==False and complete(a_copy)==True):<br \/>\nif cop==com or cop==com:<br \/>\na = copy(co)<br \/>\nprint('\u6570\u72ec\u751f\u6210\u5b8c\u6bd5\uff0c\u751f\u6210\u6570\u72ec\u6240\u7528\u65f6\u95f4\u4e3a\uff1a',time.time()-t)<br \/>\npr(a)<br \/>\nt=time.time()<br \/>\na,d=complate_sudoku(a)<br \/>\nprint('\u89e3\u6570\u72ec\u6240\u7528\u65f6\u95f4\u4e3a\uff1a',time.time()-t)<br \/>\ndiff(d)<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>#\u8bf4\u660e\u65b0\u5efasudoku\u6587\u4ef6\u5939\u4e0b\u9762\u7531\u4e24\u4e2a\u6a21\u5757\u7ec4\u6210\u5206\u522b\u4e3a\u4e3b\u7a0b\u5e8fgui.py\u548c\u89e3\u51b3\u6a21\u5757solve.py \u6e38\u620f\u8fd0\u884c\u4e3b\u7a0b [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[20],"tags":[352,53],"class_list":["post-564","post","type-post","status-publish","format-standard","hentry","category-python","tag-python","tag-sudoku"],"_links":{"self":[{"href":"https:\/\/byy3.com\/index.php?rest_route=\/wp\/v2\/posts\/564","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/byy3.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/byy3.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/byy3.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/byy3.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=564"}],"version-history":[{"count":0,"href":"https:\/\/byy3.com\/index.php?rest_route=\/wp\/v2\/posts\/564\/revisions"}],"wp:attachment":[{"href":"https:\/\/byy3.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=564"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/byy3.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=564"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/byy3.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=564"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}