python流程控制之while循环
文章目录
引入
1.什么是循环
- 循环就是重复的做某事
2.为何要用循环
- 为了让计算机像人一样去重复做某事
- 所以程序中必须有相应的机制来控制计算机具备人的这种循环做事的能力
3.如何使用循环
python中有while与for两种循环机制,其中while循环称之为条件循环,语法如下
while循环语法
- 伪代码展示
while 条件:
代码1
代码2
代码3
while的运行步骤:
步骤1:如果条件为真,那么依次执行:代码1、代码2、代码3、......
步骤2:执行完毕后再次判断条件,如果条件为True则再次执行:代码1、代码2、代码3、......,如果条件为False,则循环终止
- 实际示例
# 循环打印三次"Hello word!"
count = 1
while count > 3:
print("Hello word!")
count +=1
while循环的基本使用
用户认证程序
- 需求:用户认证程序的基本逻辑就是接收用户输入的用户名密码然后与程序中存放的用户名密码进行判断,判断成功则登陆成功,判断失败则输出账号或密码错误
username = "jason"
password = "123"
inp_name = input("请输入用户名:")
inp_pwd = input("请输入密码:")
if inp_name == username and inp_pwd == password:
print("登陆成功")
else:
print("输入的用户名或密码错误!")
#通常认证失败的情况下,会要求用户重新输入用户名和密码进行验证,如果我们想给用户三次试错机会,本质就是将上述代码重复运行三遍,你总不会想着把代码复制3次吧。。。。
username = "jason"
password = "123"
# 第一次验证
inp_name = input("请输入用户名:")
inp_pwd = input("请输入密码:")
if inp_name == username and inp_pwd == password:
print("登陆成功")
else:
print("输入的用户名或密码错误!")
# 第二次验证
inp_name = input("请输入用户名:")
inp_pwd = input("请输入密码:")
if inp_name == username and inp_pwd == password:
print("登陆成功")
else:
print("输入的用户名或密码错误!")
# 第三次验证
inp_name = input("请输入用户名:")
inp_pwd = input("请输入密码:")
if inp_name == username and inp_pwd == password:
print("登陆成功")
else:
print("输入的用户名或密码错误!")
while循环的使用
即使是小白的你,也觉得的太low了是不是,以后要修改功能还得修改3次,因此记住,写重复的代码是程序员最不耻的行为。
那么如何做到不用写重复代码又能让程序重复一段代码多次呢? 循环语句就派上用场啦(使用while循环实现)
username = "jason"
password = "123"
# 记录错误验证的次数
count = 0
while count < 3:
inp_name = input("请输入用户名:")
inp_pwd = input("请输入密码:")
if inp_name == username and inp_pwd == password:
print("登陆成功")
else:
print("输入的用户名或密码错误!")
count += 1
使用了while循环后,代码确实精简多了,但问题是用户输入正确的用户名密码以后无法结束循环,那如何结束掉一个循环呢?
一.结束while循环的两种方式
1.方式一 : 条件改为假
tag = True
while tag:
username = input('input your username>>:')
password = input('input your password>>:')
if username == "shawn" and password == 123:
print('登录成功')
tag = False #条件改为假,之后的代码还会运行,下次循环判断时才生效
else:
print("登录失败")
print("这行输出依然运行...") #依然运行
2.方式二 : break 当场结束本次循环
- while+break的使用
tag = True
while tag:
username = input('input your username>>:')
password = input('input your password>>:')
if username == "shawn" and password == 123:
print('登录成功')
break #之后的代码不会运行,直接退出循环
else:
print("登录失败")
print("这行输出不会运行...") #不会运行
二.循环嵌套
1.使用 break 一层一层结束循环
- 伪代码示例
while 条件1:
while 条件2:
while 条件3:
break #结束条件3
break #结束条件2
break #结束条件1
while循环嵌套+break 实例:
如果while循环嵌套了很多层,要想退出每一层循环则需要在每一层循环都有一个break
username = "jason"
password = "123"
count = 0
while count < 3: # 第一层循环
inp_name = input("请输入用户名:")
inp_pwd = input("请输入密码:")
if inp_name == username and inp_pwd == password:
print("登陆成功")
while True: # 第二层循环
cmd = input('>>: ')
if cmd == 'quit':
break # 用于结束本层循环,即第二层循环
print('run <%s>' % cmd)
break # 用于结束本层循环,即第一层循环
else:
print("输入的用户名或密码错误!")
count += 1
2.使用该条件为假结束全部循环
- 伪代码示例
tag=True
while tag:
while tag:
while tag:
tag=False #所有的条件都改成了假,全部结束
while循环嵌套+tag的使用案例
针对嵌套多层的while循环,如果我们的目的很明确就是要在某一层直接退出所有层的循环,其实有一个窍门,就让所有while循环的条件都用同一个变量,该变量的初始值为True,一旦在某一层将该变量的值改成False,则所有层的循环都结束
username = "jason"
password = "123"
count = 0
tag = True
while tag:
inp_name = input("请输入用户名:")
inp_pwd = input("请输入密码:")
if inp_name == username and inp_pwd == password:
print("登陆成功")
while tag:
cmd = input('>>: ')
if cmd == 'quit':
tag = False # tag变为False, 所有while循环的条件都变为False
break
print('run <%s>' % cmd)
break # 用于结束本层循环,即第一层循环
else:
print("输入的用户名或密码错误!")
count += 1
三. while 与 continue 的结合使用
continue
: 终止本次循环,直接进入下一次continue
之后一定不要写代码, 因为永远也无法运行- 代码示例
# 打印"1~6",等于"3"时不打印
count=0
while count < 6:
if count == 3:
count += 1
continue
#结束本层进入下面的代码,同级别后面不要有代码
print(count)
count+=1
while+continue的使用案例
break代表结束本层循环,而continue则用于结束本次循环,直接进入下一次循环
# 打印1到10之间,除7以外的所有数字
number=11
while number>1:
number -= 1
if number==7:
continue # 结束掉本次循环,即本次循环continue之后的代码都不会运行了,而是直接进入下一次循环
print(number)
四.while 与 else 的结合使用
else
: 当 while 循环正常结束后才会运行- 代码示例
?当通过"break"结束循环时,为不正常结束
count=0
while count < 6:
if count == 3:
break
print(count)
count+=1
else: #else不会运行
print("==========>")
?当循环正常结束,"else"运行
count=0
while count < 6:
print(count)
count+=1
else: #else会运行
print("==========>")
while+else的使用案例
在while循环的后面,我们可以跟else语句,当while 循环正常执行完并且中间没有被break 中止的话,就会执行else后面的语句,所以我们可以用else来验证,循环是否正常结束
count = 0
while count <= 5 :
count += 1
print("Loop",count)
else:
print("循环正常执行完啦")
print("-----out of while loop ------")
输出
Loop 1
Loop 2
Loop 3
Loop 4
Loop 5
Loop 6
循环正常执行完啦 #没有被break打断,所以执行了该行代码
-----out of while loop ------
如果执行过程中被break,就不会执行else的语句
count = 0
while count <= 5 :
count += 1
if count == 3:
break
print("Loop",count)
else:
print("循环正常执行完啦")
print("-----out of while loop ------")
输出
Loop 1
Loop 2
-----out of while loop ------ #由于循环被break打断了,所以不执行else后的输出语句
五.死循环
死循环本身是无害的, 纯计算的死循环才有害
1.纯输入的死循环 : input
- 不引发效率问题
# 每次都在等待用户输入
while True:
inp = input('>>:')
print(inp)
2.纯输出的死循环 : print
- 效率问题影响不大
# 循环输出
while True:
print("======")
3.纯计算的死循环 : 计算
- 引发致命效率问题
- CPU资源全被占用
- 其他应用程序将崩溃
# 无限计算
while True:
1 + 1
4.continue
无限死循环
- 比纯计算的死循环破坏力还要大
while True:
continue
六、练习
练习1:
寻找1到100之间数字7最大的倍数(结果是98)
number=100
while number>0:
if number%7==0:
print(number)
break
number-=1
练习2:
age=18
count=0
while count<3:
count+=1
guess = int(input(">>:"))
if guess > age :
print("猜的太大了,往小里试试...")
elif guess < age :
print("猜的太小了,往大里试试...")
else:
print("恭喜你,猜对了...")