Python⼩游戏——猜数字教程(random库教程)今天来开发⼀个简单的数字逻辑游戏,猜数字(数字)
⾸先开发游戏第⼀件事,了解需求。
猜数字游戏规则:
计算机随机⽣成⼀个指定范围的数字,由玩家来猜测,
之后计算机会根据玩家提供数字来与⾃⼰⽣成的数字进⾏对⽐,并返回结果太⼤或者太⼩
例:计算机随机⽣成1-100的数字53,玩家猜测为50,计算机对⽐结果后返回结果:太⼩了
多次重复直到玩家猜中数字,游戏结束统计分数。
需求分析:
1.计算机随机⽣成数字;
2.与输⼊结果进⾏⽐较,返回太⼤太⼩结果;
3.判定是否回答正确,结束游戏;
3.记录分数并且输出;
开发环境:
python版本:IDLE 3.7
开发软件:sublime_text
技术⽀持:
随机数在计算机应⽤中⼗分常见,在Python中,通过内置random库来实现产⽣各种分布的伪随机数序列。
random数据库通过采⽤梅森旋转算法,可⽤于除随机性要求更⾼的加密算法外的⼤多数⼯程应⽤。
简单理解,random库的作⽤就是⽣成随机数。主要使⽤函数如下:
1. random.random()
  random.random()⽅法返回⼀个随机数,其在[0.0,1.0)的范围之内的随机⼩数。
2. random.uniform(a,b)
  random.uniform()是在指定范围内⽣成随机⼩数,其有两个参数,⼀个是范围上限,⼀个是范围下限,范围为[a,b]。
3. random.randint(a,b)
  random.randint()是随机⽣成指定范围内的整数,其有两个参数,⼀个是范围上限,⼀个是范围下限制,范围为[a,b]。
4. random.randrange(start,stop[,step])
  random.randrange()是在指定范围内,按指定基数递增的集合中获得⼀个随机数,有三个参数,前两个参数代表范围上限和下限,第三个参数是递增增量,默认为1。
5. random.choice(sep)
  random.choice()是从序列中获取⼀个随机元素。
6. random.shuffle(sep)
  random.shuffle()函数是将⼀个列表中的元素打乱,随机排序。
7. random.sample(pop,k)
  random.sample()函数是从指定序列中随机获取指定长度的⽚段,原有序列不会改变,有两个参数,第⼀个参数代表指定序列,第⼆个参数是需获取的⽚段长度。
8. andbits(k)
  getrandbits()函数⽣成⼀个k⽐特长度的随机整数
8. randm.seed(a=None)
  seed()函数主要作⽤为初始化随机数种⼦,默认值为当前系统时间
