文章目录
一、 for循环
-
Python中for循环可以遍历任何可迭代对象,比如列表,字典,集合,字符串等,通过for循环,可以对可迭代对象里的每一个元组执行一组语句,从原理上看,python的for循环与其他编程语言的for循环不太相似,更像是其他面向对象语言中的迭代器方法
-
下图是for循环的一般形式
- tmpVar 是临时变量
- Iterable 是可迭代对象
- 绿色区域是循环条件,当对可迭代对象的迭代遍历结束时,for循环也就结束
- block是循环体,每一次循环,程序都要进入到这个block内来执行代码
-
for循环,从形式上可以分为两种
- 使用range函数自由控制循环次数
- 遍历容器
1.1 range函数
-
range函数返回一个对象,该对象产生一个整数序列。
-
range函数有3个参数
- start 整数序列开始的位置
- stop 整数序列结束的位置
- step 步长
-
开始与结束位置所组成的区间[start, stop)是左闭右开的,start默认是0,step默认是1。下面向你展示range函数的使用方法
- range(1, 5) 产生的整数序列是1, 2, 3, 4
- range(0, 4, 2) 产生的整数序列是0,2
- range(5, 0, -1) 产生的整数序列是5, 4, 3, 2, 1
- range(3) 产生的整数序列是0,1,2
1.2 使用range函数编写for循环
- 编写for循环输出从1到10(包括10)的整数
for i in range(1, 11):
print(i)
-
range(0, 11) 产生了整数序列:1, 2, 3, 4, 5, 6, 7, 8, 9, 10 。 range函数产生了一个整数序列,从0到10,for循环的过程就是迭代遍历他们的过程。第一行代码里的i是临时变量,每一次循环,都会改变i的值,i将依次等于1,2 … 9, 10,而每一次将新的值赋值给i以后,都要进入到循环体里执行代码,在这个示例代码中,循环体里只有一行代码print(i),这样就是实现了输出从1到10的功能。
-
下图是这段代码的程序流程图
注意看绿色线串起来的部分,恰好形成了一个闭环,这就是循环。
1.3 巩固练习
-
请编写程序,输出100以内所有既是2的倍数又是3的倍数的整数。
-
这个练习题,仍然要使用迭代遍历的思维来解决这个问题,我们不去考虑任何数学上的巧妙算法,仅仅凭借计算机无与伦比的速度,对100以内的每一个整数都进行判断,判断他们是否符合条件
for i in range(101):
if i % 2 == 0 and i % 3 == 0:
print(i)
-
i 依次等于0,1, 2 … 99, 100, 每循环一次,i的值就改变一次,然后进入循环体对i的值进行条件判断,如果符合条件就使用print函数输出i的值。
-
是不是很笨拙,你原以为编程是多么高大上的技术,有着常人所不知道秘密,不成想编程竟然就是毫无技术含量的暴力求解,没错,编程就是这样的。但当你习惯这种思维,你会觉得,这是一种很笨拙但是很朴素,很简单的思维,没有任何花里胡哨,没有任何奇技淫巧,就是遍历,从头遍历到尾,每一个数,每一个可能都计算一遍然后得出结果。
-
那么这么说来,程序员的工作很简单啊!当然不是啦,为了让你更容易接受这个理念和想法,这是故意对问题进行了简化,抽象出这么一个你容易理解的描述方式,还存在更复杂的算法,但遍历是所有这些算法的基础,即便是上面这个练习题,仍然可以写出更简单的算法
for i in range(0, 101, 3):
if i % 2 == 0:
print(i)
二、循环中的continue 与 break
- continue和break只能在循环中使用,他们以各自的方式让循环更加灵活
2.1 continue
- coninue的中文翻译是继续,在循环体里,continue的作用是跳过当前循环的剩余语句,结束本次循环,继续进行下一轮循环,下面用一个简单的例子来演示continue的功能
lst = [4, 6, 1, 7, 2, 9, 3]
for item in lst:
if item == 7:
continue
print(item)
- 程序输出结果为
4
6
1
2
9
3
- 程序输出了列表里所有的数据,除了7以外,我们来看看,7为什么没有输出。循环过程中,item依次等于4, 6, 1, 7, 2, 9, 3,每进行一次循环,就按照顺序将一个新的值赋值给item,然后进入循环体里执行代码语句,当item等于7时,表达式 item == 7 成立,于是进入到if 下面的语句块中执行continue,continue的作用是跳过当前循环的剩余语句,结束本次循环,继续进行下一轮循环,当前循环剩余的语句只有一行,是print(item),continue让程序跳过这行代码,因此没有输出7,下图是程序的流程图
2.2 continue 与 if
2.2.1 两种思路比较
- 如果你足够细心,或许已经发现一个可疑之处,实现同样的功能,是不是用if也可以啊,没错,continue的作用,可以用if来代替,使用if来重写代码
lst = [4, 6, 1, 7, 2, 9, 3]
for item in lst:
if item != 7:
print(item)
-
既然如此,continue还有存在的必要么?很有必要,continue的核心作用是跳过当前循环剩余的代码,这对于我们思考问题极有帮助。循环过程中,满足某些条件时我们不希望代码继续执行,这个时候用continue就比用if要好很多,假设一个循环体里有两部分
-
代码块A执行结束后,需要进行一次条件判断以此来决定是否继续执行代码块B,当前的条件是condition, cotinue与if的思路哪个更好ÿ