再次说明:
下面是Python官方免费文档的中文翻译,为了促进练习,方便学习,我着重在意译上下功夫。如果需要英文材料,请移步到QQ群(Mark学编程)下载,或与我联系发送。
控制流
在程序里迄今我们看到的,总是一系列的语句以精确的从顶到底的顺序忠诚的执行。如果我们要变化这个顺序流,怎么办?例如,你需要程序做些决策根据不同的情景做些不同的东西,比如根据当天时间的不同而打印‘早上好’或者‘晚上好’?
你可能猜到了,这样可以用控制流来达成。Python有三种控制流语句,if, for 和 while。
If 语句
If 语句用于检查条件:如果条件为真,我们允许一块语句(叫做if语句块),否则,我们处理另外一块语句块(叫做else语句块)。else 语句是可选的。
举例:
number = 23
guess = int(input('Enter an integer : '))
if guess == number:
新语句块从这里开始,注意是有空格的;
print (‘Congratulations, you guessed it.’) print(’(but you do not win any prizes!)’) # 这块语句在这里结束
elif guess < number:
另外一个语句块
print(‘No, it is a little higher than that’) # 在语句块中,你可以做任何你想做的
else:
print(‘No, it is a little lower than that’) # 你应该猜得到, 当guessed > number时到了这里。
print(‘Done’)
最后这句语句总是执行,(注意其没有缩进)
在整个if语句执行后。
(补充说明: 在Word排版,缩进不容易对齐,请自行在编辑器练习,特别注意缩进,另外输出不展示了,自行运行或者到英文版对照)
代码运行原理
在程序里,我们接收用户输入的猜测,并且检查其是否与我们的数字相同。我们用变量“number”存储我们设置的数字,比如23,然后我们使用input()函数接收用户的猜测数字。函数就是能够重复利用的程序,我们会在下一章节学习它。
我们提供了一个字符串给予内置函数input,他会有闪烁光标等待用户输入。一旦我们输入些什么,按下enter键,input()函数以字符串类型返回我们输入的。然后在上面代码里,我们用int把字符串类型变成整型。然后存储在guess中(严格的说是绑定变量名guess—译者注),实际上,int 是个类,但现在你只需要知道,你可以使用它,将字符串转换成整型(假设字符串在文本中包含一个整型)
下一步,我们比较用户的猜测数字和我们已经有的数字,如果相同,我们打印成功信息。请注意,我们使用缩进水平来告诉Python哪些语句属于那一块代码。这就是为什么在Python里缩进这么重要。我希望你能坚持“一致的缩进”,能吗?
请注意,if语句在尾部带有一个冒号—用于向Python指出,一块语句跟着后面。
然后,查看这个猜测是不是小于我们的数字,如果是,通知用户应该猜一个大一点的数字。我们这里还使用了elif语句,它实际上是将两个if else-if else结合了。这使得程序很简易并且降低了缩进的数量。
elif 和else 语句一定也要有尾部的冒号,在其相应的语句块(当然要有恰当的缩进)。
你可以在if语句中有另外一个if语句块,这叫做嵌套if语句。
记住,elif 和 else 部分是可选的。一个迷你的有效的if语句如下:
if True:
print (‘Yes. It is true’)
python执行完毕完整的有关联的elif 和else的if语句后,它继续向下一个语句移动。在这个例子中,print(‘Done’)语句就是下一个语句。然后Python到了程序尽头结束了。
即使这是个简单程序,我已经指出了很多你需要注意的东西。所有这些都非常直接(对于有C/C++背景的人来说有点吃惊的简单)。你需要从开始就逐渐意识到这点,经过一些练习后,你就会从容接受,并且感到很“自然”了。
while语句
只要条件为真,while语句就允许你重复执行一块代码。while语句就是叫做循环语句的一个例子。while语句有一个可选的else语句。
举例见下图:
好像图片上传不成功。(请到微信公众号(Mark学编程)或者CSDN博客(Mark学编程)查看图片吧)
代码运行原理:
在这个程序里,我们仍然做猜测游戏,但这个while与if那个显著的不同在于,while的优势在于允许用户不停的猜测直到成功猜到。所以,不像if那个语句,要为每一个猜测不停的重复运行程序。
我们将input和if语句放到了while循环里面,在循环前,将变量running设置为True。进入while,首先检查running是否为True,如果是,进入循环内(while块),当这个块执行后,又开始检查条件,这个例子里就是检查running变量。如果是真,又开始进入while块执行。直到running为False,结束while块,向下进入else块,然后进入最后一句语句。
直到注意的是,如果你使用break,等执行break后,while循环可选的那个else就逃过不执行了,这个要注意。
True 和 False被称为Boolean 类型,你可以将它们分别看做和值1 和 0 相同的东西。
for 循环
for…in 语句是另一种循环语句,它遍历一个序列中的对象,也就是序列中每一个(元素)。我们在以后章节会详细学习序列。你现在需要知道的是,序列就是一个有序的元素集合。
举例:
For i in range(1, 5):
print(i)
else:
print(‘The for loop is over’)
照旧,不展示输出,请自行测试运行。
代码运行原理
程序中,我们打印数字序列。我们使用内置函数 range 产生数字序列。我们这里提供两个数字和range 返回一个从第一个数字开始一直到第二个数字前一个结束。比如:range(1,5)得出 [1,2,3,4] 默认下, range 采用1作为一个间隔,如果我们提供第三个数字给range,就成为间隔的大小,比如 range(1, 10,2)得 [1,3,5,7,9],记住,范围扩展到第二个数字,但不包含第二个数字。
请注意,range()每次只产生一个数字,如果你想一个完整的数字列表,对range()使用list(),比如:list(range(5))得出[0, 1, 2, 3, 4]。列表在数据结构章节讲解。
for循环遍历这个range- 等同于 for i in [1,2,3,4] 就像将序列中的每一个数字(对象)赋值给i;这样,我们只是打印i的值。
请记住else是可选的。如果包含此语句,for循环结束后总是执行一次,除非遇到有break语句。
记住for…in 循环用于所有序列。我们这里是用内置函数range产生的数字列表。但是一般的讲,循环可用于任何对象类型的任何序列。我们将在今后章节详细探索。
break 语句
此语句用于打断循环语句,停止执行循环语句。即使循环语句没有变成False,或者序列中的元素没有遍历完毕。
一个重要的注意点就是当break打断循环后,任何对应的循环else语句块都不再执行。
举例:
while True:
s = input(‘Enter sth: ‘)
if s == ‘quit’:
break
print(‘Length of the string is’, len(s))
print(‘Done’)
代码运行原理:
在这个程序里,我们重复接收用户输入,打印出输入的字符长度。我们通过检查输入是否为‘quit’,提供了一个特别的条件来终止程序。使用break来打断循环并到达程序终点。
Len()是内置函数,用于返回输入字符串的长度。
记住,break语句也可以用于for循环。
continue 语句
此语句用于告诉Python跳过本循环余下的语句,进入下一次循环的遍历。
我将例子稍微变动了一下,方便研究break和continue两个语句,见图。
好像图片上传不成功。(请到微信公众号(Mark学编程)或者CSDN博客(Mark学编程)查看图片吧)
请一定测试运行
代码运行原理
在这个程序里,我们接收用户输入,然后检查是否为“quit”,如果是,跳出循环。如果不是,打印输入字符串的长度,然后检查长度是否大于5,大于5,继续下面的打印语句,小于5,打印提示太小的信息,然后跳过下面的语句,返回进入下一次循环。
请注意,continue语句同样可以用于for循环。
(以上和原文有差异,主要是方便叙述代码运行顺序。–译者)
总结
我们学习了三种控制流语句—if,while 和 for 已经他们关联的break和continue语句。这些是Python最常见的语句,所以,熟练掌握它们很关键。
下一章节,我们学习如何创建和使用函数。