直接上代码

 #!/usr/bin/python3
#coding=GB2312
import tkinter as tk
import threading
import time
import random
import copy
import sys class Sudoku(threading.Thread):
winw = 500
winh = 510 def __init__(self):
threading.Thread.__init__(self)
self.ui = tk.Tk()
self.centerDisplay()
self.cells = []
self.createSudoku() self.initUi()
def checkRow(self, row, value):
if value in self.tmpCells[row]:
return False
return True
def checkCol(self, col, value):
for row in range(9):
if value == self.tmpCells[row][col]:
return False
return True
def checkBlock(self, row, col, value):
for i in range(3):
for j in range(3):
if value == self.tmpCells[int(row / 3) * 3 + i][int(col / 3) * 3 + j]:
return False
return True
def solveSudoku(self):
for i in range(9):
for j in range(9):
if 0 == self.tmpCells[i][j]:
for tmp in range(1, 10):
if(self.checkRow(i, tmp) and \
self.checkCol(j, tmp) and \
self.checkBlock(i, j, tmp)):
self.tmpCells[i][j] = tmp
if (self.solveSudoku()):
return True
else:
self.updateUi()
self.tmpCells[i][j] = self.cells[i][j]
continue
else:
continue
return False
return True def createSudoku(self):
#self.cells = [[None for i in range(9)] for i in range(9)]
self.cells = [\
[0, 0, 5, 3, 0, 0, 0, 0, 0], \
[8, 0, 0, 0, 0, 0, 0, 2, 0], \
[0, 7, 0, 0, 1, 0, 5, 0, 0], \
[4, 0, 0, 0, 0, 5, 3, 0, 0], \
[0, 1, 0, 0, 7, 0, 0, 0, 6], \
[0, 0, 3, 2, 0, 0, 0, 8, 0], \
[0, 6, 0, 5, 0, 0, 0, 0, 9], \
[0, 0, 4, 0, 0, 0, 0, 3, 0], \
[0, 0, 0, 0, 0, 9, 7, 0, 0]]
self.tmpCells = copy.deepcopy(self.cells) def initUi(self):
self.cs = tk.Canvas(self.ui, bg = '#7fb081')
self.cs.pack(fill = tk.BOTH, expand = 1)
w = self.winw / 9.0
h = self.winh / 9.0
for n in range(9):
if 0 == n % 3:
width = 4
else:
width = 1
self.cs.create_line(0, n * h, self.winw, n * h, \
width = width, fill = '#2b4490')
self.cs.create_line(n * w, 0, n * w, self.winh, \
width = width, fill = '#2b4490')
for i in range(9):
for j in range(9):
if self.cells[i][j]:
self.cs.create_text(30 + j * 55, 30 + i * 57, \
font = ('Times -55 bold'), text = self.cells[i][j])
def updateUi(self):
self.cs.delete('test')
for i in range(9):
for j in range(9):
if not self.cells[i][j] and self.tmpCells[i][j]:
self.cs.create_text(30 + j * 55, 30 + i * 57, \
font = ('Times -55 bold'), text = self.tmpCells[i][j], \
tag = 'test', fill = '#aa363d') def centerDisplay(self):
screenw = self.ui.winfo_screenwidth()
screenh = self.ui.winfo_screenheight()
self.ui.geometry('{}x{}+{}+{}'.format(\
self.winw, self.winh, int((screenw - self.winw)/2), \
int((screenh - self.winh)/2)))
self.ui.title('Sudoku by jianc') def run(self):
print(self.solveSudoku()) self.updateUi() sys.setrecursionlimit(100000)
sudoku = Sudoku()
sudoku.start()
tk.mainloop()

