一起來玩游戲啊

炎炎夏日,獨(dú)坐家中,閑來無事,便用Python寫了2個(gè)簡單的解悶小游戲,分享給你們,也希望大家通過這兩個(gè)小游戲可以學(xué)習(xí)Python的編程知識(shí)。

1.用Python破解九宮格

九宮格最早叫「洛書」,現(xiàn)在也叫「幻方」。九宮格游戲?qū)θ藗兊乃季S鍛煉有著極大的作用,千百年來對人們的思維訓(xùn)練影響巨大,從古時(shí)起人們便意識(shí)到九宮格的教育意義,現(xiàn)在也經(jīng)常出現(xiàn)在文學(xué)、影視中。

好了,放了這么多洋屁,該進(jìn)入正題啦!

九宮格要求:把1至9這九個(gè)數(shù)字放進(jìn)一個(gè)3*3的網(wǎng)格,思考怎么使每行、每列以及兩個(gè)對角線上的三數(shù)之和都等于15。

破解九宮格的算法有很多種,今天我們就用最原始的算法——暴力破解法。

九宮格是三行三列,每一行都是1-9中的3個(gè)數(shù)字,所以我們先取1-9所有的3個(gè)數(shù)字的全排列組合[S1,S2,…,Sn],總共有9*8*7=504種。

這樣3行,其實(shí)就是每一行從這個(gè)504序列里面取一個(gè)放到第一排、第二排、第三排,就形成了一個(gè)矩陣。

最后對這個(gè)3*3的矩陣,只要判斷行、列、對角線和斜對角線都是15就可以了。

代碼思路

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

Python標(biāo)準(zhǔn)庫中有一個(gè)很牛逼的模塊——itertools,這個(gè)模塊提供了很多操作迭代對象,非常方便。

這次我們用itertools里面的permutations,它可以方便的全排列序列中的數(shù)字,每一個(gè)組合都是3個(gè)數(shù)字:比如S1(1,2,3),S2(1,5,8)…這樣我們得到一個(gè)長的列表[S1,S2,…,Sn]

Step2:列出3*3的矩陣

Step3:計(jì)算行、列、對角線和斜對角線都是15

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

row1_1,row1_2,row1_3

row2_1,row2_2,row2_3

row3_1,row3_2,row3_3

Step4:過濾重復(fù)矩陣

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

1 9 5

9 5 1

5 1 9

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

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

iflen(set(row1)&set(row2))==0:

有人會(huì)問了:為什么不是三行比,比如row1&row2&row3呢?

因?yàn)榍皟尚卸ㄏ聛恚詈笠恍锌隙ㄒ捕搜剑?/p>

完整代碼

importitertools

defjiuGongge():

#step1

#窮舉3個(gè)數(shù)字的組合

nums=[xforxinrange(1,10)]

seq_3nums=[pforpinitertools.permutations(nums,3)]

#過濾出和等于15

seq_3nums=[pforpinitertools.permutations(nums,3)ifsum(p)==15]

# print (seq_3nums)

#step2:搜索行,列,對角,斜對角,中線均為15

matrix=[]

forrow1_1,row1_2,row1_3inseq_3nums:

forrow2_1,row2_2,row2_3inseq_3nums:

forrow3_1,row3_2,row3_3inseq_3nums:

ifrow1_1+row1_2+row1_3==15\

androw1_1+row2_2+row3_3==15\

androw1_1+row2_1+row3_1==15\

androw1_3+row2_2+row3_1==15\

androw1_2+row2_2+row3_2==15:

#step3 去重

row1=[row1_1,row1_2,row1_3]

row2=[row2_1,row2_2,row2_3]

row3=[row3_1, row3_2, row3_3]

iflen(set(row1) & set(row2)) ==0:

ifrow1notinmatrix:

matrix = [row1, row2, row3]

print(matrix)

print('-'*100)

結(jié)果展示

********************

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

2.猜數(shù)字游戲

用戶輸入1-20中某一個(gè)數(shù)字,可以猜5次,當(dāng)輸入的數(shù)字與隨機(jī)生成的預(yù)定數(shù)字一致時(shí),就算你贏,當(dāng)然這里有要求,你只有5次機(jī)會(huì),每次輸入都有提示,大了或者小了,如果超過5次,就會(huì)提示game over。

代碼思路:

1.用input提示用戶輸入一個(gè)數(shù)字,然后隨機(jī)產(chǎn)生一個(gè)1-20的整數(shù)。

2.因?yàn)樽疃嘌h(huán)5次,所以需要用一個(gè)while來循環(huán),根據(jù)循環(huán)體輸出的內(nèi)容,來對輸入的數(shù)字進(jìn)行判斷。

3.分別對數(shù)字大了,小了和正好,三種情況進(jìn)行判斷,并且retry的計(jì)數(shù)器進(jìn)行加1。

代碼如下:


importrandom

defguess_num():

max_retry =5

i=0

random_num=random.randint(1,21)

whilei

try:

num=int(input("please input num :1-20\n"))

print(f'Your input is :{num}')

ifnum>random_num:

print('>>Biger')

elifnum

print('>>Small')

else:

print('!!Great,you guess the num!')

break

exceptExceptionase:

print(f'Your input incorrect,Please input num 1-20\n')

finally:

i+=1

print(f'retry time:{max_retry-i}')

else:

print('Your retry time>5,Game over!')

guess_num()

好了,感興趣的同學(xué)趕緊運(yùn)行一下代碼吧,尤其是第二個(gè)猜數(shù)字游戲,個(gè)人覺得還是很有意思的,你也可以增加游戲的難度,比如輸入1-100中的某個(gè)數(shù)字,進(jìn)行猜數(shù)游戲。

原創(chuàng)不易,如果你覺得不錯(cuò),點(diǎn)個(gè)關(guān)注,留下你的小心心哦。歡迎志同道合的技術(shù)大神留言交流。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 寫在前面 大家好,今天開始我將會(huì)在這個(gè)專欄記錄自己每天學(xué)習(xí)Python的心得體會(huì) ,歡迎技術(shù)大牛交流 ,互相學(xué)習(xí)。...
    叫我小包總閱讀 2,425評論 0 1
  • 8月22日-----字符串相關(guān) 2-3 個(gè)性化消息: 將用戶的姓名存到一個(gè)變量中,并向該用戶顯示一條消息。顯示的消...
    future_d180閱讀 1,027評論 0 1
  • 寫在前面的話 代碼中的# > 表示的是輸出結(jié)果 輸入 使用input()函數(shù) 用法 注意input函數(shù)輸出的均是字...
    FlyingLittlePG閱讀 3,207評論 0 9
  • 轉(zhuǎn)自鏈接 目錄 1.認(rèn)識(shí)NPOI 2.使用NPOI生成xls文件 2.1創(chuàng)建基本內(nèi)容 2.1.1創(chuàng)建Workboo...
    腿毛褲閱讀 11,132評論 1 3
  • 轉(zhuǎn)自鏈接 2.3.5 IF函數(shù) 2.3.6 CountIf和SumIf函數(shù) 2.3.7 Lookup函數(shù) 2.3....
    腿毛褲閱讀 13,193評論 0 0

友情鏈接更多精彩內(nèi)容