流程控制之while循环

一.流程控制即控制流程,具体指控制程序的执行流程,而程序的执行流程分为三种结构:顺序结构and分支结构(if)and循环结构(while与for)

 

二.分支结构

1.什么是分支结构?

分支结构就是根据条件判断的真假去执行不同分支对应的子代码

 

2.为什么要用分支结构?

人类某些时候需要根据条件来决定做什么事,比如:如果醒了,就起床

所以程序中必须有相应的机制来控制计算机具备人的这种判断能力

 

3.分支结构如何使用

1)if语法

用if关键字来实现分支结构,完整语法如下:

 

三.循环结构

1.什么是循环结构?

循环结构就是重复执行某段代码

 

2.为什么要用循环结构?

人类有些时候需要做某件重复的事

所以程序中必须有相应的机制控制计算机具备同样像循环结构做事的能力

 

3.如何使用循环结构?

1)while循环语法(条件循环),语法如下:

 

1 while 条件:  
2     代码1
3     代码2
4     代码3
5     ......
6 # while的运行步骤:
7 # 步骤1:如果条件为真,那么依次执行:代码1、代码2、代码3、......
8 # 步骤2:执行完毕后再次判断条件,如果条件为True则再次执行:代码1、代码2、代码3、......,如果条件为False,则循环终止

 

2)while循环应用案例

1 count= 0
2 whilecount < 5:
3 print(count)count += 1
4 
5 print(''*代码----->')

3)死循环与效率问题

 1 count = 0
 2 while count < 5:  #<5
 3 print(count) #0,1,2,3,4
 4 
 5 while true:
 6 name = input('your name >>>')
 7 print(name)
 8 
 9 while true:
