到目前为止,前面展示的小例子适合于介绍基本概念。现在让我们看一看,如
何将所学的知识综合起来,编写一个更完整的程序。在本节中,我将展示一个简单的猜数字游戏。在运行这个程序时,输出看起来像这样:
I am thinking of a number between 1 and 20. Take a guess.
10
Your guess is too low.
Take a guess.
15
Your guess is too low.
Take a guess.
17
Your guess is too high. Take a guess.
16
Good job! You guessed my number in 4 guesses!
在文件编辑器中输入以下代码,并保存为 guessTheNumber.py:
# This is a guess the number game. import random
secretNumber = random.randint(1, 20)
print('I am thinking of a number between 1 and 20.')
# Ask the player to guess 6 times. for guessesTaken in range(1, 7):
print('Take a guess.') guess = int(input())
if guess < secretNumber: print('Your guess is too low.')
elif guess > secretNumber: print('Your guess is too high.')
else:
break # This condition is the correct guess! if guess == secretNumber:
print('Good job! You guessed my number in ' + str(guessesTaken) + ' guesses!') else:
print('Nope. The number I was thinking of was ' + str(secretNumber))
让我们逐行来看看代码,从头开始。
# This is a guess the number game. import random
secretNumber = random.randint(1, 20)
首先,代码顶部的一行注释解释了这个程序做什么。然后,程序导入了模块
random,以便能用 random.randint()函数生成一个数字,让用户来猜。返回值是一个
1 到 20 之间的随机整数,保存在变量 secretNumber 中。
print('I am thinking of a number between 1 and 20.')
# Ask the player to guess 6 times. for guessesTaken in range(1, 7):
print('Take a guess.') guess = int(input())
程序告诉玩家,它有了一个秘密数字,并且给玩家 6 次猜测机会。在 for 循环中,代码让玩家输入一次猜测,并检查该猜测。该循环最多迭代 6
次。循环中发生的第一件事情,是让玩家输入一个猜测数字。因为 input()返回一个字符串,所以它的返回值被直接传递给 int(),它将字符串转变成整数。这保存在名为 guess的变量中。
if guess < secretNumber: print('Your guess is too low.')
elif guess > secretNumber: print('Your guess is too high.')
这几行代码检查该猜测是小于还是大于那个秘密数字。不论哪种情况,都在屏幕上打印提示。
else:
break # This condition is the correct guess!
如果该猜测既不大于也不小于秘密数字,那么它就一定等于秘密数字,这时你希望程序执行跳出 for 循环。
if guess == secretNumber:
print('Good job! You guessed my number in ' + str(guessesTaken) + ' guesses!') else:
print('Nope. The number I was thinking of was ' + str(secretNumber))
在 for 循环后,前面的 if...else 语句检查玩家是否正确地猜到了该数字,并将相应的信息打印在屏幕上。不论哪种情况,程序都会打印一个包含整数值的变量
(guessesTaken 和 secretNumber)。因为必须将这些整数值连接成字符串,所以它将这些变量传递给
str()函数,该函数返回这些整数值的字符串形式。现在这些字符串可以用+操作符连接起来,最后传递给 print()函数调用。
3.9 小结
函数是将代码逻辑分组的主要方式。因为函数中的变量存在于它们自己的局部
作用域内,所以一个函数中的代码不能直接影响其他函数中变量的值。这限制了哪些代码才能改变变量的值,对于调试代码是很有帮助的。
函数是很好的工具,帮助你组织代码。你可以认为他们是黑盒。它们以参数的
形式接收输入,以返回值的形式产生输出。它们内部的代码不会影响其他函数中的变量。
在前面几章中,一个错误就可能导致程序崩溃。在本章中,你学习了 try 和 except
语句,它们在检测到错误时会运行代码。这让程序在面对常见错误时更有灵活性。
3.10 习题
1.为什么在程序中加入函数会有好处?
2.函数中的代码何时执行:在函数被定义时,还是在函数被调用时?
3.什么语句创建一个函数?
4.一个函数和一次函数调用有什么区别?
5.Python 程序中有多少全局作用域?有多少局部作用域?
6.当函数调用返回时,局部作用域中的变量发生了什么?
7.什么是返回值?返回值可以作为表达式的一部分吗?
8.如果函数没有返回语句,对它调用的返回值是什么?
9.如何强制函数中的一个变量指的是全局变量?
10.None 的数据类型是什么?
11.import areallyourpetsnamederic 语句做了什么?
12.如果在名为 spam 的模块中,有一个名为bacon()的函数,在引入 spam 后,
如何调用它?
13.如何防止程序在遇到错误时崩溃?
14.try 子句中发生了什么?except 子句中发生了什么?
3.11 实践项目
作为实践,请编写程序完成下列任务。