python基础练习之几个简单的游戏


Posted in Python onNovember 10, 2017

文档介绍

利用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,猜中则提示猜次数

代码很少,如下所示:

#!/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组词语,因为每组玩家猜的词语是不同的。

代码量不大,如下所示:

#!/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次。

编程思想定了就可以敲代码了,程序代码如下:

#!/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 ('只剩两名玩家,卧底胜利!')

有一行代码是

from spyword import spyword

这里spyword是我自己定义的卧底词字典,运行时把这个文件放在python的工作目录下,就可以让python程序调用该字典了。要查看python工作目录,你需要运行python后输入

>>>importos

>>>os.getcwd()

当然你也可以更改python工作目录。

python是一门简洁高效,通俗易懂的高阶动态编程语言;很多人也称之为“胶水语言”,在接到大项目时往往用python写好主体框架,然后在一些特定模块再用java/js/C++之类的语言实现特定需求。掌握python并不难,通过这篇博客讲到的三个小游戏,希望您能发现python的乐趣,快速找到python编程的窍门。

总结

以上就是本文关于python基础练习之几个简单的游戏的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:Python3中的列表,元组,字典,字符串相关知识小结、Python爬虫实例爬取网站搞笑段子、python实现人脸识别代码等,有什么问题可以随时留言,小编会及时回复大家的。感谢朋友们对本站的支持!

Python 相关文章推荐
使用Python对Csv文件操作实例代码
May 12 Python
Python正则表达式分组概念与用法详解
Jun 24 Python
Python中如何优雅的合并两个字典(dict)方法示例
Aug 09 Python
python 打印直角三角形,等边三角形,菱形,正方形的代码
Nov 21 Python
pandas数据预处理之dataframe的groupby操作方法
Apr 13 Python
python多进程实现文件下载传输功能
Jul 28 Python
在python中获取div的文本内容并和想定结果进行对比详解
Jan 02 Python
python修改字典键(key)的方法
Aug 05 Python
django3.02模板中的超链接配置实例代码
Feb 04 Python
python 删除excel表格重复行,数据预处理操作
Jul 06 Python
python使用建议与技巧分享(一)
Aug 17 Python
python opencv检测直线 cv2.HoughLinesP的实现
Jun 18 Python
Python实现购物车功能的方法分析
Nov 10 #Python
Python实现的单向循环链表功能示例
Nov 10 #Python
Python3中的列表,元组,字典,字符串相关知识小结
Nov 10 #Python
浅谈Python处理PDF的方法
Nov 10 #Python
django开发教程之利用缓存文件进行页面缓存的方法
Nov 10 #Python
python使用邻接矩阵构造图代码示例
Nov 10 #Python
python先序遍历二叉树问题
Nov 10 #Python
You might like
如何将一个表单同时提交到两个地方处理
2006/10/09 PHP
php 利用array_slice函数获取随机数组或前几条数据
2015/09/30 PHP
JQuery下的Live方法和$.browser方法使用代码
2010/06/02 Javascript
THREE.JS入门教程(4)创建粒子系统
2013/01/24 Javascript
JS和函数式语言的三特性
2014/03/05 Javascript
jQuery实现简单网页遮罩层/弹出层效果兼容IE6、IE7
2014/06/16 Javascript
js实现简单的验证码
2015/12/25 Javascript
详解使用grunt完成requirejs的合并压缩和js文件的版本控制
2017/03/02 Javascript
Vue2.x中的Render函数详解
2017/05/30 Javascript
nodejs模块学习之connect解析
2017/07/05 NodeJs
bootstrap日期插件daterangepicker使用详解
2017/10/19 Javascript
ES6 javascript的异步操作实例详解
2017/10/30 Javascript
Node.js搭建小程序后台服务
2018/01/03 Javascript
解决vue打包css文件中背景图片的路径问题
2018/09/03 Javascript
详解JavaScript作用域和作用域链
2019/03/19 Javascript
Vue实现回到顶部和底部动画效果
2019/07/31 Javascript
es6函数之尾调用优化实例分析
2020/04/25 Javascript
Vue实现小购物车功能
2020/12/21 Vue.js
js中延迟加载和预加载的具体使用
2021/01/14 Javascript
[55:35]VGJ.S vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
Python去除字符串两端空格的方法
2015/05/21 Python
利用Python开发微信支付的注意事项
2016/08/19 Python
Django 添加静态文件的两种实现方法(必看篇)
2017/07/14 Python
pandas 对group进行聚合的例子
2019/12/27 Python
Python实现钉钉订阅消息功能
2020/01/14 Python
如何在python开发工具PyCharm中搭建QtPy环境(教程详解)
2020/02/04 Python
python集成开发环境配置(pycharm)
2020/02/14 Python
python实现文字版扫雷
2020/04/24 Python
python3.6使用SMTP协议发送邮件
2020/05/20 Python
Python中用xlwt制作表格实例讲解
2020/11/05 Python
python如何用matplotlib创建三维图表
2021/01/26 Python
英国Zoro工具:手动工具,电动工具和个人防护用品
2016/11/02 全球购物
武汉某公司的C#笔试题面试题
2015/12/25 面试题
个性发展自我评价
2014/02/11 职场文书
低碳环保倡议书
2014/04/14 职场文书
无犯罪记录证明
2014/09/19 职场文书