程序开发:
参照需求分析,开发步骤如下
1.创建⼀个指定范围内的整数,以1-100为例
⾸先⽣成随机数需要调⽤random函数,为⽅便通过关键词as改为r。
其次我们需要⽣成的数字为整数,且有着明确的范围,所有应当使⽤random.randint(a,b)来⽣成对应整数。
最后输出检测是否成功⽣成。
代码设计如下
import random as r
a = r.randint(1,100)
print(a)
注意:有的同学习惯将第⼆⾏、第三⾏写到⼀起,即:print(r.random(1,100))
这样写是没有任何问题的,但是由于后期判断玩家回答是否正确需要⽤到这⼀数字,所以还是创建⼀个变量来保存⽐较好。
2.接收玩家输⼊的数字,并且计较⼤⼩
⾸先创建⼀个变量来接收玩家输⼊的数字,刚刚使⽤的a来存储计算机所⽣成的随机数,所以这⾥⽤b来代表玩家输⼊的数字。
之后使⽤ if 判断语句来将玩家输⼊数字b与计算机⽣成数据a来作⽐较。
当b>a时输出太⼤了;当b<a时输出太⼩了;当 b=a时输出猜中了。
代码如下:
import random as r
a = r.randint(1,100)
# ⽅便调试程序、调试结束当将本句注释掉
print(a)
b=int(input("输⼊数字"))
if b>a:
print("太⼤了")
elif b<a:
print("太⼩了")
else:
print("恭喜答对")
注意:由于b是通过input()函数接收到的数据,所以b默认的数据类型为string,所以会报错string类型的b不能与int类型的a做⽐较⼤⼩操作。情况如下
解决⽅法:
1.通过int(),改变b的数据类型,如上⽂所写b=int(input("输⼊数字"))
2.通过eval(),⾃动识别接收数据类型
3.创建循环,重复第⼆部分,直到玩家答对数字
两种循环,for循环和 while循环哪⼀个更好⼀点呢?
for循环的特点为先判断条件,再执⾏语句。
while循环的特点为先执⾏语句,再循环。
猜数字游戏⾃然是先执⾏语句再判断的好所以本处使⽤while循环
跳出循环的条件为玩家回答正确,跳出的⽅式也多种多样
第⼀种:判断条件为False
我们可以创建变量 flag,while条件为flag为真
此时只需要在玩家回答正确之后,更改falg值为假即可。
import random as r
a = r.randint(1,100)
# ⽅便调试程序、调试结束当将本句注释掉
print(a)
flag = 1
while flag == 1:
b=int(input("输⼊数字"))
if b>a:
print("太⼤了")
elif b<a:
print("太⼩了")
else:
python生成1到100之间随机数print("恭喜答对")
flag = 0
第⼆种:break跳出
关键字break 功能为跳出本循环体,所以这时候可以设定while循环条件恒为真
import random as r
a = r.randint(1,100)
# ⽅便调试程序、调试结束当将本句注释掉
print(a)
while True:
b=int(input("输⼊数字"))
if b>a:
print("太⼤了")
elif b<a:
print("太⼩了")
else:
print("恭喜答对")
break
4.添加分数、游戏输出
分数的统计⽅法⼗分简单,只需要统计循环体的循环次数即可。
设定⼀个变量来统计循环次数,变量初量为“0”,在每次循环前变量+1即可。
当然个⼈喜好也可以赋初值为100,每次循环-1,最后统计输出数值即可。
所以最终代码如下:
import random as r
a = r.randint(1,100)
# ⽅便调试程序、调试结束当将本句注释掉
#print(a)
score = 0
while True:
b=int(input("输⼊数字"))
score+=1
if b>a:
print("太⼤了")
elif b<a:
print("太⼩了")
else:
print("恭喜答对")
break
print("score=%d"%score)
程序优化:
1.⼿动输⼊上下限制
上述程序中,以1-100为例,⽽我们平常所使⽤中,可以⾃主设定上下限。
所以第⼀步将原来的限制更改为⾃主输⼊。
上述设定a为计算机⽣成数,b为玩家输⼊数字,理所当然c、d承担起上下限制的重任
⾸先需要来接收玩家输⼊的数据,由于⽣成的随机数a需要上下限制的参数,所以接收应当在⽣成随机数前⾯。
之后将random传⼊参数改为变量名c、d
如下代码所⽰
import random as r
c = int(input("请输⼊最⼩数"))
d = int(input("请输⼊最⼤数"))
a = r.randint(c,d)
# ⽅便调试程序、调试结束当将本句注释掉
#print(a)
score = 0
while True:
b=int(input("输⼊数字"))
score+=1
if b>a:
print("太⼤了")
elif b<a:
print("太⼩了")
else:
print("恭喜答对")
break
print("score=%d"%score)
2.显⽰数字范围
每⼀次都只回应请”输⼊数字”,如果可以将之前的数据更新迭代,也就是输出范围想来要⽐原计划好⼀些。如果这样做,最先修改的便是输⼊b时候的语句,需要将上下限制加⼊。
之后上下限制的数据也要对应发⽣改变,以1-100为范围,随机数为60为例:
玩家输⼊50,计算机给出回应太⼩了,之后请求输⼊的是51-100的数据。
也就是说最初玩家输⼊c(1)~d(100)  当玩家输⼊新数据b(50)之后,cd将要根据b的情况来更新
当太⼩了时候,c=b+1
当太⼤了时候,d=b-1
代码以及结果如下:
import random as r
c = int(input("请输⼊最⼩数"))
d = int(input("请输⼊最⼤数"))
a = r.randint(c,d)
# ⽅便调试程序、调试结束当将本句注释掉
print(a)
score = 0
while True:
b=int(input("输⼊%d到%d数字:"%(c,d)))
score+=1
if b>a:
print("太⼤了")
d=b-1
elif b<a:
print("太⼩了")
c=b+1
else:
print("恭喜答对")
break
print("score=%d"%score)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。