第4章 判断与循环
判断和循环是我们控制程序运行的常用手段。在大多数编程语言中,判断通常用if语句
,循环通常用while或for语句
。在Python中,通过if语句
来判断一系列条件的状态,并据此决定采取什么行动。而循环语句
则是计算机自动完成重复工作的常见方式之一。在本章中,你将学习到if、while、for语句
的简单使用和一些相关代码的示例。
4.2 循环语句
在实际的业务场景中,我们经常需要批量处理业务数据。在Python语言中,我们通常将批量的数据存储在列表中。然后通过for或while语句
来循环处理列表中的所有数据。比如:对图书馆中某一个书架上的所有图书贴上相同的分类标签,方便学生根据分类检索图书。我们可以定义一个变量bookList
来存储这个书架上的所有图书,然后通过for循环来给每一本书贴上相同的分类标签。下面是简单的示例代码:
In [1]: bookList = ["thinking in Java", "rpa in python", "mathematies for Computer", "robotFrameWork in Python"]
In [2]: tag = "IT_TECH_BOOK"
In [3]: for book in bookList:
...: print(tag + ": " + book)
...:
IT_TECH_BOOK: thinking in Java
IT_TECH_BOOK: rpa in python
IT_TECH_BOOK: mathematies for Computer
IT_TECH_BOOK: robotFrameWork in Python
说明:In [1]: 语句中,定义了一个变量
bookList
来存储这个书架上的图书列表。此处的tag
变量是我们自定义的标签名称。
In [2]: 语句用for语句
来循环处理变量bookList
,其中in
关键字即逐一从bookList
取出每一个图书并存储到变量book
中。然后执行缩进的print()
方法,打印出每本图书(即book
变量)贴上相同的分类标签后的信息。如此循环,直到打印完bookList
列表中的所有图书,程序结束。
需要注意的是:
for和while语句
都是以英文冒号(:)结尾的。循环的好处就是可以对列表中的每一个元素都执行指定的操作,而无论循环中有多少个元素。比如:列表中有10万本图书或100万本图书,都没有关系,计算机都会按照我们编写的程序,循环执行,而且通常都会很快完成。
4.2.1 for语句
for循环中,对于用于存储列表中每个只的临时变量,可以自定义任何名称。但是通常选择可以描述列表中单个元素的有意义的英文名称。比如上面示例中的变量book
就是对列表bookList
中单个元素图书的描述。当然你也可以将图书定义为x或其他英文字母,程序运行的结果将没有任何变化,但是代码的可阅读性将会降低。在实际的开发工作中,通常都是一个团队一起开发的,当同事需要阅读你的代码时,代码的可读性就会显得非常重要了。
- for语句中执行更多操作,如下代码示例:
In [1]: bookList = ["thinking in Java", "rpa in python", "mathematies for Computer", "robotFrameWork in Python"]
In [2]: tag = "IT_TECH_BOOK"
In [3]: for book in bookList:
...: print(tag + ": " + book)
...: print("我想要这本书: " + book)
...: print("他也想要这本书: " + book)
...:
IT_TECH_BOOK: thinking in Java
我想要这本书: thinking in Java
他也想要这本书: thinking in Java
IT_TECH_BOOK: rpa in python
我想要这本书: rpa in python
他也想要这本书: rpa in python
IT_TECH_BOOK: mathematies for Computer
我想要这本书: mathematies for Computer
他也想要这本书: mathematies for Computer
IT_TECH_BOOK: robotFrameWork in Python
我想要这本书: robotFrameWork in Python
他也想要这本书: robotFrameWork in Python
说明:for语句中,可以包含任意多行的代码。在
for book in bookList:
行之后的每个缩进的代码行都是循环的一部分。所以列表中的每个元素,都将被这些代码执行一次。比如:上面3个print语句都缩进了,那么每一本图书,都将分别被不同的print语句打印输出3次。
需要注意的是:在Python语言中,缩进很重要,缩进让代码显得更整洁,结构更清晰,也更容易阅读。不正确的缩进可能导致程序被错误的执行。比如下面的示例:
In [1]: bookList = ["thinking in Java", "rpa in python", "mathematies for Computer", "robotFrameWork in Python"]
In [2]: tag = "IT_TECH_BOOK"
In [3]: for book in bookList:
...: print(tag + ": " + book)
...: print("我想要这本书: " + book)
...: print("他也想要这本书: " + book)
...:
IT_TECH_BOOK: thinking in Java
我想要这本书: thinking in Java
IT_TECH_BOOK: rpa in python
我想要这本书: rpa in python
IT_TECH_BOOK: mathematies for Computer
我想要这本书: mathematies for Computer
IT_TECH_BOOK: robotFrameWork in Python
我想要这本书: robotFrameWork in Python
他也想要这本书: robotFrameWork in Python
说明:可以看到上面3个print语句中只有前2个都缩进了,那么每一本图书,都将分别被不同的print语句打印输出2次。for循环结束后,最后1个print语句才会被执行,且只会被执行1次即
他也想要这本书: robotFrameWork in Python
只打印了1次。虽然程序本身是合法的,但是打印结果并不符合我们的预期。因为第3个print语句本该缩进的。
4.2.2 while语句
上面本节开始的示例,我们也可以用while语句来循环处理,也是一样的效果。代码示例如下:
In [1]: bookList = ["thinking in Java", "rpa in python", "mathematies for Computer", "robotFrameWork in Python"]
In [2]: tag = "IT_TECH_BOOK"
In [4]: num = 0
In [5]: while (num < len(bookList)) :
...: print(tag + ": " + bookList[num])
...: num += 1
...:
IT_TECH_BOOK: thinking in Java
IT_TECH_BOOK: rpa in python
IT_TECH_BOOK: mathematies for Computer
IT_TECH_BOOK: robotFrameWork in Python
说明:for语句主要是遍历列表中的所有元素,直到最后一个元素为止。而while语句则是在指定条件满足的情况才会执行,直到条件不满足时为止。比如上面的示例:我们首先定义一个变量num(初始化为0),然后指定条件
num < len(bookList)
即当num 小于 列表的总个数时,将执行while后面所有缩进的语句即print语句和num += 1
语句。其中bookList[num]
即取列表中当前索引即num对应的值。比如:当num=0时,bookList[0]
即取列表中第一个元素即第一本图书thinking in Java
。num += 1
语句主要是为了让索引每次循环之后+1,这样就能达到遍历列表索引的目的,进而达到取出列表中所有元素的目的。而条件num < len(bookList)
则明确的告诉了程序,当遍历完列表中的所有元素后,就可以停止程序了。此处为什么是小于num < len(bookList)
,而不是小于等于num <= len(bookList)
呢?这个问题留给读者自己去写代码验证,看看会发生什么。
4.2.3 range()函数
range()函数是Python语言中自带的函数,它可以帮你很快的生成一系列数字。
- range()函数的简单示例,比如:
In [17]: for i in range(10):
...: print(i)
...:
0
1
2
3
4
5
6
7
8
9
说明:可以看到,打印是从0开始的10个数,但是不包括10。这个一定要注意。
In [18]: for i in range(1,10):
...: print(i)
...:
1
2
3
4
5
6
7
8
9
说明:可以看到,打印是从1开始的9个数,但是不包括10。即从数学的角度来说,
range(x, y)
输出的数字都是左闭右开
的区间。比如:range(4,10)
类似于数学上的[4, 10)
。值得一提的是range(1,10)
函数第1个入参1是表示数字区间的开始(注意区间开始包括1本身),第2个入参10是表示数字区间的结束(但区间结束不包括10)。
- range()函数的其他示例,比如:使用 range()函数 还可以指定步长(默认步长是1)。
In [19]: for i in range(1,10,2):
...: print(i)
...:
1
3
5
7
9
说明:可以看到,打印是从1开始打印,步长是2即每次增加2的5个数。值得一提的是
range(1,10,2)
函数第1个入参1是表示数字区间的开始(注意区间开始包括1本身),第2个入参10是表示数字区间的结束(但区间结束不包括10),第3个入参2是表示步长。步长即类似于数学上等差数列
的等差
。
range()函数的用法,读者朋友如果感兴趣的话,也可以自行查看Python官网range()函数的详细介绍。
4.2.4 Break
不管是for循环语句还是while循环语句,如果我们想在某一个元素或条件出现时,及时退出循环该怎么操作呢?在Python语言中,我们可以使用break语句来退出整个for或while循环语句。break语句可以控制程序执行流程,使用它可以决定哪些语句被执行,哪些语句不被执行,从而达到让程序按我们的要求执行的目的。来看一个简单的例子:
In [20]: for i in range(10) :
...: if i >= 5 :
...: break
...: print(i)
...:
0
1
2
3
4
用while语句实现上面for循环相同的场景。代码如下:
In [21]: i = 0
In [22]: while i < 10 :
...: if i >= 5 :
...: break
...: print(i)
...: i += 1
...:
0
1
2
3
4
说明:上面的代码增加if语句的判断条件,当if条件满足时,将执行break语句即退出for或while循环语句。即当i=5时,for或while循环将被终止。这也是为什么只打印了
01234
的原因。因为当i=5,那么if 5>=5成立,那么执行break退出整个for或while循环,下面的print(5)将不会再被执行了。
4.2.5 Continue
在实际的业务场景中,我们除了退出整个循环之外,还可能需要在满足指定条件时,返回到循环开头并根据相关条件决定是否继续执行循环操作。在Python语言中,我们可以使用continue语句来控制。当满足某个条件时,使用continue语句,会返回到循环开头,而不是像break语句那样退出整个循环。举一个简单的示例:
In [23]: for i in range(10) :
...: if (i >= 6 and i < 8) :
...: continue
...: print(i)
...:
0
1
2
3
4
5
8
9
用while语句实现上面for循环相同的场景。代码如下:
In [24]: i = 0
In [25]: while i < 10 :
...: i += 1
...: if (i >= 6 and i < 8) :
...: continue
...: print(i)
...:
1
2
3
4
5
8
9
10
说明:可以看到,当if条件满足时,会忽略余下的代码即print语句而返回到循环开头执行下一次的循环。这也是为什么6、7没有打印的原因。