简明Python3教程 8.控制流
简介
迄今为止我们见到的所有程序总是含有一连串语句并且python忠实的顺序执行它们。
那么如何改变它们的执行顺序呢?例如你希望程序根据不同情况作出不同反应,按照当前时间分别
打印出’Good Morning’或’Good Evening’?
也许你已经猜到了,这需要使用控制流程语句,python拥有3种此类语句,分别为if,for和while。
if语句
if语句用来检查一个条件,如果条件为真则执行一个语句块(被称作if块),否则执行另一个语句块(被称作else块)。
其中else分支是可选的。
范例:
#!/usr/bin/python
# Filename: if.py
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')
# 只有guess > number 才会执行到此处
print('Done')
# if语句执行完毕后,最后这条语句永远会被执行
输出:
$ python if.py
Enter an integer : 50
No, it is a little lower than that
Done
$ python if.py
Enter an integer : 22
No, it is a little higher than that
Done
$ python if.py
Enter an integer : 23
Congratulations, you guessed it.
(but you do not win any prizes!)
Done
程序流程:
本程序将用户猜测的数对比被猜的数(注: 23)。
我们可以将被猜数定为任何整数。然后利用input()函数得到用户猜测的数。
函数只是可复用的程序片段,下章我们会学到更多关于函数的知识。
我们为内建input函数提供一个字符串,函数会将它打印到屏幕,一但我们输入了什么并按下回车,
input就会将输入当作一个字符串返回,之后利用int我们将其转换为一个整数并存入变量guess中。
实际上int是一个类,现在你只需知道它能将一个字符串转换为整数(假设字符串包含一个合法的文本
形式的整数)。
接下来我们比较用户猜测的数与被猜的数,如果它们相等我们就打印一个成功信息。注意我们
使用缩进告诉python语句分别属于哪些块,这就是为什么缩进对于python非常重要。
我也希望你能做到前文提到的”缩进一致性”规则,你可以吗?
同时也要注意到if语句的结尾包含一个分号 – 它指示python分号其后将跟随一个语句块。
紧接着我们检查猜测的数是否小于被猜数,如果是,则告诉用户猜测的数大了一些。
这里我们使用的是elif分支,事实上它把两个相关的if else-if else语句组合成一个if-elif-else语句。
这样做不仅使得程序更加简洁也降低了缩进数量。
同样,elif和else语句必须在逻辑行的结尾写上冒号,其后是与之对应的语句块(当然还要有相应的缩进)
最后你也可以在if语句中插入另一个if-block块,这叫做嵌套的if语句。
上面说过elif和else是可选的。一个最简单合法的if语句如下:
if True:
print('Yes, it is true')
当python执行完if语句及其相关的elif和else分支,控制权会转移到包含此if语句的语句块的下一条语句。
本例中,这个块是主块,程序从此块开始执行,下一个条语句为print(‘Done’)。
随后python看到程序的结尾并简单的结束运行。
尽管程序非常简单,我也指出了这个简单程序中你所有应该注意的地方。
这一切十分易懂(有C/C++背景更是如此),但在最初你还是要引起注意,等到用熟以后就会感到自然,顺手了。
C/C++程序员请注意
python没有switch语句,你可以使用if…elif…else语句达到同样的目的(有时用字典代替会更加快捷)。
while语句
只要条件为真,while语句允许你不断的重复执行语句块。
while语句是所谓循环语句的一个例子,它还可以拥有一个可选的else分支。
范例:
#!/usr/bin/python
# Filename: while.py
number = 23
running = True
while running:
guess = int(input('Enter an integer : '))
if guess == number:
print('Congratulations, you guessed it.')
running = False # this causes the while loop to stop
elif guess < number:
print('No, it is a little higher than that.')
else:
print('No, it is a little lower than that.')
else:
print('The while loop is over.')
# Do anything else you want to do here
print('Done')
输出:
$ python while.py
Enter an integer : 50
No, it is a little lower than that.
Enter an integer : 22
No, it is a little higher than that.
Enter an integer : 23
Congratulations, you guessed it.
The while loop is over.
Done
工作流程:
本例中我们继续玩猜数字游戏,不过更先进的是用户可以不断的猜直到猜对为止 – 如此就不会象
上一个范例那样用户每猜一次都运行一遍程序了。这正好可以恰当的示范while语句的使用。
我们将input和if语句移进while循环内,并在循环开始前将变量running设为True。
最初我们检查变量running是否为True并进入while块执行之。while块执行完毕后继续检查条件,即running是否为真。
如果是则再次执行while块,否则可选的else块将被执行。完毕后再执行下一条语句。
只有while语句的条件为False时else才会被执行 – 就算条件第一次被检查时也是如此。
因此除非使用break跳出循环,否则while循环的else分支肯定会被执行。
True和False被称为Boolean类型,你可以分别把它们看作是值1和0。
(注:只是”看作”而已,不要认为它们完全等于0和1)
写给C/C++程序员
记住,while循环可以拥有else分支
for循环
for…in是另一种循环语句,用来遍历序列对象,也就是说遍历序列中的每个元素。
至于序列对象,你现在只要记住序列只是元素的集合就可以了。
范例:
#!/usr/bin/python
# Filename: for.py
for i in range(1, 5):
print(i)
else:
print('The for loop is over')
输出:
$ python for.py
1
2
3
4
The for loop is over
执行流程:
在这个程序中,我们打印了一个数字序列。而这个序列由内建range函数产生。
根据我们提供的两个数字,range返回一个开始于第一个数字而结束于第二个数的序列,例如
range(1, 5)产生序列[1, 2, 3, 4]。默认的range步长为1。如果我们传给它第三个数字,则相当于设置步长。
例如range(1, 5, 2)产生[1, 3]。记住range函数止步于我们提供的第2个数字,即不包含第2个数。
然后for循环对其进行迭代 – for i in range(1, 5)等价于for I in [1, 2, 3, 4]就象将序列中的每个数
字(或对象)一次一个的赋给i,而每次赋值都会执行一遍for语句块。本例中我们仅仅打印i的值。
记住,else部分同样是可选的,除非使用break语句跳出循环否则它总是在循环结束时执行一次。
还应记住,for…in可以工作于任何序列,这里我们使用的是内建函数range产生的数字列表,
但我们也可以使用任何种类的对象组成的任何种类的序列!后面的章节会有具体解释。
C/C++/Java/C#请注意
python的for循环完全不同于C/C++的for循环。
C#程序员应该已经注意到它类似于C#中的foreach循环。
而Java程序员也应该注意到了Java1.5的for(int i : IntArray)与之很相似。
如果你想实现C/C++中的for(int i = 0; i< 5; i++),python中只需编写 for i in range(0, 5)。
如你所见,python的for循环更简单,更富于表达力也更不容易出错。
break语句
break语句用于跳出循环,即停止循环语句的执行,即使循环条件还没有变为False或者序列的遍历尚未完成。
一个需要特别注意的地方是如果你使用break跳出for或while循环,那么相关的else块不会被执行。
范例
#!/usr/bin/python
# Filename: break.py
while True:
s = (input('Enter something : '))
if s == 'quit':
break
print('Length of the string is', len(s))
print('Done')
输出:
$ python break.py
Enter something : Programming is fun
Length of the string is 18
Enter something : When the work is done
Length of the string is 21
Enter something : if you wanna make your work also fun:
Length of the string is 37
Enter something : use Python!
Length of the string is 12
Enter something : quit
Done
工作流程:
这个程序不断的取得用户输入,并打印每次输入的长度。通过一个特殊条件判断用户
输入是否等于’quit’,如果是则使用break跳出循环,随后来到程序尾则程序终止。
而输入字符串的长度可以通过内建函数len得到。
记住for循环同样可以使用break语句。
Swaroop Poetic Python
我在范例中输入的是一首自赋的小诗,它的名字叫Swaroop's Poetic Python:
Programming is fun
When the work is done
if you wanna make your work also fun:
use Python!
(注: Swaroop是本文作者,不翻译了,各位用个人独有的悠悠情愫”淫”起来吧,啊。。。。啊。。。。)
continue语句
语句continue告诉python跳过当前循环语句块的剩余部分执行下次迭代。
范例:
#!/usr/bin/python
# Filename: continue.py
while True:
s = input('Enter something : ')
if s == 'quit':
break
if len(s) < 3:
print('Too small')
continue
print('Input is of sufficient length')
# Do other kinds of processing here...
输出:
$ python test.py
Enter something : a
Too small
Enter something : 12
Too small
Enter something : abc
Input is of sufficient length
Enter something : quit
工作流程:
本例接收用户输入,只有当输入至少为3个字符长时才会进行处理。
因此我们使用内建len函数取得输入长度,当小于3时利用continue语句跳过程序的余下部分。
否则程序的余下部分会被执行,在这里可以进行我们希望做的任何种类的处理。
注意,continue语句同样能够配合for循环使用。
小结
我们已经知道如何使用python中的3个控制流语句了 - if, while, for及其相关的break, continue语句。
它们是python中常用的部分,因此有必要熟练掌握。
接下来,我们会看到如何创建和使用函数
简明Python3教程 8.控制流的更多相关文章
- 简明Python3教程(A Byte of Python 3)
关键字:[A Byte of Python v1.92(for Python 3.0)] [A Byte of Python3] 简明Python教程 Python教程 简明Python3教程 简明 ...
- 简明Python3教程 6.基础
你肯定不满足于只打印"Hello World"吧? 你想要的更多 - 你希望得到一些输入,操纵它后再从中得到某些东西.我们可以使用python中的常量和变量实现这些功能. 字面常量 ...
- 简明Python3教程 18.下一步是什么
如果你有认真通读本书之前的内容并且实践其中包含的大量例程,那么你现在一定可以熟练使用python了. 同时你可能也编写了一些程序用于验证python特性并提高你的python技能.如果还没有这样做的话 ...
- 简明Python3教程 16.标准库
简介 python标准库作为python标准安装的一部分,其自身包含数量庞大的实用模块, 因此熟悉python标准库非常重要,因为很多问题都能利用python标准库快速解决. 下面我们将研究标准库中的 ...
- 简明Python3教程 9.函数
简介 函数是程序的可复用片段,允许你为语句块赋予名字之后在程序的任何地方运行它们任意次,这称做函数调用. 我们已经使用过一些内建函数,例如len和range等. 函数也许是任何有意义的软件中最重要的构 ...
- 简明Python3教程 5.第一步
介绍 我们现在来看看如何在Python中运行传统的”Hello world”程序.这会教你如何写.保存以及运行Python程序. 有两种办法来运行您的Python程序——使用交互式的解释器提示符或者源 ...
- 简明Python3教程 4.安装
如果你已经安装了Python 2.x,你不需要在安装Python 3.0前卸载Python 2.x.这两者可以共存. GNU/Linux用户和BSD用户 如果你使用类似于Ubuntu.Fedora.O ...
- 简明Python3教程 2.序言
Python也许是为数不多的既简单又强大的编程语言.这有利于新手甚至于专家,更重要的是用它编程所带来的乐趣. 这本书的目的是帮助您了解这种神奇的语言,展示如何快速而轻松地完成事情——事实上”编程问题的 ...
- 简明Python3教程 1.介绍
Python是少有的几种既强大又简单的编程语言.你将惊喜地发现通过使用Python即可轻松专注于解决问题而非和你所用的语言格式与结构. 下面是Python的官方介绍: Python is an eas ...
随机推荐
- 修改SVN中文件的可执行属性
博文来自下面路径,转载请注明原出处: http://bigwhite.blogbus.com/logs/74568031.html 修改SVN中文件的可执行属性 - [开源世界] Tag:开源世界 S ...
- VS2010制作dll
一.为什么需要dll 代码复用是提高软件开发效率的重要途径.一般而言,只要某部分代码具有通用性,就可将它构造成相对独立的功能模块并在之后的项目中重复使用.比较常见的例子是各种应用程序框架,如ATL.M ...
- Java中compareTo()方法比较字符串详解
中心:String 是字符串,它的比较用compareTo方法,它从第一位开始比较, 如果遇到不同的字符,则马上返回这两个字符的ascii值差值.返回值是int类型 1.当两个比较的字符串是英文且长度 ...
- Wampserver 2.5 多网站配置方法
写在开头:本文适用于wampserver2.5版本号,和wamp的老版本号配置有语法上的差别,笔者正是由于被老版本号的配置办法给整迷糊了所以才总结了一篇针对2.5版本号的配置方法,假设您还停留在1.x ...
- TF-IDF模型
TF-IDF模型 1. 理论基础 由于数据挖掘所有数据都要以数字形式存在,而文本是以字符串形式存在.所以进行文本挖掘时需要先对字符串进行数字化,从而能够进行计算.TF-IDF就是这样一种技术,能够将字 ...
- thinkphp mysql 坐标按距离排序
$cha1 = new Model(); $shops = $cha1->query("select *,(2 * 6378.137* ASIN(SQRT(POW(SIN(3.1415 ...
- C++开发人脸性别识别教程(5)——通过FaceRecognizer类实现性别识别
在之前的博客中已经攻克了人脸检測的问题,我们计划在这篇博客中介绍人脸识别.性别识别方面的相关实现方法. 事实上性别识别和人脸识别本质上是相似的,由于这里仅仅是一个简单的MFC开发,主要工作并不在算法研 ...
- NSArray NSMutableArray 初始化
NSArray* Array;//此时数组没有初始化,数组=nil [Array objectAtIndex:2];//不会调用其属性方法,这里不会崩溃 NSMutableArray *Mutable ...
- 控制器管理UINavigationController、UINavigationBar
控制器管理 掌握 控制器以及view的多种创建方式 UINavigationController的简单使用:添加\移除子控制器 UINavigationBar内容的设置 控制器的生命周期方法 Segu ...
- ts demuxer的加入记录
文件夹 1 初衷 2 ts demux的功能介绍 1 初衷 之前打算给dtplayer加入一些亮点功能,最初的想法是:bt下载播放 + hls支持 bt下载因为以来libtorrent库,尽管搞懂了怎 ...