学习 Python 之后发现似乎比 C 更容易掌握,于是也自己尝试写了一个小程序:

import sys
fo = open("sudoku_data.txt")
sudoku = [0, 0, 0, 0, 0, 0, 0, 0, 0]
for i in range(0,9):sudoku[i] = list(map(int, fo.readline().replace('\n', '')))
fo.close()
def canfill(i, j, k, sudoku): '''当前行 列 填入的数字 数独'''for m in range(0, 9):if (sudoku[i][m] == k or sudoku[m][j] == k or sudoku[i // 3 * 3 + m // 3][j // 3 * 3 + m % 3] == k):return Falsereturn True
def solve(i, j, sudoku):if (i == 9):result = open("sudoku_result.txt",'w')for k in range(0, 9):for m in range(0, 9):result.write(str(sudoku[k][m]))result.write('\n')result.close()sys.exit()if (sudoku[i][j] != 0):solve(i if j < 8 else i + 1, (j + 1) % 9, sudoku)   for k in range(1, 10):if (canfill(i, j, k, sudoku)):sudoku[i][j] = ksolve(i if j < 8 else i + 1, (j + 1) % 9, sudoku)     sudoku[i][j] = 0        #如果下一个数填写失败就让当前所填成功的数为0以避开上一个if的条件,进行下一个k的尝试
solve(0, 0, sudoku)

功能

在data中写入数独,然后运行程序,填写完毕的数独会在result中输出出来

递归

函数调用本身,从而实现回溯,尝试填入下一个k,最终解出答案。

if (sudoku[i][j] != 0):solve(i if j < 8 else i + 1, (j + 1) % 9, sudoku)   for k in range(1, 10):if (canfill(i, j, k, sudoku)):sudoku[i][j] = ksolve(i if j < 8 else i + 1, (j + 1) % 9, sudoku)     sudoku[i][j] = 0

首先判断是否不为0,即区别空与已知条件。
从1到9的循环中尝试填入,满足条件可以调用自身进行下一个判断,如果1-9都不满足,就跳回上一层尝试。
由于结束程序时退出递归很麻烦,于是借用sys.exit()来强制退出。

三目运算

Python 中没有像 C 语言中一样直接使用 x ? a : b 这样的三元表达式,程序中的
solve(i if j < 8 else i + 1, (j + 1) % 9, sudoku)
其实等价于:

if (j < 8):solve(i, (j + 1) % 9, sudoku)
else:solve(i + 1, (j + 1) % 9, sudoku)

意思就是填写右边一个格子,如果已经是最右边,就令行数+1,列变为(8 + 1) % 9 = 0,从下一行第一个格子开始填写。

判断函数

def canfill(i, j, k, sudoku): '''当前行 列 填入的数字 数独'''for m in range(0, 9):if (sudoku[i][m] == k or sudoku[m][j] == k or sudoku[i // 3 * 3 + m // 3][j // 3 * 3 + m % 3] == k):return Falsereturn True

前面的sudoku[i][m] == k or sudoku[m][j] == k很容易理解,之后是对于宫内数字是否重复的判断。

i // 3 * 3返回的结果是0, 3, 6,即每一宫的开始行,之后的j也同理。
m // 3 与 m % 3 可以让 m 在 0 - 8 的逐一遍历中返回
0 0
0 1
0 2
1 0
1 1

这样相加就可以表示出行列。

[Python3]数独计算器相关推荐

  1. 用vb编了个数独计算器

    平时很喜欢玩数独游戏,每天只要信报上有数独游戏,那就不看别的了,专心致志玩一路. 昨天突然想自己编一个软件来算吧,于是就有了这篇文章和一个vb的数独计算器. 下载地址: http://download ...

  2. python3 数独

    数独 最近在网上看到数独,感觉非常有意思,所以就来实现以下. 一个数独题的网站(https://www.oubk.com/DailySudoku/17778/1),偷懒直接爬虫抓下来了,哈哈 代码实现 ...

  3. python tkinter计算器实例_利用Tkinter(python3.6)实现一个简单计算器

    前言 上机实践课程开始了,嗯,老师来了之后念了下PPT,然后说:开始做吧......... 然后就开始了Python的GUI之路,以前没接触过PYthon的可视化界面(虽然这样很不明智) 但是现在做起 ...

  4. 数独游戏-C语言实现

    数独游戏-C语言实现 目标 写一个数独游戏,有以下功能: 1:能随机产生题目并给出答案. 2:求解输入的题目并输出答案. 实现说明 参照百度百科等资料可以知道求解数独的主要算法是:1.通过行.列和宫格 ...

  5. java编程计算器程序代码_34 个送给 Java 程序员的练手项目合集

    人类一生中,99% 的技能都是靠实践学来的,编程更是如此. 在这一点上,编程和打篮球很像:你得亲自上场去打,才能学会篮球:同样,亲手敲下代码,才能真正学会「编程」.太多人看完一本书.几个 G 的视频后 ...

  6. python编写一个简单计算器_如何用Tkinter写个简单计算器

    上机实践课程开始了,嗯,老师来了之后念了下PPT,然后说:开始做吧......... 然后就开始了Python的GUI之路,以前没接触过PYthon的可视化界面(虽然这样很不明智) 但是现在做起来感觉 ...

  7. python tkinter计算器实例_可能是最有颜值的Python Tkinter计算器

    上机实践课程开始了,嗯,老师来了之后念了下PPT,然后说:开始做吧......... 然后就开始了Python的GUI之路,以前没接触过PYthon的可视化界面(虽然这样很不明智) 但是现在做起来感觉 ...

  8. 【趣味数学】数独 Sudoku

    在线数独计算器:https://shudu.gwalker.cn/ 数独(shù dú)是源自18世纪瑞士的一种数学游戏.是一种运用纸.笔进行演算的逻辑游戏.玩家需要根据9×9盘面上的已知数字,推理出 ...

  9. 数独游戏-很久之前做的,现在整理一下

    题目: 写一个数独游戏,有以下功能: 1:能随机产生题目并给出答案. 2:求解输入的题目并输出答案. 实验说明: 参照百度百科等资料可以知道求解数独的主要算法是:1.通过行.列和宫格确定可填数字.2. ...

最新文章

  1. idea开发swing项目_IntelliJ IDEA 开发swing(一)
  2. 如何得到长整数逆序后的整数
  3. Tensorflow入门神经网络代码框架
  4. python多级字典_Python多层字典取值
  5. 我拿模型当朋友,模型却想泄漏我的隐私?
  6. c语言位运算符的使用_C语言程序使用位运算符检查给定数字是否为回文
  7. 通过Python扫描代码关键字并进行预警
  8. “一休数学思维”改名“海豚思维”,并完成数千万元Pre-A轮融资
  9. 朝鲜欲对韩国发起大规模网络攻击 但计划被韩方挫败
  10. 计算机网络 | 无盘工作站的建立
  11. 拉登是我罩的队_软件需求规格说明书
  12. 信息安全工程师考试科目
  13. 常见概率抽样方法及其适用场景总结
  14. 快速判断工作簿中是否存在指定工作表
  15. 海南旅游自由行攻略怎么玩
  16. [情感] 纯情女生给老实木讷男孩的恋爱建议
  17. matlab simulink入门:搭建一个简单的电路
  18. 区块链运作机制_区块链如何运作? 铂 4
  19. 合并的表格怎么加横线_word
  20. 电商派争夺零售派:传统百货扎堆试水O2O

热门文章

  1. 图像分类——猫狗大战问题
  2. Google Earth Engine(GEE)下载全球土壤砂粒(Sand)含量数据
  3. 基于android餐馆点餐系统报告感想,基于Android的餐厅点餐系统的设计与实现
  4. VMware虚拟机ping不通主机,Destination Host Unreachable
  5. IDF实验室-抓到一只苍蝇
  6. E: dpkg was interrupted, you must manually run ‘dpkg –configure -a’ to correct the problem. 解决办法
  7. Zabbix监控之监控项
  8. 美国大学计算机牛校简介
  9. 人体解析任务 和 Look into Person数据集 (附源码分享)
  10. php安全新闻早八点-高级持续渗透-第一季关于后门