用Python设计猜数游戏
作者:
来源:《电脑报》2018年第42期
        猜数游戏是一个很经典的例子,要开发一个完整的猜数游戏,需要用到编程中的变量、循环、分支,获取用户输入等基本知识,还要对逻辑运算有一定的了解。本文将会带领大家实现这样一个小游戏,游戏开始后,让用户猜数字,如果数字大于或者小于目标数字将会给出提示,如果猜对了就让用户选择是否继续玩下去,如果选择继续,开始新一轮游戏,否则游戏结束;同时用户每猜对一次得5分。
        分解
        各国在中小学引入编程教育,更多的是让孩子们以计算机的方式来考虑问题,培养逻辑思维能力和编程思维,并非要把所有人都培养成程序员。编程思维是一个非常重要的概念,含义是将大的问题分解成小的问题,然后逐步解决每个小问题,最后解决整个问题。
        那么我们就把这个任务分解为以下步骤:用一个变量保存用户的积分,生成目标数,在猜数游戏中目标应该是随机的,同时保存在变量中;提示用户猜测数字,获取用户输入,并保存在变量中,判断用户输入,给出适当的反馈;如果用户猜对了,加5分,询问是否继续;如果用户选择继续,重复1-5步,否则游戏结束。下面我们按照这个思路来实现这个程序。
        积分变量
        首先我们要新建一个变量(图1),保存分数,并且初始化为0分。新建score变量,变量值设置为9。从现在开始我们就要感受到Python的简洁之美了,在Scratch我们新建积分变量并设定为0,需要好几步操作,而在Python中只需要一句命令就好了:score = 0。
        这也是高级语言的特点,Python作为高级语言,代码量可以说是Java的十分之一,C语言的百分之一。当然对于初学者来说还是比较容易理解,新建积分变量之后,我们就要生成要猜测的目标数字了。
        目标数字是个随机数,是一定范围之内的随机数,所以我们先来看Scratch和Python都
是怎么生成随机数的:Scratch随机数积木块。这次Python就需要费点脑筋了,Python有许多别人写好的完成特定功能的代码,成为代码库,生成随机数的代码库叫做random,换句话说我们要用生成随机数的功能,就需要引入random库,然后库中有函数,调用对应的函数就可以完成相应的功能。
        我们要用到的是randomint()函数,比如生成1-10的随机整数就是randomint(1, 10)。背景交代完毕,下面我们就上手来实现生成随机数:target变量(图2),然后把target的值设定为1到10之间的随机数。接下来,我们看Python是如何实现的(图3)。
        现在,积分变量也有了,也生成要猜测的数字了,接下来就要提示用户猜数字了,用户不输入数字也就没得玩了,不过似乎可以写一个猜数的机器人,用随机数来猜测,这又是另外一个程序了。
        获取用户输入
        我们还是以Scratch为例进行讲解,在Scratch获取用户输入要用到侦测代码分类中的两个代码块:得到用户的输入和获取用户输入(图4)。当然我们需要新建一个变量,并把用户的代码块放到这个变量里。
while语句怎么用在python中
        而Python中则要用到input()函数,但是有一点要注意的是,input()函数读入的数据的类型是字符串类型,需要转换成整数,而将字符串转换为整数要用到int()函数,当然一个严格程序这里还需要对输入进行验证的,这个等你熟悉了Python之后可以自行完成。
        在这里我们就要用到分支结构了,所谓分支结构简单地来说就是满足某个条件的时候做某个事情,比如你高考分数大于700分,只要你运气不是特别被差,基本就能去北大清华了;而如果天气预报说明天下雨的话,十有八九你是会选择带伞出门的,毕竟有的人喜欢淋雨。
        这里我们就要进行判断,如果用户输入的大于目标数,就提示大了,否则提示小了,这里要用到控制模块中的分支模块(图5)。
        同时还会用到数字和逻辑运算分类中的比大小(图6),这里涉及了逻辑运算和分支结构两个知识点,大家还记得吗?
        猜数程序结构
        用户第一次输入的时候,会判断用户输入的数,也就是猜的数跟目标数字孰大孰小,如
果大了就会提示“大了”,如果相等就恭喜,如果小了,就提示“你猜的数太小了”,问题是实际猜测中很难一次就猜中的,所以我们需要反复不停地猜测,如果猜错了就要重新获取用户的输入,一直到猜对(图7)。
        再往下就要用到循环了,循环猜测的过程,我们先不讲,回过头来讲Python如何实现这一步。首先Python的语法呢,比较有意思,没有万恶的大括号,但是有固定的缩写,虽然Tab党和空格党有一场世纪之战,但是作为空格的拥趸,大家跟我一样用空格就好了。Python中if语句的格式是(图8):
        注意到了吗?expr和else后面的语句是有四个空格的,同时冒号是必不可少的,expr代表的是逻辑表达式,关于逻辑表达式呢,随便一本关于编程的书都能够讲个七八页,简单地说就是大小相等的判断,这就是判断猜的数和目标数的大小(图9)。
        猜数字
        这个时候已经可以猜数了,但是只有一次机会,一次之后即便你读取了用户猜的数字,你也没有反馈的机会,这样的游戏肯定是不完整的,怎么办呢?日常生活中,我们会说把课文抄10遍,我们就知道需要重复执行抄课文10次,那么在Scratch是有循环的结构的。
        当然如果你想限制猜测的次数可以用这个,如果在规定的次数内没有猜到,就扣分,这也可以,然而这里我们想做的是让用户不停地猜测直到猜对为止。
        比如隔壁村的王二狗跟俺们村的李翠花约定,在湖边见面不见不散,那么王二狗只能一个人孤零零地在湖邊等着,直到俺们村的李翠花到了湖边,也就是说只有满足了某个条件,才会执行。在这里就是重复执行,直到猜对了或者说在没有猜对的情况下,会让玩家一直猜猜猜。
        接下来我们继续完善我们的程序,看看图10的程序,我们做了改动,用户第一次猜测之后,就会判断guess_number与target是否相等,如果不相等,就会进入里面的判断,判断结束后引导用户再猜,直到猜对为止。
        然后我们来看Python要怎么做:这里用到了while循环,只要条件成立,就一直做,图11是代码。这里就要再次询问读者,基本的功能已经完成了,后面可以完善成为完整的猜数游戏了。你会考虑如何改动呢?在实际中来试试吧。

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