14while和for循环

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,指定序号开始数字,让结果更符合我们的习惯。
 

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值