文档介绍
利用python写“猜数字”,“猜词语”,“谁是卧底”这三个游戏,从而快速掌握python编程的入门知识,包括python语法/列表/元组/字典/流程控制/库函数等等。
环境参数
linux平台,python3.4。需要在linux中把python3.4编译一下,这样编写python程序时保存为.py格式的文件并添加执行权限再终端运行即可(原理跟shell脚本相同),非常方便。
ps:贴出来的python程序代码在windows中也兼容,只不过运行方式不是命令行,而是要通过python软件。python软件可以上官网下载安装点击打开链接,在学习的时候,可以直接在python软件上面输入python语句即可打印结果,也就是说python无需编译即可运行,很多人也称之为“脚本”语言。
设计实现
猜数字
很多人在聚餐时都玩过猜数字游戏,由某人随机出一个指定范围内的数,然后其他人一个一个猜,猜的过程中区间不断缩小,直到猜中为止。
这里的猜数字游戏就是用程序来代替那个出数字的人,程序算法设计为:
1.输入数字区间--->2.系统产生区间内的随机数--->3.玩家输入自己猜的数字--->4.比较玩家猜的与答案的高低并提示--->5.未猜中则回到3,猜中则提示猜次数
代码很少,如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#!/usr/local/bin/python3 import random bot = int ( input ( 'Set range bottom\n' )) top = int ( input ( 'Set range top\n' )) rand = random.randint(bot,top) print ( 'Random number in [' + str (bot) + ',' + str (top) + '] generated!' ) num = int ( input ( '###Guess the number###\n' )) cnt = 1 while (num! = rand): if (num<rand): print ( '*_* Lower than the answer' ) else : print ( 'T_T Higher than the answer' ) num = int ( input ( '###Guess the number###\n' )) cnt = cnt + 1 print ( '^_^ You get the answer with [%d] times' % cnt) |
第一行是要让linux系统知道这是python3程序,random是产生随机数的库函数,要注意的是python对格式要求很严格,因为它不用通过{}而是通过缩进量判断流程。
通过这个可以掌握基本的语法和编写规则了,下面再试试有点难度的,用到词组和循环控制等知识。
猜词语
电视节目中的”你来比划我来猜“大家应该都看过,而且很多人也玩过,规则就是一个人看词语比划相应动作和说一些提示,另一个人看不到词语要通过比划的动作猜出来,猜的过程中主持人判断是否符合规则。
某一组玩家猜词语的算法设计为:
1.开始计时--->2.猜词语--->3.答对则正确数加1并回到2,要跳过或犯规了则直接回到2,超时了直接跳到3--->3.循环10次后或时间结束后统计答对的题数
有num组玩家就进行以上流程的num次循环,当然也要准备x组词语,因为每组玩家猜的词语是不同的。
代码量不大,如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
#!/usr/local/bin/python3 import time num = int ( input ( '有多少组玩家\n' )) guessWord = [] correct = [] #定义列表,num+10是不想让guessWord下标不合法 for i in range ( 0 ,num + 10 ): guessWord.append( 0 ) correct.append( 0 ) wordNum = 10 guessWord[ 0 ] = [ '打情骂俏' , '海绵宝宝' , '娇媚' , '金鸡独立' , '狼吞虎咽' , '睡眼朦胧' , '鹤立鸡群' , '手舞足蹈' , '卓别林' , '穿越火线' ] guessWord[ 1 ] = [ '眉飞色舞' , '英雄联盟' , '扭秧歌' , '偷看美女' , '大摇大摆' , '回眸一笑' , '市场营销' , '大眼瞪小眼' , '自恋' , '处女座' ] guessWord[ 2 ] = [ '狗急跳墙' , '捧腹大笑' , '目不转睛' , '愁眉苦脸' , '左顾右盼' , '宫保鸡丁' , '升国旗' , '暗恋' , '臭袜子' , '趁火打劫' ] flag = 'n' for i in range ( 0 ,num): start = time.time() for k in range ( 0 ,wordNum): #显示词语 print (( '%d.%s' ) % (k + 1 ,guessWord[i][k])) flag = input ( '请答题,答对请输入y,跳过请输入任意键' ) end = time.time() sec = end - start #统计用时 if ( 110 < = sec< = 120 ): print ( '还有10秒钟' ) if (sec> = 120 ): print ( '时间到!游戏结束' ) break if (flag = = 'y' ): correct[i] = correct[i] + 1 continue else : continue str_temp = ( '第%d组答对数目:%d' ) % (i + 1 ,correct[i]) print (str_temp) |
其实词语可以做成从独立的文件中读入的方式,这样方便更新和管理,下面就介绍一种用“字典”的方式来获得“谁是卧底”的卧底词。
谁是卧底
谁是卧底也是深受很多人喜欢的游戏,起码要三人以上才能玩,大致分为几个阶段:1.分配平民词语和卧底词语--->2.玩家依次发言--->3.根据发言投票认为谁是卧底--->4.得到票数最多的玩家出局--->5.出局玩家刚好是卧底则平民胜利,如果出局玩家是平民则被冤死并继续第2步,当剩下的平民只有1个时卧底胜利。
特殊情况是,出现两名或以上的玩家票数相同,则相同票数的玩家重新发言,然后全体针对这几个玩家投票。
程序设计思想:输入玩家数num,玩家编号为0~num-1,然后定义三个含有num个元素的列表:词语列表,计算玩家票数的列表,死亡玩家的列表。列表下标从0~num-1,随机产生该区间的数x,代表x号玩家是卧底,然后分配卧底词和平民词。注意,提示几号玩家是卧底或冤死的时候,要将打印信息时候的下标加1,比如下标数0代表的其实是1号玩家。在生活中,没多少人会习惯说自己是“第0个人”这种说法吧,除了程序员--;
在每轮游戏中,依次进行发言,投票,票数最多的玩家出局(出现相同票数则重新发言),出局玩家归入死亡玩家列表。然后开始下一轮。
那么,如果有num位玩家,则最多有多少轮游戏结束?因为进行到只有2位玩家游戏就结束了,所以答案是num-2轮!也就是说上述流程要循环num-2次。
编程思想定了就可以敲代码了,程序代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
#!/usr/local/bin/python3 import random from spyword import spyword num = int ( input ( '请输入玩家数(至少为3)\n' )) #卧底玩家 spy = random.randint( 0 ,num - 1 ) #随机产生词语 定义词语列表 计算玩家票数的列表 统计死亡玩家的列表 list_rand = spyword.popitem() word = [] cnt = [] dead = [] #给三个列表赋值 for i in range ( 0 ,num): word.append( 'a' ) cnt.append( 0 ) dead.append(num + 2 ) #给玩家词语 其中print是调试用的,sanmeVote是出现相同票数的标志,spyWin是卧底胜利的判决条件 for i in range ( 0 ,num): if (i = = spy): word[i] = str (list_rand[ 1 ]) else : word[i] = str (list_rand[ 0 ]) print (word[i]) sameVote = 0 spyWin = 0 #游戏开始 for x in range ( 0 ,num - 1 ): for k in range ( 0 ,num): if ((k not in dead) & (sameVote = = 0 )): print ( '%d号玩家发言时间' % (k + 1 )) print ( '发言环节结束' ) #将各位玩家的票数置0 for j in range ( 0 ,num): if (j not in dead): cnt[j] = 0 for j in range ( 0 ,num): if (j not in dead): vote2p = int ( input ( '请%d号玩家投票' % (j + 1 ))) - 1 cnt[vote2p] = cnt[vote2p] + 1 sameVote = 0 for y in range ( 0 ,num): if ((cnt[y] = = max (cnt)) & (y! = cnt.index( max (cnt)))): print ( '不止一位玩家得到最高票数,请这些玩家重新发言' ) sameVote = 1 if (sameVote = = 0 ): dead[x] = cnt.index( max (cnt)) if (dead[x] = = spy): print ( '卧底得到最多票数,游戏结束' ) spyWin = 1 break print ( '%d号玩家被冤死!' % (dead[x] + 1 )) #游戏结束 if (spyWin = = 0 ): print ( '只剩两名玩家,卧底胜利!' ) |
有一行代码是
1
|
from spyword import spyword |
这里spyword是我自己定义的卧底词字典,运行时把这个文件放在python的工作目录下,就可以让python程序调用该字典了。要查看python工作目录,你需要运行python后输入
>>>importos
>>>os.getcwd()
当然你也可以更改python工作目录。
python是一门简洁高效,通俗易懂的高阶动态编程语言;很多人也称之为“胶水语言”,在接到大项目时往往用python写好主体框架,然后在一些特定模块再用java/js/C++之类的语言实现特定需求。掌握python并不难,通过这篇博客讲到的三个小游戏,希望您能发现python的乐趣,快速找到python编程的窍门。
总结
以上就是本文关于python基础练习之几个简单的游戏的全部内容,希望对大家有所帮助。有什么问题可以随时留言,小编会及时回复大家的。感谢朋友们对本站的支持!
原文链接:http://blog.csdn.net/buptlrw/article/details/41924849