大爽Python入门教程 3-3 循环:`for`、`while`
大爽Python入门公开课教案 点击查看教程总目录
遍历方式补充
有列表和字典如下
>>> a_list = ["language", "math", "english"]
>>> a_dict = {"a": 12, "b": 13, "c": 11}
遍历列表
for item in a_list
: 遍历的是列表里面的所有的项
直接遍历的局限性:
对于列表而言,直接遍历只得到了项的值,
并不能直接得到项的索引,如果刚好有使用索引的需要的话,
往往需要去计算其索引。
>>> i = 0
>>> for item in a_list:
... print(i, item)
... i += 1
...
0 language
1 math
2 english
比起直接计算,一般使用range
+len
方法
来遍历列表所有项的索引,然后获取对应的值。
>>> for i in range(len(a_list)):
... item = a_list[i]
... print(i, item)
...
0 language
1 math
2 english
遍历字典
for key in a_dict
: 遍历的是字典里面的所有的键。
如果需要遍历所有的键值对,
对于字典而言,获取对应的值比列表记录索引要简单,只用dict[key]
就好。
>>> for key in a_dict:
... value = a_dict[key]
... print(key, value)
...
a 12
b 13
c 11
不过实现这样的遍历,不少人更喜欢使用dict.items()
方法
(其实前者也已经很简单了)。
>>> for key, value in a_dict.items():
... print(key, value)
...
a 12
b 13
c 11
for
循环
可迭代对象iterable
不同于其他语言。
python的for
循环只能用于遍历 可迭代对象iterable
的项。
即只支持以下语法:
for item in iterable:
...
其中
iterable
是可迭代对象item
是可迭代对象中的项。...
是(要换成)循环时要执行的代码。
可迭代对象的定义和具体原理解释起来比较复杂(其实我也不是很会Orz)。
这里只需要了解基础的。
哪些是(基础的)可迭代对象。
回顾一下,我们现阶段所学习的对象,
哪些是是可迭代的。
- 序列
sequence
,包括字符串str
,元组tuple
,列表list
- 字典
dict
,迭代出的项是键key
range(n)
。
这里再进一步的介绍下range
这个函数
range
首先回顾下for i in range(n)
的效果,
i从0,1,2遍历到n-1。
示例如下
>>> for i in range(5):
... print(i)
...
0
1
2
3
4
实际上,该方法会产生一个可迭代对象。
不过可以用list
方法将其产生的可迭代对象
转换成列表。
>>> range(5)
range(0, 5)
>>> list(range(5))
[0, 1, 2, 3, 4]
有时可以使用这个办法快速生成列表。
接下来,我们详细的介绍下range
这个函数。
为了便于理解,大家可以认为range
函数有三种写法:
range(end)
: 从0,1,2迭代到n-1。range(start, end)
: 从start, start+1, start+2 迭代到n-1。
即迭代时,每次增长1range(start, end, step)
: 从start, start+step, start+2*step迭代到n-1。
即迭代时,每次增长step
。(step本身有步长的意思,或者说一步的距离)
实际上,第三种写法range(start, end, step)
是完整形态。
第二种写法是step
为1的特殊形态。(step
默认值为1)
第一种写法是start
为0、step
为1的特殊形态。(start
默认值为0)
到这里,大家应该能理解:
我们上面调用range(5)
的时候,
实际上得到range(0, 5)
的原因了。
代码示例
>>> list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(range(5, 10))
[5, 6, 7, 8, 9]
>>> list(range(0, 10, 2))
[0, 2, 4, 6, 8]
>>> list(range(0, 10, 3))
[0, 3, 6, 9]
while
循环
for
循环的特点是,直接遍历可迭代对象。
而while
循环的特点是,按条件循环。
其语法如下。
while condition:
statement
condition
,循环条件statement
: 循环体。
- 如果
condition
为True
,则执行下方缩进的代码块statement
。
否则,跳出while
循环。 - (
condition
为True
时)执行完代码块statement
之后,
回到循环开头while condition
处,重复步骤一。
使用示例
n = 5
while n > 0:
n -= 1
print(n)
其输出为
4
3
2
1
0
break
和continue
break
: 直接退出(跳出)循环continue
: 跳过本轮循环,进入下一轮循环。
break
示例
lst = [10, 5, 2, 9, 3, -1, 6, 7]
for item in lst:
if item < 0:
break
print(item)
其输出为
10
5
2
9
3
解释:
遍历列表中的每一项item
当item
小于0时,break
中断了整个循环。
后面的项就无法被遍历。
continue
示例
lst = [10, 5, 2, 9, 3, -1, 6, 7]
for item in lst:
if item < 0:
continue
print(item)
其输出为
10
5
2
9
3
6
7
解释:
遍历列表中的每一项item
当item
小于0时,跳过本轮循环,本轮后面的代码(即print(item)
)不再执行,
进入下一轮循环, 直接遍历列表的下一个item
。
其效果为遇到小于0的item
不输出(跳过输出)。