日本电影一区二区_日本va欧美va精品发布_日本黄h兄妹h动漫一区二区三区_日本欧美黄色

九宮格用Python怎么破-14行代碼搞定(九宮格拼圖python代碼)

  • 前面我陸陸續(xù)續(xù)寫了30多篇講了很多Python知識點(diǎn):字符串,列表,字典,循環(huán),函數(shù), 模塊,文件,異常等等,這么多知識,如何靈活運(yùn)用呢
  • 我覺得說千遍道萬遍,不如敲一遍,于是我準(zhǔn)備寫一些Python的趣味編程的小例子,后面會陸續(xù)寫給大家
  • 挑的例子一定要有趣而且簡單,適合初學(xué)者上手,通過實(shí)戰(zhàn)的小例子,可以讓初學(xué)者綜合運(yùn)用Python的知識點(diǎn)
  • 在完成編程的同時也能發(fā)現(xiàn)Python之美,增加學(xué)習(xí)Python的樂趣

九宮格

九宮格游戲?qū)θ藗兊乃季S鍛煉有著極大的作用,從古時起人們便意識到九宮的教育意義。千百年來影響巨大,在文學(xué)、影視中都曾出現(xiàn)過。九宮格最早叫“洛書”,現(xiàn)在也叫“幻方” 。

要求很簡單:

1至9九個數(shù)字,橫豎都有3個格,思考怎么使每行、每列兩個對角線上的三數(shù)之和都等于15

九宮格用Python怎么破-14行代碼搞定(九宮格拼圖python代碼)

算法:

九宮圖的算法有很多種,我們今天講的是最原始的算法,算是暴力破解法

  • 九宮格是三行三列,每一行都是1-9中的3個數(shù)字,我們先獲取1-9所有的3個數(shù)字全排列組合[S1,S2..Sn],差不多有9*8*7=504種
  • 這樣的話3行,其實(shí)就是每一行從這個504序列里面取一個放到第一排,第二排,第三排,就形成一個矩陣
  • 對這個3*3矩陣,只要判斷行,列,對角線和斜對角線都是15就可以了

是不是很簡單,好我們下面詳細(xì)來講一下算法步驟

1.獲取1-9數(shù)字的全排列

  • Python標(biāo)準(zhǔn)庫中有一個赫赫有名的模塊叫做itertools
  • 這模塊提供了很多操作迭代對象的函數(shù),非常方便(以后我們會有文章專門講Python中你必須要知道的模塊)
  • 這次我們用itertools里面的permutations,它可以方便的全排列序列中的數(shù)字,每一個組合都是3個數(shù)字:比如S1(1,2,3),S2(1,5,8)..這樣我們得到一個長的列表[S1,S2…Sn]

九宮格用Python怎么破-14行代碼搞定(九宮格拼圖python代碼)

2.列出3*3的矩陣

  • 每一行都是48個中選1個,那么3行最大的搜索空間就是48*48*48=110592
  • 讓電腦運(yùn)算十幾萬搜索空間只需要幾秒鐘,我們先列出110592個3*3的矩陣
  • 怎么做呢,很簡單,3個for循環(huán)搞定:

九宮格用Python怎么破-14行代碼搞定(九宮格拼圖python代碼)

3.計(jì)算行,列,對角線和斜對角線都是15

上面我們已經(jīng)把這3*3的矩陣列出來了:

row1_1,row1_2,row1_3

row2_1,row2_2,row2_3

row3_1,row3_2,row3_3

只要判斷行,列,對角線和斜對角線都是15就可以了

九宮格用Python怎么破-14行代碼搞定(九宮格拼圖python代碼)

4.過濾重復(fù)的矩陣

這樣我們就可以得到’行,列,對角線和斜對角線都是15’的矩陣,但是這里面會有重復(fù)的元素,比如下面這樣的:

1 9 5

9 5 1

5 1 9

比如第一行是(1,5,9),第二行是(9,5,1)這樣的怎么過濾呢,簡單我們用集合

把第一行和第二行都放到集合里面,主要判斷他們的交集長度為0,則表示他們沒有交集就可以了

if len(set(row1)&set(row2))==0:

好了,經(jīng)過上面的4步就可以很方便的搞定九宮格,其實(shí)九宮格就是3階魔方,還有4階的魔方,就是四四格,使橫看豎看斜看均為34,也是類似的,有興趣的同學(xué)可以解一下4階的

最后的代碼運(yùn)行的輸出如下:

>>2 7 6 9 5 1 4 3 8 2 9 4 7 5 3 6 1 8 4 3 8 9 5 1 2 7 6 4 9 2 3 5 7 8 1 6 6 1 8 7 5 3 2 9 4 6 7 2 1 5 9 8 3 4 8 1 6 3 5 7 4 9 2 8 3 4 1 5 9 6 7 2

原文地址:https://dwz.cn/X2I8h3nF

作者:菜鳥學(xué)Python

相關(guān)新聞

聯(lián)系我們
聯(lián)系我們
公眾號
公眾號
在線咨詢
分享本頁
返回頂部
会同县| 长白| 孝昌县| 慈溪市| 嵩明县| 沁源县| 宜阳县| 栾城县| 巴青县| 西乌珠穆沁旗| 青浦区| 延吉市| 武宁县| 临泽县| 渝北区| 静宁县| 仁寿县| 临江市| 长阳| 凤冈县| 肇庆市| 富蕴县| 德庆县| 云霄县| 凤城市| 阜新市| 新巴尔虎右旗| 泾川县| 娄底市| 突泉县| 宣恩县| 修水县| 盐城市| 平山县| 怀柔区| 黄梅县| 蓬莱市| 平利县| 四川省| 土默特右旗| 都江堰市|