数独(Sudoku)是一种智力游戏, 也是一种学习逻辑的最好工具. 而Python 则是世界上最好的电脑程式语言之一. 所以如果能够结合这两种工具, 来教导小孩或青少年来学习逻辑的话, 那就是最好的组合. 这就是这个专案的缘起, 也是这个专案的目标.
你可以从下列网站取得与学习数独(sudoku)的相关知识:http://en.wikipedia.org/wiki/Sudoku
下面是一个典型的数独题目: |
下面是一个典型解出来的数独: |
|
假如我们开始在位置(1, 1) 中置放一个数, 那必然是有9个可能的数字让我们选择. 然后当我要置放第二个数到位置(1, 2) 时, 那我们会有8个数字可以选择. 所以, 以此类推, 从上往下, 从左到右, 我们可以写下每一个位置可以被选择的数字:
9! | 6! | 3! | 6! | 3! | 1! | 3! | 1! | 1! |
---|---|---|---|---|---|---|---|---|
9 | 6 | 3 | 6 | 3 | 1 | 3 | 1 | 1 |
8 | 5 | 2 | 5 | 2 | 1 | 2 | 1 | 1 |
7 | 4 | 1 | 4 | 1 | 1 | 1 | 1 | 1 |
6 | 3 | 1 | 3 | 1 | 1 | 1 | 1 | 1 |
5 | 2 | 1 | 2 | 1 | 1 | 1 | 1 | 1 |
4 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
3 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
2 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
所以, 所有的组合就是9!*6!*3!*6!*3!*1!*3!*1!*1* = 4,514,807,808,000
假如我们使用 python 来计算时:
>>> def n(x):
if x==1:
return 1
else:
return x*n(x-1)
>>> n(9)*n(6)*n(3)*n(6)*n(3)*n(1)*n(3)*n(1)*n(1)
关于数独的数学知识, 你可以到下列网站来取得, http://en.wikipedia.org/wiki/Mathematics_of_Sudoku