
1.2 龙的世界

1.2 龙的世界
在本节的内容中,详细介绍实现一个“龙的世界”游戏的方法。在介绍具体的实现过程之前,首先详细讲解实现本游戏需要的语法技术,并介绍这些技术的使用方法。
1.2.1 使用while循环语句
在Python程序中,while循环语句用于循环执行某段程序,以重复处理相同任务。在Python语言中,虽然绝大多数的循环结构都是用for循环语句来完成的,但是while循环语句也可以完成for循环语句的功能,只不过不如for循环语句简单明了。
在Python程序中,while循环语句主要用于构建比较特别的循环。while循环语句最大的特点是循环次数不确定,当不知道语句块或者语句需要重复多少次时,使用while循环语句是最好的选择。当while的条件表达式为真时,while循环语句会重复执行一条语句或者语句块。使用while循环语句的基本格式如下所示。

在上述格式中,当condition为真时会循环执行后面的执行语句并循环,一直到条件为假时才退出循环。如果第一次条件表达式为假,那么会忽略while循环。如果条件表达式一直为真,会一直执行while循环。也就是说,会一直循环执行while循环中的执行语句部分,直到当条件不能被满足为假时才退出循环,并执行循环体后面的语句。例如下面演示代码的功能是使用while循环输出整数0到5。

执行后会输出:

1.2.2 使用函数
在Python程序中,在使用函数之前必须先定义(声明)函数,然后才能调用它。在使用函数时,只要按照函数定义的形式向函数传递必需的参数,就可以调用函数完成相应的功能或者获得函数返回的处理结果。
在Python程序中,使用关键字def定义函数,定义函数的语法格式如下所示。

在上述格式中,参数列表和返回值不是必需的,在return后面可以没有返回值,甚至也可以没有return。如果在return后面没有返回值,并且没有return语句,这样的函数都会返回None值。有些函数可能既不需要传递参数,也没有返回值。
注意:当函数没有参数时,也必须在函数名后加上小括号,在小括号后也必须有冒号“:”。
在Python程序中,完整的函数是由函数名、参数以及函数实现语句(函数体)组成的。在函数声明中,要使用缩进表示语句属于函数体。如果函数有返回值,那么需要在函数中使用return语句返回计算结果。
根据前面的学习,可以总结出定义Python函数的语法规则,具体说明如下所示。
● 函数代码块以关键词def开头,后接函数标识符名称和小括号()。
● 任何传入的参数和自变量必须放在小括号中,小括号中可以用于定义参数。
● 函数的第一行语句可以选择性地使用文档字符串——用于存放函数说明。
● 函数内容以冒号起始,并且缩进。
● return [表达式]结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回None。
例如在下面的演示代码中,使用函数输出“人生苦短,Python是岸!”。

在上述代码中,定义了一个基本的函数hello(),函数hello()的功能是输出文本“人生苦短,Python是岸!”。执行后会输出:

1.2.3 实现“龙的世界”
在下面的实例中实现了一个“龙的世界”游戏,在“龙的世界”中,龙在洞穴中装满了宝藏。有些龙很友善,愿意与你分享宝藏。而另外一些龙则很凶残,会吃掉闯入它们洞穴的任何人。玩家站在两个洞前,一个山洞住着友善的龙,另一个山洞住着饥饿的龙。玩家必须从这两个山洞之间选择一个。

实例文件dragon.py的具体实现代码如下所示。

在上述代码中,函数chooseCave()用于询问玩家想要进入哪一个洞,是1号洞还是2号洞。在具体实现时,使用一条while循环语句来请玩家选择一个洞,while循环语句标志着一个while循环的开始。for循环会循环一定的次数,而while循环只要某一个条件为True就会一直重复。函数chooseCave()需要确定玩家输入的是1还是2,而不是任何其他的内容。这里会有一个循环来持续询问玩家,直到他们输入了两个有效答案中的一个为止,这就是所谓的输入验证(input validation)。执行后会输出:
