數獨相信大家都玩過,它被稱為「聰明人的遊戲」,在很多人眼裡:
會玩數獨=高智商
為什麼?因為數獨能夠培養觀察力,提高反應力:數獨的練習能夠鍛鍊手眼腦的協調性、提高手腦並用的能力,鍛鍊大腦的思維靈活度,全面提高反應力。
非常適合孩子在成長過程中鍛鍊大腦,適合成年人在生活中激活思維。
不過當我們遇到不會解的數獨怎麼辦?對於我們這些學Python的人而言,答案當然是用Python算出來啦!
基於 Pygame-Sudoku-Solver 這個開源項目,可視化解決數獨問題變得極其簡單:
https://github.com/tymscar/Pygame-Sudoku-Solver
開始之前,你要確保Python和pip已經成功安裝在電腦上,如果沒有,請訪問這篇文章:超詳細Python安裝指南 進行安裝。如果你用Python的目的是數據分析,可以直接安裝Anaconda:Python數據分析與挖掘好幫手—Anaconda,它內置了Python和pip.
此外,推薦大家用VSCode編輯器,因為它可以在編輯器下方的終端運行命令安裝依賴模塊:Python 編程的最好搭檔—VSCode 詳細指南。
Windows環境下打開 Cmd (開始-運行-CMD),蘋果系統環境下請打開 Terminal (command+空格輸入Terminal),準備開始輸入命令安裝依賴。
1.在終端輸入以下命令下載該開源庫
git clone https://github.com/tymscar/Pygame-Sudoku-Solver.git
2.使用cd命令進入該文件夾,並安裝依賴:
cd Pygame-Sudoku-Solver
pip install -r requirements.txt
接下來,可以試試運行該項目了:
此時會出現一個空白3*3的九宮格
2.怎麼解題這個開源項目的解題方法如下:
1.輸入題目數字 — 你只需要點擊空白區域,此時會回顯綠色方塊,輸入數字,如果數字合法則會填入框內,如果不合法則會閃現紅色。
2.當你將數獨題目裡的所有數字填寫完畢,單擊空格鍵即可開始運算:
而且,細心的作者還幫大家準備了夜晚模式,單擊「d」鍵可切換到夜晚模式:
3.原理所有的解題原始碼都放在了solver.py文件中,大家可以在裡面看到整個解題過程。
作者沒有寫任何注釋,但是代碼邏輯思路是清晰的,比如核心判斷邏輯,Cell類裡的 isValid, 用於判斷某個值 (what變量) 放進某個 Cell 裡是否合法:
此處,lineV.cells 表示數組中每一列組成的cell;lineH.cells即每一行組成的cell;box.cells即每個子九宮格。他們都有一個共同的特點:其中不能出現重複的值。
因此你會看到如果某個值存在於這些cells當中,isValid直接返回False,表明其不應該出現在這個位置。