从零开始学Python游戏编程13-整数3
在《从零开始学Python游戏编程11-整数1》、《从零开始学Python游戏编程12-整数2》中提到了定义整数以及输入整数的方法,接下来使用以上方法实现猜数字的游戏。
1 猜数字游戏的实现
游戏运行后,显示要求玩家猜数字的信息,当玩家输入数字后,游戏将玩家输入的数字与真正的“魔术数字”进行比较,如果两个数不相同,则显示错误信息后继续由玩家输入数字,直到猜对为止,此时会显示猜对的信息。代码如图1所示。
相关链接1 魔法数字,常在软件编程中可以看到,具体是指,该数字在程序源代码中,但是不知道该数字的含义和作用,即可读性很差。
图1 猜数字游戏代码
其中,第8行代码定义了“魔术数字”magicNumber的值是3,是一个整数类型;第9行代码使用while True语句,可以让玩家循环输入数字;第10-15行代码是while语句的代码段,第10行代码提示玩家输入猜的数字,并将其保存在number中;因为此时number是字符串类型,第11行代码通过int()将字符串类型转换为整数类型,并保存在变量playerNumber中;第12行代码通过if语句将玩家猜的数字playerNumber与魔术数字magicNumber进行比较;如果两个数相等,则表示玩家猜对了魔术数字,第13行代码显示玩家获胜的信息;第14行代码通过break跳出第9行中的while语句,游戏结束;如果两个数不相等,则说明玩家猜错了,第15行代码显示玩家猜错的信息,程序重新回到第9行代码重复以上过程。代码运行效果如图2所示。
图2 代码运行效果
2 猜数字游戏存在的问题
从图2可以看出,当玩家输入的是数字时,游戏运行正常,但是当玩家输入的不是数字,而是一段字符串时,游戏就会报错,如图3所示。
图3 游戏报错
从图3中可以看出,游戏运行后,提示玩家输入魔术数字,此时玩家输入的不是数字,而是英文字母“three”时,如图3①所示,按下回车后程序报错,报错的原因是第11行代码使用int()函数时,无法将玩家输入的“three”转化为整型,如图3②所示;错误类型是“ValueError”,如图3③所示。
3 猜数字游戏的改进
在“2 猜数字游戏存在的问题”中提到的问题,叫做“异常”,可以通过Python的异常处理语句来解决这个问题。
3.1 异常处理语句的用法
可以使用try…except语句来处理异常,该语句的用法如下所示。
try:
产生异常的语句
except异常类型:
处理异常的语句
其中,try语句的代码段中包括产生异常的语句,例如图1中第11行代码就是产生异常的语句;except语句后面跟的异常类型指的是诸如图3③中的“ValueError”的这种类型;except语句的代码段是处理异常的语句,当产生异常的语句产生的异常与except后面跟的异常类型匹配时,就会执行该except的代码段。
3.2 处理ValueError异常
在图1所示的代码中添加异常处理,代码如图4所示。
图4 添加了异常处理的代码
其中,第11-15行为添加了异常处理的代码,当玩家输入的不是数字而是字符串时,第12行中int()函数会发生ValueError异常,此时执行第14-15行代码,提示玩家输入正确格式的数字,并通过continue回到第10行代码。以上程序运行效果如图5所示。
图5 代码运行效果