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 算法 排序实现快速排序
Jun 05 Python
win7安装python生成随机数代码分享
Dec 27 Python
python 写的一个爬虫程序源码
Feb 28 Python
Python中字符串格式化str.format的详细介绍
Feb 17 Python
Python基础教程之利用期物处理并发
Mar 29 Python
Python redis操作实例分析【连接、管道、发布和订阅等】
May 16 Python
基于python实现的百度音乐下载器python pyqt改进版(附代码)
Aug 05 Python
在OpenCV里使用特征匹配和单映射变换的代码详解
Oct 23 Python
python pygame实现挡板弹球游戏
Nov 25 Python
深入了解python列表(LIST)
Jun 08 Python
keras 简单 lstm实例(基于one-hot编码)
Jul 02 Python
python实现的人脸识别打卡系统
May 08 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
PHP VS ASP
2006/10/09 PHP
php数组一对一替换实现代码
2012/08/31 PHP
教你如何开启shopnc b2b2c 伪静态
2014/10/21 PHP
PHP向浏览器输出内容的4个函数总结
2014/11/17 PHP
PHP字典树(Trie树)定义与实现方法示例
2017/10/09 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
js取消单选按钮选中示例代码
2013/11/14 Javascript
JavaScript也谈内存优化
2014/06/06 Javascript
实例讲解jquery中mouseleave和mouseout的区别
2016/02/17 Javascript
Node.js + Redis Sorted Set实现任务队列
2016/09/19 Javascript
Bootstrap分页插件之Bootstrap Paginator实例详解
2016/10/15 Javascript
js实现炫酷的左右轮播图
2017/01/18 Javascript
JS仿QQ好友列表展开、收缩功能(第一篇)
2017/07/07 Javascript
springmvc接收jquery提交的数组数据代码分享
2017/10/28 jQuery
js限制输入框只能输入数字(onkeyup触发)
2018/09/28 Javascript
Vue实现购物车详情页面的方法
2019/08/20 Javascript
js实现提交前对列表数据的增删改查
2020/01/16 Javascript
JavaScript实现电灯开关小案例
2020/03/30 Javascript
JS表单验证插件之数据与逻辑分离操作实例分析【策略模式】
2020/05/01 Javascript
JS实现简易图片自动轮播
2020/10/16 Javascript
[55:18]Liquid vs Chaos 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python常用模块用法分析
2014/09/08 Python
Python实现简单登录验证
2016/04/13 Python
TensorFlow高效读取数据的方法示例
2018/02/06 Python
python自动化报告的输出用例详解
2018/05/30 Python
Python 绘制酷炫的三维图步骤详解
2019/07/12 Python
pyCharm 实现关闭代码检查
2020/06/09 Python
Python __slots__的使用方法
2020/11/15 Python
BISSELL官网:北美吸尘器第一品牌
2019/03/14 全球购物
面向游戏玩家和书呆子的极客订阅盒:Loot Crate
2020/11/25 全球购物
微博营销计划书
2014/01/10 职场文书
中班开学寄语
2014/04/04 职场文书
民主评议党员自我鉴定
2014/10/21 职场文书
刑事和解协议书范本
2014/11/19 职场文书
网络销售员岗位职责
2015/04/11 职场文书
初中数学教学反思范文
2016/02/17 职场文书