Python基础实战:通过三个小游戏掌握核心语法与数据结构
本文通过实现“猜数字”、“猜词语”和“谁是卧底”三个经典游戏,详解Python基础语法、列表、元组、字典及流程控制的应用。涵盖Linux与Windows环境下的Python3.4运行配置,解析随机数生成、计时器使用及字典文件调用方法,帮助初学者快速掌握Python编程技巧。
文档介绍
本文旨在通过编写“猜数字”、“猜词语”以及“谁是卧底”三款游戏,帮助读者快速入门Python编程。内容涵盖Python基础语法、列表与元组的使用、字典操作、流程控制语句以及常用库函数的调用等核心知识点。
环境参数
开发环境为Linux平台,使用Python3.4版本。在Linux系统中,需先编译安装Python3.4。编写Python程序时,将代码保存为.py格式文件,赋予执行权限后,即可在终端直接运行,其原理类似于Shell脚本,操作十分便捷。
补充说明:上述Python代码在Windows系统中同样兼容,但运行方式不同,需通过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号玩家。生活中人们习惯说“第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后输入以下命令:
>>>importos
>>>os.getcwd()
当然,用户也可以手动更改Python的工作目录。
Python是一门简洁、高效、通俗易懂的高阶动态编程语言;许多人也称之为“胶水语言”。在大型项目中,常使用Python编写主体框架,而在特定模块中使用Java、JS或C++等语言实现具体需求。掌握Python并不困难,希望通过本文介绍的三个小游戏,您能发现Python的乐趣,快速找到编程窍门。
总结
以上就是本文关于Python基础练习之几个简单游戏的全部内容,希望对大家有所帮助。感兴趣的朋友可继续参阅本站:Python3中的列表、元组、字典、字符串相关知识小结、Python爬虫实例爬取网站搞笑段子、Python实现人脸识别代码等文章。如有任何问题,欢迎随时留言,小编会及时回复。感谢朋友们对本站的支持!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