百度上有个最难数独, 用python跑它的更多相关文章

  1. swoft| 源码解读系列一: 好难! swoft demo 都跑不起来怎么破? docker 了解一下呗~

    title: swoft| 源码解读系列一: 好难! swoft demo 都跑不起来怎么破? docker 了解一下呗~description: 阅读 sowft 框架源码, swoft 第一步, ...

  2. ZhuSuan 是建立在Tensorflow上的贝叶斯深层学习的 python 库

    ZhuSuan 是建立在Tensorflow上的贝叶斯深层学习的 python 库. 与现有的主要针对监督任务设计的深度学习库不同,ZhuSuan 的特点是深入到贝叶斯推理中,从而支持各种生成模式:传 ...

  3. Python+selenium测试环境成功搭建,简单控制浏览器(firefox)接下来,继续学习其他浏览器上的测试环境搭建;学习Python语言,利用Python语言来写测试用例。加油!!!

    Python+selenium测试环境成功搭建,简单控制浏览器(firefox)接下来,继续学习其他浏览器上的测试环境搭建:学习Python语言,利用Python语言来写测试用例.加油!!!

  4. 史上最详细的C语言和Python的插入排序算法

    史上最详细的C语言和Python的插入排序算法插入排序原理:所谓插入排序,就像我们在打牌(斗地主)时,整理我们自己手中自己的牌一样,就像是2,1,3,9,J,K,5,4,这四张牌.我们要把它其中的几张 ...

  5. 在Ubuntu 18.04上安装OpenCV 4(C ++和Python)

    OpenCV于11月20日发布了OpenCV-3.4.4和OpenCV-4.0.0.这些版本中有很多错误修复和其他更改.发布重点如下: OpenCV现在是C ++ 11库,需要符合C ++ 11标准的 ...

  6. 百度上传插件WebUploader,angularjs指令封装

    1.WebUploader特点 官网地址:http://fex.baidu.com/webuploader/ 1.1 分片.并发 分片与并发结合,将一个大文件分割成多块,并发上传,极大地提高大文件的上 ...

  7. 百度上传插件---webuploader的使用

    需求:朋友让找一个兼容IE8的上传插件,卧槽,IE8,我当时是崩溃的,然后就搜到了这个百度的插件,官网是这样描述的 WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HT ...

  8. [转载] 百度上传&下载脚本

    下载百度网盘中的文件,最简单的办法是使用wget命令.找到百度网盘文件,点击下载,然后找到相应的下载地址,复制链接地址即可.但这种方法有一个bug,因为百度云网盘访问文件的链接地址是动态的,当文件比较 ...

  9. 百度上传工具webuploader,图片上传附加参数

    项目中需要上传视频,图片等资源.最先做的是上传图片,开始在网上找了一款野鸡插件,可以实现图片上传预览(无需传到后台).但是最近这个插件出了莫名的问题,不易修复,一怒之下,还是决定找个大点的,靠谱的插件 ...

随机推荐

  1. 关系型数据库MySQL(一)_增删改查

    1.创建表单 create table product (product_id  char(4)  not null, product_name  varchar(100)  not null, sa ...

  2. 【读书笔记】:MIT线性代数(4):Independence, Basis and Dimension

    Independence: The columns of A are independent when the nullspace N (A) contains only the zero vecto ...

  3. Java总结之Java简介

    一.序言 1.软件的介绍 软件是指一系列按照特定顺序组织的计算机数据和指令的集合. 2.人机交互 实现人与计算机的交互,主要有两种方式: 图形界面方式(Graphical User Interface ...

  4. C++中的异常处理(下)

    1,catch 语句块中可以抛出异常: 1,示意图: 2,func() 在 try 语句块中,说明它有可能抛出异常,抛出的异常有可能是整型或其它类型: 3,catch 语句块处理方式是将异常重新抛出去 ...

  5. poj1285 Combinations, Once Again(泛化背包)

    题目传送门 Combinations, Once Again Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 1897   A ...

  6. docker-bridge network

    根据下面这图示,可以了解两个container之间是如何通信的 通过ip link 和 ip a可以看到本地有个docker0 link. [root@localhost ~]# ip link : ...

  7. Java关于线程池的使用

    一.四种线程池创建的方式 Java通过Executors提供四种线程池,分别为: newCachedThreadPool 创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回 ...

  8. YARN学习笔记

    分布式资源调度框架 Yet Another Resource Negotiator YARN 不同框架使用相同的系统资源 YARN的核心组件(架构) ResourceManager RM 整个集群同一 ...

  9. 【记录】docker 安装redis

    docker拉取镜像 docker pull redis docker 启动redis docker run -dit -p 6379:6379 --name redis redis:latest - ...

  10. docker 安装nexus

    1.查找镜像 docker search nexus 2.拉取镜像 docker pull sonatype/nexus3 3.启动容器 docker run -d -p 8081:8081 -p 8 ...