在我们编程的过程中,有些代码是需要不停的重复执行的,而计算机特别擅长做这些重复的工作。
我们使用循环,循环可以不停地重复执行一段代码,一遍又一遍的执行,直到循环结束。
一、For循环
假如我们想要利用海龟绘制一个宽度为100像素的正方形。
分析:
- 海龟从原点开始,利用
turtle.forward(100)
向前绘制一段100像素的线段,然后利用turtle.left(90)
开始左转90°,至此正方形的一条边绘制完成; - 重复第一条指令;
- 重复第一条指令
- 重复第一条指令,这样海龟回到了原点,正方形的4条边绘制完成。
代码:
import turtle as t
# 第一条边
t.fd(100) # 前进100像素
t.lt(90) # 左转90°
# 第二条边
t.fd(100)
t.lt(90)
# 第三条边
t.fd(100)
t.lt(90)
# 第四条边
t.fd(100)
t.lt(90)
程序重复执行了t.fd(100)
和t.lt(90)
这两段代码,重复的代码执行了4次。
使用for循环:
import turtle as t
for x in range(4):
t.fd(100)
t.lt(90)
Python中的for
循环会遍历一个列表中的各项,这里绘制正方形,需要重复4次,所以需要创建一个包含4个数字的列表。
range(n):
range(n)创建一个包含n个数字,从0到n-1的数字列表
例如range(4)
创建的列表为[0,1,2,3]
,是一个0到3的4个数字的一个列表。
list = list(range(4))
print(list)
[0, 1, 2, 3]
range(start,stop):
range(1,10)有两个参数,1是开始的值,10是结束的值,会从开始值到结束值创建一个数字列表(迭代器),但不包括结束值10
list = list(range(1,10))
print(list)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
range(start, stop, step):
range(0,10,2)包含3个参数,第三个参数是步长,控制数字每次增加2
list = list(range(0,10,2))
print(list)
[0, 2, 4, 6, 8]
for
循环中,首先要有关键字for
,然后一个变量x
,变量x
是一个计数器/迭代器,关键字in
告诉for
循环,使用变量x
来遍历范围列表中的每一个数值,range(4)
提供一个0到4的列表[0,1,2,3],可以用来遍历,循环体语句要缩进4个空格。
注意:for循环语句最后的冒号":"不能少
range(4)
构建了一个含有4个数字的列表,变量x
就会记录循环体重复执行4次,当遍历完了列表中的所有数字后,循环就终止了。
二、while循环
如果我们不确定循环要执行多少次,如果我们想要在某个事件发生的时候,要终止循环,这时候该怎么办?
这时候我们可以使用另外一种循环——while循环。
while循环只需要一个循环条件,只有满足这个条件,程序才可以执行,不满足这个条件,程序就不执行。
while condition: # 循环条件
indented statement(s) # 循环体语句
while
循环中这个条件通常是一个判断真假的布尔表达式,或是一个真假测试(True/False
)。
while
循环中,只要条件为真,while
循环就会持续重复循环中的语句,判断真假条件往往涉及到比较值。
比较操作符:
x = 1
while x < 10:
x = x +1 # 循环体
print(x)
定义了一个变量x
,初始值为1,while
循环的条件x < 10
,只要x
的值小于10,就执行x=x+1
这个语句,循环体重复执行9。
x = 1 x < 10 满足条件 执行x=x+1语句,x+1为2,赋值给x,x=2
x = 2 x < 10 满足条件 执行x=x+1语句,x+1为3,赋值给x,x=3
x = 3 x < 10 满足条件 执行x=x+1语句,x+1为4,赋值给x,x=4
x = 4 x < 10 满足条件 执行x=x+1语句,x+1为5,赋值给x,x=5
x = 5 x < 10 满足条件 执行x=x+1语句,x+1为6,赋值给x,x=6
x = 6 x < 10 满足条件 执行x=x+1语句,x+1为7,赋值给x,x=7
x = 7 x < 10 满足条件 执行x=x+1语句,x+1为8,赋值给x,x=8
x = 8 x < 10 满足条件 执行x=x+1语句,x+1为9,赋值给x,x=9
x = 9 x < 10 满足条件 执行x=x+1语句,x+1为10,赋值给x,x=10
x = 10 x < 10 不满足条件 不在进入循环体,跳出来了,最后打印x值
三、无限循环
当条件一直为真的时候,循环程序就会一直重复的运行。
while True:
print("条件为真!")
我们把循环的条件设置为一个固定的值:True
(真),这就是一个无限循环程序,程序一直打印“条件为真!”,直到你退出程序才会终止。
逃离无限循环:
continue关键字跳出当前循环,在循环体内部有多层循环,continue可以跳出当次循环,继续执行下一次循环
break关键字可以跳出整个循环
使用break:
x = 1
while x < 10:
x = x + 1
if x == 5: # 如果x=5,就跳出循环
break
print(x)
x = 1 x < 10 满足条件 执行x=x+1语句,x+1为2,赋值给x,x=2 不满足条件x==5
x = 2 x < 10 满足条件 执行x=x+1语句,x+1为3,赋值给x,x=3 不满足条件x==5
x = 3 x < 10 满足条件 执行x=x+1语句,x+1为4,赋值给x,x=4 不满足条件x==5
x = 4 x < 10 满足条件 执行x=x+1语句,x+1为5,赋值给x,x=5
同时满足条件x==5,执行break,跳出循环,程序终止,打印出5
使用continue:
x = 1
while x < 10:
x = x + 1
if x == 5: # 如果x=5,跳过,继续执行
continue
print("x = %d" % x)
x = 2
x = 3
x = 4
x = 6
x = 7
x = 8
x = 9
x = 10
x = 1 x < 10 满足条件 执行x=x+1语句,x+1为2,赋值给x,x=2 不满足条件x==5 打印x = 2
x = 2 x < 10 满足条件 执行x=x+1语句,x+1为3,赋值给x,x=3 不满足条件x==5 打印x = 3
x = 3 x < 10 满足条件 执行x=x+1语句,x+1为4,赋值给x,x=4 不满足条件x==5 打印x = 4
x = 4 x < 10 满足条件 执行x=x+1语句,x+1为5,赋值给x,x=5 满足条件x==5 跳过print("x = %d" % x)语句
x = 5 x < 10 满足条件 执行x=x+1语句,x+1为6,赋值给x,x=6 不满足条件x==5 打印x = 6
x = 6 x < 10 满足条件 执行x=x+1语句,x+1为7,赋值给x,x=7 不满足条件x==5 打印x = 7
x = 7 x < 10 满足条件 执行x=x+1语句,x+1为8,赋值给x,x=8 不满足条件x==5 打印x = 8
x = 8 x < 10 满足条件 执行x=x+1语句,x+1为9,赋值给x,x=9 不满足条件x==5 打印x = 9
x = 9 x < 10 满足条件 执行x=x+1语句,x+1为10,赋值给x,x=10 不满足条件x==5 打印x = 10
x = 10 x < 10 不满足条件 不在进入循环体,跳出来了,程序终止
在程序执行到x=4
时,满足条件x<10
,进入循环体,执行x=x+1
,变成5,满足条件x==5
执行continue
语句,跳过print("x = %d" % x)
语句,继续执行条件判断x<10
。
四、循环里面的循环
我们可以在一个循环体里面增加一个循环,即嵌套循环。在一个嵌套循环中,里面的循环在外部循环之内运行。
注意:循环体内部的代码必须要缩进4个空格
for x in range(3): # 外部循环
for y in range(2): # 内部循环
print("我是内部循环")
print("我是外部循环\n")
外部循环执行3次,内部循环执行2次。
外部循环变量x=0:内部循环变量y=0,执行print("我是内部循环")
内部循环变量y=1,执行print("我是内部循环")
外部循环执行print("我是外部循环\n")
外部循环变量x=1:内部循环变量y=0,执行print("我是内部循环")
内部循环变量y=1,执行print("我是内部循环")
外部循环执行print("我是外部循环\n")
外部循环变量x=2:内部循环变量y=0,执行print("我是内部循环")
内部循环变量y=1,执行print("我是内部循环")
外部循环执行print("我是外部循环\n")
整个内嵌的for
循环是被包在外部for循环里面的,外部循环每执行一次,内部循环就会执行两次。这样外部循环一共执行3次,内部循环一共执行6次。
我是内部循环
我是内部循环
我是外部循环
我是内部循环
我是内部循环
我是外部循环
我是内部循环
我是内部循环
我是外部循环
案例:
打印九九乘法表
for i in range(1,10):
for j in range(1,i+1):
print("%d*%d=%d\t" % (j,i,j*i),end = "")
print("")
%d
是一个占位符,%t
表示一个空档,相当于按了键盘上的Tab
按键。
end=""
可以让输出不会自动分行,关键字end
告诉程序用一个空格来结束每一条print()
语句。
谢谢大家的关注,有不足的地方欢迎指正。
更多内容可以关注微信公众号【陪孩子一起学编程】