
3.3 案例8:猜数游戏
3.3.1 案例描述
首先计算机随机生成一个0~100之间的正整数,玩家通过键盘输入猜测的值,一共有10次机会进行猜测,猜大猜小均给出提示。如果猜大了,给出提示“猜大了,继续努力哦!”;如果猜小了,给出提示“猜小了,继续努力哦!”;如果猜对了,给出提示“Bingo!猜对了,恭喜闯关成功”。10次机会用完后提示“你的次数用尽,Game Over!”并给出正确答案。
分析:将猜数字游戏分解如下。
第一步,计算机随机生成一个0~100的正整数。
第二步,玩家通过键盘输入猜测的值,猜大猜小均给出提示。
第三步,玩家一共有10次机会进行猜测,10次机会用完后给出提示并给出正确答案。
把问题进行分解后,发现第一步还是无从下手,那不妨跳过第一步继续往下看。要完成第二步,根据玩家输入猜测的值,判断猜测的结果是猜大了还是猜小了,这里只须用if…elif…else…多分支语句进行编程即可。第三步玩家一共有10次机会,此处可采用循环语句来控制机会的次数。接下来,要解决的关键问题就是第一步,如何让计算机生成一个0~100之间的随机数呢?要解决这个问题,就要用到本节将要学习的模块和用于生成随机数的函数。
3.3.2 相关知识
3.3.2.1 模块导入
在Python中有一个概念叫作模块(Module),模块和C语言中的头文件以及Java语言中的包很类似。模块就好比工具包,要想使用这个工具包中的工具(函数),就需要导入这个模块。例如,例2-4中求直角三角形的斜边c时使用了sqrt()函数,在Python中要调用sqrt()函数,就必须用import关键字导入math模块,下面就来学习Python中的模块。
在Python中使用import关键字来导入某个模块,语法格式如下。

使用import关键字导入模块,在调用模块中的函数时引用格式如下。

当模块名比较长时也可为模块名重新命名,语法格式如下。

使用import关键字可以将整个模块导入进来,from…import…则是导入一个指定的对象(可以是某个函数、全局变量或类)到当前的命名空间中。语法格式如下。

“from模块名import ∗”这种形式表示导入模块的全部属性。
在使用from…import…导入指定的对象后,在调用函数时,前面无须再加模块名称,直接调用即可。
注意:
1)同一个模块不论执行了多少次import导入语句,只会被导入一次。
2)import导入语句一般应放在代码的顶端。
3)在导入模块后调用函数时,要注意import…和from…import…的区别。
【例3-9】导入时间模块,输出时间戳。

也可使用from…import…形式,只导入time模块中的某一个函数,在调用该函数时,无须再加模块名称,直接调用即可。

3.3.2.2 用于生成随机数的相关函数
Python中的random模块可以提供随机函数,能够生成随机元素或者表数据,在实际编程中有着广泛的应用。下面就来介绍一下random模块中几个常用的函数。
1.random.random()
该函数用于生成[0, 1)之间的随机浮点数。
例如:

2.random.uniform(a,b)
该函数用于生成[a, b]或[a, b)(根据四舍五入的结果确定)的随机浮点数,其中a与b的位置顺序可以自由放置,无论谁在前都可以。
例如:

3.random.randint(a,b)
该函数用于生成[a, b]之间的随机整数,a必须小于b,位置要准确。
例如:

4.random.randrange(a,b,c)
该函数用于生成a~b之间步长为c的随机整数,a必须小于b,位置要准确。
例如:

运行结果为7,也就是在1、1+2、1+2+2、1+2+2+2中,即1、3、5、7中随机输出一个整数。
3.2.3 案例实现
基本思路:首先计算机生成一个0~100之间的随机整数,这里需要用到random模块中的randint()函数,注意在使用该函数之前需要先导入random模块。玩家有10次猜测的机会,因此需要使用for循环语句来控制剩余机会的次数,猜测一次,剩余机会的次数减少1,玩家开始猜测并进行条件判断,若猜测值大于或小于计算机产生的随机数均给出错误提示,直至次数用尽。当玩家在10次机会用尽前猜对时,使用break语句提前结束循环,提示闯关成功并显示正确答案。
代码如下。