10     1 + 1
11  while 1:
12  print('123")

纯计算无io的死循环导致致命的效率问题

 

案例一:while循环的基本使用

用户认证程序

 1 #用户认证程序的基本逻辑就是接收用户输入的用户名密码然后与程序中存放的用户名密码进行判断,判断成功则登陆成功,判断失败则输出账号或密码错误
 2 username = "jason"
 3 password = "123"
 4 
 5 inp_name =  input("请输入用户名:")
 6 inp_pwd =  input("请输入密码:")
 7 if inp_name == username and inp_pwd == password:
 8     print("登陆成功")
 9 else:
10     print("输入的用户名或密码错误!")
11 #通常认证失败的情况下,会要求用户重新输入用户名和密码进行验证,如果我们想给用户三次试错机会,本质就是将上述代码重复运行三遍,你总不会想着把代码复制3次吧。。。。
12 username = "jason"
13 password = "123"
14 
15 # 第一次验证
16 inp_name =  input("请输入用户名:")
17 inp_pwd =  input("请输入密码:")
18 if inp_name == username and inp_pwd == password:
19     print("登陆成功")
20 else:
21     print("输入的用户名或密码错误!")
22 
23 # 第二次验证
24 inp_name =  input("请输入用户名:")
25 inp_pwd =  input("请输入密码:")
26 if inp_name == username and inp_pwd == password:
27     print("登陆成功")
28 else:
29     print("输入的用户名或密码错误!")
30     
31 # 第三次验证
32 inp_name =  input("请输入用户名:")
33 inp_pwd =  input("请输入密码:")
34 if inp_name == username and inp_pwd == password:
35     print("登陆成功")
36 else:
37     print("输入的用户名或密码错误!")
38 
39 #即使是小白的你,也觉得的太low了是不是,以后要修改功能还得修改3次,因此记住,写重复的代码是程序员最不耻的行为。
40 #那么如何做到不用写重复代码又能让程序重复一段代码多次呢? 循环语句就派上用场啦(使用while循环实现)
41 
42 username = "jason"
43 password = "123"
44 # 记录错误验证的次数
45 count = 0
46 while count < 3:
47     inp_name = input("请输入用户名:")
48     inp_pwd = input("请输入密码:")
49     if inp_name == username and inp_pwd == password:
50         print("登陆成功")
51     else:
52         print("输入的用户名或密码错误!")
53         count += 1

案例二:while + break的使用

使用了while循环后,代码确实精简多了,但问题是用户输入正确的用户名密码以后无法结束循环,那如何结束掉一个循环呢?这就需要用到break了

 1 username = "jason"
 2 password = "123"
 3 # 记录错误验证的次数
 4 count = 0
 5 while count < 3:
 6     inp_name = input("请输入用户名:")
 7     inp_pwd = input("请输入密码:")
 8     if inp_name == username and inp_pwd == password:
 9         print("登陆成功")
10         break # 用于结束本层循环
11     else:
12         print("输入的用户名或密码错误!")
13         count += 1

案例三:while循环嵌套+break

如果while循环嵌套了很多层,要想退出每一层循环则需要在每一层循环都有一个break

 1 username = "jason"
 2 password = "123"
 3 count = 0
 4 while count < 3:  # 第一层循环
 5     inp_name = input("请输入用户名:")
 6     inp_pwd = input("请输入密码:")
 7     if inp_name == username and inp_pwd == password:
 8         print("登陆成功")
 9         while True:  # 第二层循环
10             cmd = input('>>: ')
11             if cmd == 'quit':
12                 break  # 用于结束本层循环,即第二层循环
13             print('run <%s>' % cmd)
14         break  # 用于结束本层循环,即第一层循环
15     else:
16         print("输入的用户名或密码错误!")
17         count += 1

案例四:while循环嵌套+tag的使用

针对嵌套多层的while循环,如果我们的目的很明确就是要在某一层直接退出所有层的循环,其实有一个窍门,就让所有while循环的条件都用一个变量,该变量的初始值为true,一旦在某一层将该变量的值改成false,则所有层的循环都结束

 1 username = "jason"
 2 password = "123"
 3 count = 0
 4 
 5 tag = True
 6 while tag: 
 7     inp_name = input("请输入用户名:")
 8     inp_pwd = input("请输入密码:")
 9     if inp_name == username and inp_pwd == password:
10         print("登陆成功")
11         while tag:  
12             cmd = input('>>: ')
13             if cmd == 'quit':
14                 tag = False  # tag变为False, 所有while循环的条件都变为False 
15                 break
16             print('run <%s>' % cmd)
17         break  # 用于结束本层循环,即第一层循环
18     else:
19         print("输入的用户名或密码错误!")
20         count += 1

案例五:while+continue的使用

 

break代表结束本层循环,而continue则用于结束本次循环,直接进入下一次循环

1 # 打印1到10之间,除7以外的所有数字
2 number=11
3 while number>1:
4     number -= 1
5     if number==7:
6         continue # 结束掉本次循环,即本次循环continue之后的代码都不会运行了,而是直接进入下一次循环
7     print(number)

案例六:.while+else的使用

 

 1 count = 0
 2 while count <= 5 :
 3     count += 1
 4     print("Loop",count)
 5 else:
 6     print("循环正常执行完啦")
 7 print("-----out of while loop ------")
 8 输出
 9 Loop 1
10 Loop 2
11 Loop 3
12 Loop 4
13 Loop 5
14 Loop 6
15 循环正常执行完啦   #没有被break打断,所以执行了该行代码
16 -----out of while loop ------

如果执行过程中被break,就不会执行else的语句

 1 count = 0
 2 while count <= 5 :
 3     count += 1
 4     if count == 3:
 5         break
 6     print("Loop",count)
 7 else:
 8     print("循环正常执行完啦")
 9 print("-----out of while loop ------")
10 输出
11 Loop 1
12 Loop 2
13 -----out of while loop ------ #由于循环被break打断了,所以不执行else后的输出语句

 

上一篇:OpenCV实现"你的名字"滤镜


下一篇:python动态演示蛮力法解决凸包问题