一起来玩游戏啊

炎炎夏日,独坐家中,闲来无事,便用Python写了2个简单的解闷小游戏,分享给你们,也希望大家通过这两个小游戏可以学习Python的编程知识。

1.用Python破解九宫格

九宫格最早叫「洛书」,现在也叫「幻方」。九宫格游戏对人们的思维锻炼有着极大的作用,千百年来对人们的思维训练影响巨大,从古时起人们便意识到九宫格的教育意义,现在也经常出现在文学、影视中。

好了,放了这么多洋屁,该进入正题啦!

九宫格要求:把1至9这九个数字放进一个3*3的网格,思考怎么使每行、每列以及两个对角线上的三数之和都等于15。

破解九宫格的算法有很多种,今天我们就用最原始的算法——暴力破解法。

九宫格是三行三列,每一行都是1-9中的3个数字,所以我们先取1-9所有的3个数字的全排列组合[S1,S2,…,Sn],总共有9*8*7=504种。

这样3行,其实就是每一行从这个504序列里面取一个放到第一排、第二排、第三排,就形成了一个矩阵。

最后对这个3*3的矩阵,只要判断行、列、对角线和斜对角线都是15就可以了。

代码思路

Step1:获取1-9数字的全排列

Python标准库中有一个很牛逼的模块——itertools,这个模块提供了很多操作迭代对象,非常方便。

这次我们用itertools里面的permutations,它可以方便的全排列序列中的数字,每一个组合都是3个数字:比如S1(1,2,3),S2(1,5,8)…这样我们得到一个长的列表[S1,S2,…,Sn]

Step2:列出3*3的矩阵

Step3:计算行、列、对角线和斜对角线都是15

上面我们已经把这个3*3的矩阵列出来了:

row1_1,row1_2,row1_3

row2_1,row2_2,row2_3

row3_1,row3_2,row3_3

Step4:过滤重复矩阵

这样我们就可以得到“行、列、两对角线都是15”的矩阵,但是这里面会有重复的元素,比如下面这样的:

1 9 5

9 5 1

5 1 9

比如第一行是(1,5,9),第二行是(9,5,1)这样的怎么过滤呢,简单我们用集合。

把第一行和第二行都放到集合里面,主要判断他们的交集长度为0,则表示他们没有交集就可以了。

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

有人会问了:为什么不是三行比,比如row1&row2&row3呢?

因为前两行定下来,最后一行肯定也定了呀!

完整代码

importitertools

defjiuGongge():

#step1

#穷举3个数字的组合

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)

结果展示

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

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.猜数字游戏

用户输入1-20中某一个数字,可以猜5次,当输入的数字与随机生成的预定数字一致时,就算你赢,当然这里有要求,你只有5次机会,每次输入都有提示,大了或者小了,如果超过5次,就会提示game over。

代码思路:

1.用input提示用户输入一个数字,然后随机产生一个1-20的整数。

2.因为最多循环5次,所以需要用一个while来循环,根据循环体输出的内容,来对输入的数字进行判断。

3.分别对数字大了,小了和正好,三种情况进行判断,并且retry的计数器进行加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()

好了,感兴趣的同学赶紧运行一下代码吧,尤其是第二个猜数字游戏,个人觉得还是很有意思的,你也可以增加游戏的难度,比如输入1-100中的某个数字,进行猜数游戏。

原创不易,如果你觉得不错,点个关注,留下你的小心心哦。欢迎志同道合的技术大神留言交流。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,233评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,013评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,030评论 0 241
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,827评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,221评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,542评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,814评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,513评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,225评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,497评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,998评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,342评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,986评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,812评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,560评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,461评论 2 266

推荐阅读更多精彩内容

  • 写在前面 大家好,今天开始我将会在这个专栏记录自己每天学习Python的心得体会 ,欢迎技术大牛交流 ,互相学习。...
    叫我小包总阅读 2,250评论 0 1
  • 8月22日-----字符串相关 2-3 个性化消息: 将用户的姓名存到一个变量中,并向该用户显示一条消息。显示的消...
    future_d180阅读 853评论 0 1
  • 写在前面的话 代码中的# > 表示的是输出结果 输入 使用input()函数 用法 注意input函数输出的均是字...
    FlyingLittlePG阅读 2,682评论 0 8
  • 转自链接 目录 1.认识NPOI 2.使用NPOI生成xls文件 2.1创建基本内容 2.1.1创建Workboo...
    腿毛裤阅读 9,913评论 1 3
  • 转自链接 2.3.5 IF函数 2.3.6 CountIf和SumIf函数 2.3.7 Lookup函数 2.3....
    腿毛裤阅读 12,535评论 0 0