流程控制语句

昨日回顾

【一】流程控制语句简介

参考博客:(https://www.cnblogs.com/dream-ze/p/17337360.html)

  • 流程控制即控制流程
    • 具体指控制程序的执行流程
  • 而程序的执行流程分为三种结构:
    • 顺序结构(之前我们写的代码都是顺序结构)
      • 自上而下的执行
    • 分支结构(用到if判断)
      • 根据条件判断的真假去执行不同分支对应的子代码
    • 循环结构(用到while与for)
      • 重复执行某段代码块

【二】分支结构

【1】什么是分支结构

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

【2】要用分支结构的原因

  • 人类某些时候需要根据条件来决定做什么事情,比如

    • 如果今天下雨,就带伞
  • 所以程序中必须有相应的机制来控制计算机具备人的这种判断能力

【3】分支结构的使用

(1)if语法之分支判断/嵌套

  • 用if关键字来实现分支结构,完整语法如下
if 条件1:   # 如果条件1的结果为True,就依次执行:代码1、代码2,......
   代码1
    代码2
    ......
elif 条件2: # 如果条件2的结果为True,就依次执行:代码3、代码4,......
   代码3
    代码4
    ......
elif 条件3: # 如果条件3的结果为True,就依次执行:代码5、代码6,......
   代码5
    代码6
    ......
else:     # 其它情况,就依次执行:代码7、代码8,......
    代码7
    代码8
    ......

注意:

  • 1、python用相同缩进(4个空格表示一个缩进)来标识一组代码块,同一组代码会自上而下依次运行
  • 2、条件可以是任意表达式,但执行结果必须为布尔类型
  • 在if判断中所有的数据类型也都会自动转换成布尔类型
    • 2.1、None,0,空(空字符串,空列表,空字典等)三种情况下转换成的布尔值为False
    • 2.2、其余均为True

ps:

  1. 根据条件的成立与否,决定是否执行if代码块

  2. 我们通过缩进代码块,来表示代码之间的从属关系

  3. 不是所有的代码都拥有子代码块

  4. 我们推荐使用缩进4格

  5. 同属于一个代码块的子代码块缩进量一定要一样

遇到冒号就要回车换行,注意缩进

  • 单双分支结构
关键字:if
"""
	语法格式:
		if 判断条件:
    		print('小姐姐好')
"""

# 2. 双分支结构
	"""
		语法格式:
			if 判断条件:
                条件成立执行的子代码块
            else:
                条件不成立执行的子代码块
	"""
  • 多分支结构
"""
		语法格式:
			if 条件1:
                条件1成立执行的子代码块
            elif 条件2:
                条件1不成立条件2成立执行的子代码块
            elif 条件3:
                条件1、2不成立条件3成立执行的子代码块
            elif 条件4:
                条件1、2、3不成立条件4成立执行的子代码块
            else:
            	以上条件都不成立的时候执行的代码块
	"""
    
    # else语句是可有可无的
  • 案例

    • 如果:女人的年龄>30岁,那么:叫阿姨

      age_of_girl=31
      if age_of_girl > 30:
          print('阿姨好')
      
    • 如果:女人的年龄>30岁,那么:叫阿姨,否则:叫小姐

      age_of_girl=18
      if age_of_girl > 30:
          print('阿姨好')
      else:
          print('小姐好')
      
    • 如果:女人的年龄>=18并且<22岁并且身高>170并且体重<100并且是漂亮的,那么:表白,否则:叫阿姨**

      age_of_girl=18
      height=171
      weight=99
      is_pretty=True
      if age_of_girl >= 18 and age_of_girl < 22 and height > 170 and weight < 100 and is_pretty == True:
          print('表白...')
      else:
          print('阿姨好')
      
    • 如果:成绩>=90,那么:优秀

      如果成绩>=80且<90,那么:良好

      如果成绩>=70且<80,那么:普通

      其他情况:很差

      score=input('>>: ')
      score=int(score)
      
      if score >= 90:
          print('优秀')
      elif score >= 80:
          print('良好')
      elif score >= 70:
          print('普通')
      else:
          print('很差')
      
  • if语法之分支嵌套

# 在表白的基础上继续:
# 如果表白成功,那么:在一起
# 否则:打印。。。

age_of_girl=18
height=171
weight=99
is_pretty=True
success=False

if age_of_girl >= 18 and age_of_girl < 22 and height > 170 and weight < 100 and is_pretty == True:
    if success:
        print('表白成功,在一起')
    else:
        print('什么爱情不爱情的,爱nmlgb的爱情,爱nmlg啊...')
else:
    print('阿姨好')

(2)if语法练习

  • 练习一:登陆功能实现

    1. 写一个登录功能,用户名是:kevin 密码是:123
    # 要求:用户名和密码输入正确,打印登录成功,否则登录失败
    username=input('username:>>>')
    password=input('password:>>>')  # 
    
    if username == 'kevin' and password == '123':
        print('登录成功')
    else:
        print('登录失败')
    
  • 练习二:根据用户输入的用户名不同,打印各自的权限

    # !/usr/bin/env python
    # 根据用户输入内容打印其权限
    
    '''
    egon --> 超级管理员
    tom  --> 普通管理员
    jack,rain --> 业务主管
    其他 --> 普通用户
    '''
    name=input('请输入用户名字:')
    
    if name == 'egon':
        print('超级管理员')
    elif name == 'tom':
        print('普通管理员')
    elif name == 'jack' or name == 'rain':
        print('业务主管')
    else:
        print('普通用户')
    

【三】循环结构

【1】什么是循环结构

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

【2】要用循环结构的原因

  • 人类某些时候需要重复做某件事情
  • 所以程序中必须有相应的机制来控制计算机具备人的这种循环做事的能力

【四】循环结构的使用

python中有while与for两种循环机制

其中while循环称之为条件循环

【1】循环结构之 while 的语法

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

(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("输入的用户名或密码错误!")
    
    • 即使是小白的你,也觉得的太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

(2)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("登陆成功")
        break # 用于结束本层循环
    else:
        print("输入的用户名或密码错误!")
        count += 1

(3)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

(4)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

(5)while + continue 的使用

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

(6)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后的输出语句

(7)while 循环的练习

  • 练习一:寻找1到100之间数字7最大的倍数(结果是98)

    number=100
    while number>0:
        if number%7==0:
            print(number)
            break
        number-=1
    
  • 练习二

    • 猜年龄游戏
    age=18
    count=0
    while count<3:
        count+=1
        guess = int(input(">>:"))
        if guess > age :
            print("猜的太大了,往小里试试...")
        elif guess < age :
            print("猜的太小了,往大里试试...")
        else:
            print("恭喜你,猜对了...")
    
  • 练习三:

    • 猜年龄的游戏进阶版
      2.1 普通要求
      只允许输错3次,输入正确直接结束
      2.2 当输错3次之后,不要直接结束,问用户是否还要在次输入,如果要,继续输入,如果不要,直接结束
    right_age = 22
    count_start = 3
    
    while count_start > 0:
        age_input = input("请输入你的年龄:>>>")
        if right_age == age_input:
            print(f"你真聪明,真实年龄就是{age_input}")
        else:
            count_start -= 1
            print(f"加油呀,你还有{count_start}次机会")
            if count_start == 0:
                count = input(f"你的机会耗尽了,请选择是否继续游戏:>>>是或否")
                if count == '是':
                    count_start = 3
                else:
                    break
    
# 猜年龄的游戏
"""
	1. 普通要求
		三次机会
	2. 拔高要求
		三次之后再次询问是否继续输入
"""
# 三次机会,猜对了,就直接结束
# 先写主体功能

# 1. 先定义一个年龄出来
real_age = 18

# 定义一个计数器
count = 1
while count < 4:
    # 2. 用户输入年龄
    guess_age = input('请输入你猜测的年龄:>>>')  # 数字
    # 2.1 把字符串的数字转为整型,int,可能会出现bug
    guess_age = int(guess_age)
    
    # 3. 判断输入的年龄和真实年龄是否一样
    if guess_age > real_age:
        print('猜大了')
        # count+=1
    elif guess_age < real_age:
        print('猜小了')
        # count+=1
    else:
        print('哎呀,猜对了')
        break
    # 优化
    count+=1
    
'''拔高'''

# 1. 先定义一个年龄出来
real_age = 18

# 定义一个计数器
count = 1
while count < 4:

    # 2. 用户输入年龄
    guess_age = input('请输入你猜测的年龄:>>>')  # 数字
    # 2.1 把字符串的数字转为整型,int,可能会出现bug
    guess_age = int(guess_age)

    # 3. 判断输入的年龄和真实年龄是否一样
    if guess_age > real_age:
        print('猜大了')
        # count+=1
    elif guess_age < real_age:
        print('猜小了')
        # count+=1
    else:
        print('哎呀,猜对了')
        break
    # 优化
    count+=1
    if count == 4:
        # 询问:是否再次输入
        cmd = input('三次机会使用完了,是否再次输入yes/no')
        if cmd == 'yes':
            count=1
        else:
            print('结束')
            break

【2】死循环

  • 在使用while循环时,如果没有结束条件,或者一直是True时,代码块就会被反复执行
while True:
    print(100)

可以用 for 循环实现的判断条件,就不要使用 while 循环

【3】循环结构之 for 循环语法

  • 循环结构的第二种实现方式是for循环
    • for循环可以做的事情while循环都可以实现
    • 之所以用for循环是因为在循环取值(即遍历值)时for循环比while循环的使用更为简洁
    • for后面的变量名命名的时候,如果没有特殊的含义,我们一般使用i,j,k,v,item等等
for 变量名 in 可迭代对象: # 此时只需知道可迭代对象可以是字符串\列表\字典,我们之后会专门讲解可迭代对象
	代码一
	代码二
    ...
    
#例1
for item in ['a','b','c']:
    print(item)
# 运行结果
a
b
c

d = {'username':'kevin', 'age':18, 'hobby':'music'}
for i in d:
    print(i, d[i])

# 参照例1来介绍for循环的运行步骤
# 步骤1:从列表['a','b','c']中读出第一个值赋值给item(item=‘a’),然后执行循环体代码
# 步骤2:从列表['a','b','c']中读出第二个值赋值给item(item=‘b’),然后执行循环体代码
# 步骤3: 重复以上过程直到列表中的值读尽

(1)for 循环的使用案例

  • 练习一:打印数字0-5

    # 简单版:for循环的实现方式
    for count in range(6):  # range(6)会产生从0-5这6个数
        print(count)
        
    # 复杂版:while循环的实现方式
    count = 0
    while count < 6:
        print(count)
        count += 1
    
  • 练习二:遍历字典

    # 简单版:for循环的实现方式
    for k in {'name':'jason','age':18,'gender':'male'}:  # for 循环默认取的是字典的key赋值给变量名k
        print(k)
        
    # 复杂版:while循环确实可以遍历字典,后续将会迭代器部分详细介绍
    
  • 练习三:for循环嵌套

    #请用for循环嵌套的方式打印如下图形:
    *****
    *****
    *****
    
    for i in range(3):
        for j in range(5):
            print("*",end='')
        print()  # print()表示换行
    

注意:break 与 continue也可以用于for循环,使用语法同while循环

(2)for 循环的使用练习

  • 练习一:打印九九乘法表

    for i in range(1,10):
    	for j in range(1,i+1):
    		print('%s*%s=%s' %(i,j,i*j),end=' ')
    	print()
    
  • 练习二:打印金字塔

    # 分析
    '''
    #max_level=5
         *     	  # current_level=1,空格数=4,*号数=1
        ***   	  # current_level=2,空格数=3,*号数=3
       *****      # current_level=3,空格数=2,*号数=5
      *******     # current_level=4,空格数=1,*号数=7
     *********    # current_level=5,空格数=0,*号数=9
    
    # 数学表达式
    空格数=max_level-current_level
    *号数=2*current_level-1
    '''
    # 实现:
    max_level=5
    for current_level in range(1,max_level+1):
    	for i in range(max_level-current_level):
    		print(' ',end='') #在一行中连续打印多个空格
    	for j in range(2*current_level-1):
    		print('*',end='') #在一行中连续打印多个空格
    	print()
    

【4】range关键字

range在不同解释器版本中是有区别的

  • 如果你需要遍历数字序列
    • 可以使用内置 range() 函数。
    • 它会生成数列
    • 例如:
>>>for i in range(5):
...     print(i)
...
0
1
2
3
4
  • 也可以使用 range() 指定区间的值:
    • 规则:顾头不顾尾
>>>for i in range(5,9) :
    print(i)
 
    
5
6
7
8
>>>
  • 也可以使 range() 以指定数字开始并指定不同的增量(甚至可以是负数,有时这也叫做'步长'):
    • 规则:顾头不顾尾
>>>for i in range(0, 10, 3) :
    print(i)
 
    
0
3
6
9
>>>
>>>for i in range(-10, -100, -30) :
    print(i)
 
    
-10
-40
-70
>>>
  • 可以结合 range() 和 len() 函数以遍历一个序列的索引
    • 如下所示:
>>>a = ['Google', 'Baidu', 'Runoob', 'Taobao', 'QQ']
>>> for i in range(len(a)):
...     print(i, a[i])
... 
0 Google
1 Baidu
2 Runoob
3 Taobao
4 QQ
>>>
  • 还可以使用 range() 函数来创建一个列表:
>>>list(range(5))
[0, 1, 2, 3, 4]
>>>
posted @ 2023-05-16 20:42  Chimengmeng  阅读(76)  评论(0编辑  收藏  举报