day05 流程控制之while循环、for循环
今日内容:
循环结构:
什么是循环结构?
为什么要用循环结构?
如何使用循环结构?
语法:流程控制之while循环
流程控制之for循环
什么是循环结构?
重复做一件事
为什么要用循环结构?
让计算机像人一样重复做一件事
如何使用循环结构?
一、while循环:条件循环
语法:
while 条件:
代码1
代码2
代码3
while的运行步骤:
步骤1:如果条件为真,那么依次执行:代码1、代码2、代码3、......
步骤2:执行完毕后再次判断条件
如果条件为True则再次执行:代码1、代码2、代码3、......
如果条件为False,则循环终止
while循环的基本使用:
例:
s = 0
tag = True
while tag:
if s == 5:
tag = False
print(s)
s += 1
s = 0
while s <= 5:
print(s)
s += 1
例:
# 打印0-10之间的偶数
count = 0
while count <= 10:
if count % 2 == 0:
print('loop' , count) -------------------------》逗号可以隔开输入内容
count += 1
死循环和效率问题:
while True:
1+1
纯计算无io的死循环会导致致命的效率问题
退出循环的2种方法:
例:
username = "jay"
passwd = "666"
while True:
inp_name = input("输入账号:")
inp_pwd = input("输入密码:")
if inp_name == username and inp_pwd == passwd:
print("登录成功!")
else:
print("账号或密码错误")
此时,考虑:输对了应该不用再重复
退出循环的2种方法:
方法一:while+tag的使用,将条件改成False,是本次循环运行完毕后,等到下次循环条件,判断时才会生效
username = "JAY"
passwd = "666"
tag = True
while tag:
inp_name = input("输入账号:")
inp_pwd = input("输入密码:")
if inp_name == username and inp_pwd == passwd:
print("登录成功!")
tag = False #之后的代码还会运行,下次循环判断条件时才会生效
else:
print("账号或密码错误")
print("----------end-----------") ------------------------------》会打印出来
方法二:while+break的使用
只要运行到break就会立刻终止本层循环
username = "JAY"
passwd = "666"
while True:
inp_name = input("输入账号:")
inp_pwd = input("输入密码:")
if inp_name == username and inp_pwd == passwd:
print("登录成功!")
break #立刻终止本层循环
else:
print("账号或密码错误")
print("----------end-----------")------------------------- 》不会打印出来
所以,这两种方式用哪一种呢? 看需求,也就是最后的代码print("----------end-----------")需要不需要运行
while循环嵌套+break
username = "jay"
passwd = "666"
while True:
inp_name = input("输入账号:")
inp_pwd = input("输入密码:")
if inp_name == username and inp_pwd == passwd:
print("登录成功!")
while True:
cmd = input("输入命令:")
if cmd == 'quit':
break
else:
print('命令{x}正在运行'.format(x=cmd))
break
else:
print("账号或密码错误")
while循环嵌套+tag
在某一层直接退出所有层的循环,但是原理是在下一次循环时结束
就让所有while循环的条件都用同一个变量,该变量的初始值为True,一旦在某一层将该变量的值改成False,则所有层的循环都结束
username = "jay"
passwd = "666"
tag = True
while tag:
inp_name = input("输入账号:")
inp_pwd = input("输入密码:")
if inp_name == username and inp_pwd == passwd:
print("登录成功!")
while tag:
cmd = input("输入命令>:")
if cmd == 'quit':
tag = False
else:
print('命令{x}正在运行'.format(x=cmd))
else:
print("账号或密码错误")
while+continue:结束本次循环,直接进入下一次
例:打印0,1,2,3,5 跳过2,4
count = 0
while count < 6:
if count == 2 or count == 4:
count += 1-----------------》先加在continue前面,否则continue运行,不会运行后面的程序,会直接返回循环,卡在4上
continue
else:
print(count)
count += 1
while+else:else包含的代码会在while循环结束后,并且while循环是在没有被break打断的情况下,正常结束的,才会运行,是针对break的
count = 0
while count < 6:
print(count)
count += 1
else:
print('********&&&&&&&&&&&')
count = 0
while count < 6:
if count == 4:
break
print(count)
count += 1
else:------------------------------------------------------------》不会运行
print('********&&&&&&&&&&&')
应用案例:
案例一、用户认证程序
通常认证失败的情况下,会要求用户重新输入用户名和密码进行验证,如果我们想给用户3次试错机会,并且提示“输入错误3次,退出”,登录成功了继续后续操作
username = "jay"
passwd = "666"
count = 0
while count < 3:
inp_name = input("输入账号:")
inp_pwd = input("输入密码:")
if inp_name == username and inp_pwd == passwd:
print("登录成功")
while True:
cmd = input('输入操作指令:')
if cmd == 'q':
break
else:
print('命令{x}正在运行...'.format(x=cmd)) ---------------》.format()格式化形式
# print('命令 <%s>正在运行...' % cmd)-------------------》一个意思
break
else:
print("账号或密码错误")
count += 1
else:
print("账号密码输错3次,退出程序")
二、for循环:循环取值,便利值
1 、基本用法:
迭代式循环:for
语法:
for i in range(10):
缩进的代码块
例:取列表list的值
names = ['jay', 'jack', 'mike', 'seven']
用while:
# 打印列表name的内容
count = 0
while count < 5:-----------------------------------> < len(names):表示列表长度
print(names[count])
count += 1
用for:
for i in names:
print(i)
取字典dic的值:
dic = {'k1': 111, 'k2': 222, 'k3': 333}
for i in dic:
print(i,dic[i])
取列表的值
for x,y in [['name', 'jay'], ['age', 18], ['job', 'music']]: #x,y = ['name','jay']
print(x,y)
2、for+break continue else同while一样
3、for+range:弥补for重复操作太繁琐的弊端
例:
x = 0
while x < 10000:
print(111)
x += 1
等同于:
for x in range(10000):
print(111)
扩充知识点:
cmd模式下:
python2中,range(5)------》[0,1,2,3,4]
python3中,range(5)------》[0,5]
如果把列表当中的元素比喻为鸡蛋,那么列表就上装鸡蛋的筐子
在python2中,如果调用了range(10000),会真的创建一个能装下10000个鸡蛋的“筐子”,占用内存空间
在python3中做了优化,把这个装鸡蛋的“筐子”做成了一只生蛋的“老母鸡”,“老母鸡”不会占用多大内存空间,for循环每次需要一个值的时候,它会给你一个蛋,你要10000个蛋,它会给你生10000个蛋,从而减少了内存空间的浪费,后面会学到什么是“老母鸡”