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 可爱的大小写
Sep 06 Python
重命名批处理python脚本
Apr 05 Python
Python的ORM框架SQLAlchemy入门教程
Apr 28 Python
在Python的Django框架中编写错误提示页面
Jul 22 Python
Python编码爬坑指南(必看)
Jun 10 Python
Python自动化运维和部署项目工具Fabric使用实例
Sep 18 Python
Pycharm 设置自定义背景颜色的图文教程
May 23 Python
python找出完数的方法
Nov 12 Python
Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】
Mar 30 Python
Python中使用threading.Event协调线程的运行详解
May 02 Python
解决python中import文件夹下面py文件报错问题
Jun 01 Python
详解Django中 render() 函数的使用方法
Apr 22 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
在IIS7.0下面配置PHP 5.3.2运行环境的方法
2010/04/13 PHP
一个经典的PHP文件上传类分享
2014/11/18 PHP
php判断邮箱地址是否存在的方法
2016/02/13 PHP
PHP中的输出echo、print、printf、sprintf、print_r和var_dump的示例代码
2020/12/01 PHP
突发奇想的一个jquery插件
2010/11/19 Javascript
jQuery结合HTML5制作的爱心树表白动画
2015/02/01 Javascript
jQuery插件Elastislide实现响应式的焦点图无缝滚动切换特效
2015/04/12 Javascript
js实现顶部可折叠的菜单工具栏效果实例
2015/05/09 Javascript
jQuery在线选座位插件seat-charts特效代码分享
2015/08/27 Javascript
深入浅出 jQuery中的事件机制
2016/08/23 Javascript
BootStrap中的表单大全
2016/09/07 Javascript
JS控制FileUpload的上传文件类型实例代码
2016/10/07 Javascript
浅谈jquery之on()绑定事件和off()解除绑定事件
2016/10/26 Javascript
BootStrap组件之进度条的基本用法
2017/01/19 Javascript
JS中showModalDialog关闭子窗口刷新主窗口用法详解
2017/03/25 Javascript
浅谈react 同构之样式直出
2017/11/07 Javascript
详解vue+css3做交互特效的方法
2017/11/20 Javascript
jQuery实现使用sort方法对json数据排序的方法
2018/04/17 jQuery
详解Vue webapp项目通过HBulider打包原生APP
2018/06/29 Javascript
详解Vue实战指南之依赖注入(provide/inject)
2018/11/13 Javascript
jQuery事件委托代码实践详解
2019/06/21 jQuery
vue 集成 vis-network 实现网络拓扑图的方法
2019/08/07 Javascript
vuex存取值和映射函数使用说明
2020/07/24 Javascript
python下载文件时显示下载进度的方法
2015/04/02 Python
Python iter()函数用法实例分析
2018/03/17 Python
python人民币小写转大写辅助工具
2018/06/20 Python
Pycharm 文件更改目录后,执行路径未更新的解决方法
2019/07/19 Python
python实现logistic分类算法代码
2020/02/28 Python
护理专业自荐信
2013/12/03 职场文书
2015年幼儿园毕业感言
2014/02/12 职场文书
材料工程专业毕业生求职信
2014/03/04 职场文书
2014乡镇干部对照检查材料思想汇报
2014/09/26 职场文书
财务助理岗位职责范本
2014/10/09 职场文书
幼儿园大班个人总结
2015/02/28 职场文书
建国大业观后感800字
2015/06/01 职场文书
2016年教师党员创先争优承诺书
2016/03/24 职场文书