但是真正的利用过程中,有时候会涌现一些不符合程序预期的情形,比如设定希望输入的都是数字,但是实际情形中玩家可能什么东西都会输入,字母、符号都往里面甩,怎么办?当时如果输入一个字母、符号之类的就会崩,程序就会崩,怎么办?这就须要对程序进一步的升级和改造。

面对一些不符合预期的情形的时候,可以给出提示让程序连续实行下去,而不是报错停滞,这也便是所谓的提升程序的健壮性。
结合循环嵌套和字符串的利用,可以对数字猜数字游戏进行输入情形的判断和提示,比如老师输的字母而不是输的数字,这时候游戏该当提示请输入精确的数字。

有了这种改进思路,赶紧跟霸夫老师一起来升级一下代码
前面的代码还是一样的,import random,然后把这个随机产生一个字符串,之前这个代码是这样的,接下来就猜这个数字,如果数字如果是,这里还有个预测数字,一开始代码是这样的,预测数字即是int,输入的字符串这是之前的代码。

jsp中foreach嵌套Python编程入家世四讲04轮回嵌套 python教授教养 Ruby

这种情形下试一下刚才讲的那个情形会不会崩,猜这个数字来个s13,直接崩了,便是由于没有对输入数据做校验,也便是没有判断数据合不合法。
这里为什么会崩?大家知道是哪里出了毛病吗?是不是便是int,int对一个字符串不能转成数字的时候,假如强来转化就会报错,强扭的瓜不甜,强行的违背它的意志,对方就撕给你看。

以是说,这边要先判断一下合不合法,不合法就会受到法律的制裁。

合不合法怎么判断?判断是不是数字,是数字才进行后面的操作,如果不是就不进行后面的操作。
代码怎么写?便是输入的字符串有了,这里先不焦急转化,由于这时候一转化就会报错。

首先来判断一下字符串符不符,符合条件就连续不符合条件,这个就提示让你重新输入。
这里while循环要写该当要反过来,如果不符合就一贯循环,直到符合为止。
以是把判断条件换一下,如果不符合,else不符合,不符合什么东西?不符合。

输入的字符串是一个数字,怎么判断是不是数字?上节课学字符串的时候学过一个函数叫做isdigit,isdigit的意思便是数字,这个字符串是数字,加了not便是取反了这个数字,这个字符串就不是数字。

不是数字该当怎么办?重新输,就输入字符串,重新赋值为掌握台的输入内容,一贯在里面跟它纠缠,else便是终于符合条件了。
条件是什么?not输入的字符串是数字的情形下,对not再次取not,负负得正了便是输入的字符串是数字了。

这时候再把预测数字进行转化,把字符串转成int这时候就稳了,就不会报错了。
来试一试,看这次稳不稳。
设个数字来猜一下,绝不客气输了s13,提示输入了非字符数字,连续输,就来个2B,还是不对,有点杠,来个ss还是弗成,受不明晰,还是要按照规范的,还是要遵纪遵法。

输入这个,输这个5,这时候创造情形彷佛有点不对,它一贯说你猜的有点小,一贯猜的有点小。
这里又犯了一个缺点,就在while循环里面,又忘了去变动预测数字。

预测数字该当怎么写?刚才有履历了,履历是什么?便是不但要输入一个新的字符串,而且要对字符串进行判断,判断符不符合条件。
如果符合条件再进行下一次比对,比对预测数字跟答案数字是否同等,就把代码复制粘贴进来,就给它复制粘贴进来就完事了。

放在哪里?放在提示结果后面,大家来看一下,先理一下逻辑。
如果第一次预测的数字不匹配,就给出提示,给出提示之后要给它再一次机会输入,输入之后不能直接就放过你了,必须要再检测输入的结果是否是数字,不是数字不会让你离开这里,必须要输入的是数字才会让你进入到结果比较这里来。

这里写的这一个语句便是一个循环,表面还有个循环,这里就实现了循环嵌套,而且是while循环的嵌套。
刚才的for循环嵌套便是为了给大家先练练兵,知道循环是可以嵌套的。
这里面while循环嵌套写法实在差不多,也便是把while循环写在其余一个while循环的循环体内,就实现了while循环嵌套了,便是两次循环。

运行看一下,它设置一个数字,这时候输入s13,它不许可,输入一个5,它提示有点小,这次再次让我输入,又写个2B,这时它也进行了判断,让我再次输入精确的数字。
刚才已经猜的有点小了,就往大了猜,猜个8,大吉大利今晚吃鸡。

这时候得到了精确的结果实行了else,通过双重循环实现了每一次输入的时候对输入结果进行判断,符合条件才连续实行下一步。
经由这么两次改进,第一次改进什么大家知道吗?第一次改进便是这个游戏一贯进行下去,如果没猜对一贯进行下去。
第二次改进,如果输入的数字不符合哀求就让你一贯重新输入。

经由这两次的改进,程序的可玩性、和健壮性有了很大的提升。

但是大家看到没有,从编码的角度来看问题,从如果作为一个老司机的话,大家看了这里面这一段代码和这段代码是复制粘贴过来的,这里面有重复代码,一个代码如果要写两遍,虽然是复制粘贴,解释这里就有优化空间这些重复代码,实在可以通过定义行数来对它进行简化。

在后面的这个课程中,还会连续学习如何来优化这个游戏代码。
本日的课讲到这里便是基本上内容就讲完了。