廖雪峰Python教程知识点归纳(5):循环

本文若要转载请注明出处:https://www.cnblogs.com/cynthius-phi/p/15216982.html

本文整理自:https://www.liaoxuefeng.com/wiki/1016959663602400/1017100774566304

 

循环的意义

 

循环的意义在于,让计算机重复地执行有规律的任务。如计算1+2+...+100。

 

第一种循环:for循环

 

Python的for循环(for loop)用于将一个可迭代对象(iterable)中的元素按一定的顺序迭代出来。格式:

 

for <item> in <iterable>:
    [...]

 

其中<item>用来表示每一轮循环被迭代出来的元素,<iterable>表示要被迭代的可迭代对象。

 

注意<iterable>后面有一个“:”,这一点与C系列语言不同。

注意循环体(即“...”)内容需要缩进(indent(ation))。与C系列语言不同,Python的缩进是有语义上的意义的,表示一个特定的代码块。

 

举例:

 

>>> names = ['Adam', 'Bob', 'Tracy']
>>> for name in names:
...     print(name)
...
Adam
Bob
Tracy

 

range()

 

* 这一小节中,有部分内容是我个人补充的。

 

Python的range()函数可以很方便地生成一个有序的整数序列。比如:

 

>>> list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

 

range()虽然返回一个有序序列,但它的类型并非list或tuple,而是range。要转化为list或tuple,需要(像上面这样)强制转换。

 

range()的语法有下面几种:

 

range(<stop>)
range(<start>, <stop>)
range(<start>, <stop>, <step>)

 

其中 <start> 表示开始值,<stop> 表示终止值,<step>表示相邻两个整数间的差值。range()生成的序列即为区间 [<start>, <stop>) 所包含的整数,即从<start>开始、于<stop>终止,但不包含<stop>。

如果只有1个参数,则该参数表示 <stop>,且<start> = 0,<step> = 1;

如果只有2个参数,则两个参数分别表示 <start> 和 <stop>,而 <step> = 1。

 

因为 range() 返回的是可迭代对象,所以可以直接充当for循环中in后面的成分。range() 也常常被用在for循环中,因为经常有迭代一系列整数的需求,而要实现这一点,用 range() 是最简单的。比如:

 

(打印区间 [0, 10) 内的所有整数)

>>> for i in range(10):
...     print(i)
...
0
1
2
3
4
5
6
7
8
9

 

(计算 1+2+...+100)

>>> s = 0
>>> for i in range(101):
...     s += i
...
>>> s
5050

 

就像C系列语言一样,Python允许把 var var op val 简写为 var opval,其中 op 为 +、-、*、/、//、%。如 i = i + 1 可以写作 i += 1,n = n * 2 可以写作 n *= 2。

 

补充:enumerate()

 

* 这一小节完全是我个人补充的。

 

Python的for循环用来迭代一个序列中的元素。假定我们要对一个list使用循环,但有时,我们除了要该list的元素,还要每个元素对应的索引,怎么办?

 

诚然,我们可以这么做:

 

i = 0
for i in range(len(L)):
    print(i, L[i])

 

或这么做:

 

i = 0
for item in L:
    print(i, item)
    i += 1

 

对于C系列语言的程序员来说,这样的写法可能很正常;但对于“有强迫症的”Python程序员来说,这样就太复杂了,接受不了。

 

那怎么做呢?Python提供了一个函数,叫 enumerate(),可以将一个序号(从0开始)与一个序列中的每个元素进行一个“配对”,结果是一个有序序列。对于list和tuple,编号顺序即为元素原先的排列顺序。enumerate()也是可迭代对象,其每个元素的类型为tuple,每个tuple均含有2个元素,具体即为 (序号, 原先的元素)。在for关键字后面,按顺序使用两个循环变量,即可分别接住每个元素的序号和其自身:

 

>>> L = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
>>> for i, ch in enumerate(L):
...     print(i, ch)
...
0 a
1 b
2 c
3 d
4 e
5 f
6 g
7 h
8 i
9 j

 

while循环

 

Python的另一种循环则是while循环,其格式如下:

 

while <cond>:
    [...]

 

其中<cond>为循环条件,[...]为循环体(即具体的要重复执行的代码)。

 

还是注意,<cond>后面有一个“:”,这一点与C系列语言不同。

还是注意,循环体的代码要缩进。

 

while循环的逻辑:只要<cond>为True(或转化为bool后为True)就将循环(体)一直执行下去,直到<cond>变为False才退出循环。

 

Python没有do while循环,但可以自己模拟一个出来。

循环的非常规控制:break和continue

 

在循环中,break可以提前退出循环,continue可以直接跳过当前的这轮循环并开始新一轮的循环。

 

break和continue一般情况下都要配合if使用(想想为什么)。此外,break和continue应当避免滥用,尽量通过编写好的循环条件以及好的变量更新方式来替代break和continue的使用

 

Misc

 

死循环指(逻辑上)永远不会停止(执行完毕)的循环。在Python程序中,若陷入死循环,可以通过按Ctrl+C来强制结束程序。

posted @ 2021-09-02 00:08  靖许Philostratus  阅读(294)  评论(0)    收藏  举报