Python 中循环语句有两种,一种是 for 循环,另一种是 while 循环。
1.while循环
while语句用于在指定条件成立时重复执行操作,起基本语法格式如下:注意不要遗漏冒号和缩进
while 条件 : #注意不要遗漏冒号
要重复执行的代码 #注意缩进
a = 1
while a<3 :
print(a)
a=a+1 #也可以写成 a+=1
第一行代码让a的初始值为1;第二行代码的while语句会判断a的值是否满足“小于3”的条件,判断结果满足,则执行第三第四行代码,先打印a的值1,再将a的值增加1变成2;随后返回第二行代码进行判断,此时a的值仍然满足“小于3”的条件,所以继续执行第三第四行代码,先输出a的值2,在将a的值增加1变成3;随后返回第二行代码进行判断,此时a的值已经不满足“小于3”的条件,循环便终止了,不在执行第三第四行代码:运行结果如下:
1
2
循环条件也是个 布尔值,每次循环都会进行判断,当满足循环条件(布尔值为 True)时执行循环体内的代码,否则结束循环。
2.死循环
循环条件 是用来控制是否要结束循环的。死循环的产生,就是因为没有控制好循环条件,如果一个 while 循环中,循环条件永远为 True,那就会引发死循环。
死循环 会使我们的程序不受控制,永无止境地做着无意义的循环。这会造成后续代码无法执行,甚至会导致 CPU 占用过高电脑死机等情况。
while True :
print('hahaha')
如果想强制停止永久循环,可在PyCharm中按快捷键【Ctrl+F12】。
为了避免死循环,我们要控制循环条件,确保循环条件不会永远成立,也就是说,我们要保证 while 后面跟的 循环条件 最终可以被转化为 False。
3.for循环
for循环常用于完成指定次数的重复操作,其基本语法如下,同样要注意不要遗漏冒号和缩进。
for i in 序列 : #注意不要遗漏冒号
要重复执行的代码 #注意代码前要缩进
class1 = ['李白','王维','孟浩然']
for i in class1:
print(i)
#输出:
李白
王维
孟浩然
这里的i只是一个代号,也可以换成其他变量。
序列 指的是 有序 元素的集合。我们能使用 len() 函数获取它的长度,也能够用 索引 获取指定位置的元素。
列表 和 元组,还有最开始接触的 字符串,都是 Python 中很常用的序列。而 整数、浮点数 和 布尔值,它们都是一个个孤立的存在,自然也就不是序列。
for语句还经常会配合用到range() 函数,通过之前的学习我们知道,range() 函数生成的是一串数字序列,可以使用 list() 函数,把它的返回值转换成列表再使用。其实,range() 函数的返回值可以直接索引,也能通过 len() 函数获取长度,所以它也是序列。
for i in range(3):
print('第'+str(i+1)+'次')
#输出:
第1次
第2次
第3次
4.能转换成序列的数据
①之前学过的 zip() 函数,它可以将两个列表打包组合起来,
# 客人编号
ids = [1, 2, 3]
# 客人名字
class1 = ['李白','王维','孟浩然']
class_id = list(zip(ids, class1))
print(class_id)
# 输出:[(1, '李白'), (2, '王维'), (3, '孟浩然')]
仔细观察一下不难发现,打包后的结果 class_id 实际上按顺序保存一个个形如 (编号, 名字) 的 元组。对此 for 循环表示,像这样 能转换成序列 的结构,自己可以直接遍历,不需要用 list() 转换也可以。
这种结构在遍历时应该怎样访问其中的元素呢?对于保存着第一位客人信息的元组 info,我们可以这样分别取到第一个、第二个元素:
info = (1, '李白')
id, name = info
print(id)
# 输出:1
print(name)
#输出:李白
这是 Python 中的特殊规则:用逗号 , 分隔开的多个变量,可以 按顺序 一次性获取 序列 中的元素。需要注意的是,序列里有几个元素,就要用多少个变量把它们一一取出来。
比如我们向元组 info 里又添加了一条信息。现在 info 里有三个元素,所以要用三个变量分别取出来。
info =(1,'李白','唐朝')
id,name,dynasty = info
print(str(id)+'号诗人'+name+'出生于'+dynasty)
#输出:1号诗人李白出生于唐朝
所以对于按编号、名字顺序组合起来的数据 zip(ids, class1),我们可以设置 id 和 name 这两个变量去遍历它,就像这样:
ids = [1, 2, 3]
class1 = ['李白','王维','孟浩然']
for id,name in zip(ids,class1) :
print(str(id)+'号:'+name)
#输出:
1号:李白
2号:王维
3号:孟浩然
②同样的enumerate() 函数,它也能给列表中每个元素都标上序号,并返回打包后的结果,它的返回值也是一个个元组呢,跟 zip() 函数的返回值很像。
class1 = ['李白','王维','孟浩然']
for id,name in enumerate(class1,1) :
print(str(id)+'号:'+name)
#输出:
1号:李白
2号:王维
3号:孟浩然
序号默认是从 0 开始的,我们传入参数1,指定序号开始数字,让结果更符合我们的习惯。