第二节 分支结构

分支结构

1. 概述

  1. 根据python第一节的内容,如果跟着敲的同学们会发现,无论你怎么写,代码的执行顺序都是从上往下按照顺序结构执行的。
  2. 如下列场景:都需要根据判断条件来决定执行哪个流程。
    • 过走斑马线 ,根据交通灯的颜色,判断上是否可以通过。
    • 上网吧,会根据年龄,进行判断你是否可以上网。
    • 做公交车,根据是否刷卡来判断能否乘坐。
  3. 什么叫做分支语句?
    • 根据 判断条件 选择执行路径,而不是按照语句出现的物理顺序。
      在这里插入图片描述

2. 语法结构

2.1 单分支语法结构

  1. 如果判断条件中的,表达式成立,会执行结构里面内容,否则就不执行。

    • 在python中使用 缩进来,代替代码中的层级关系。
    """
    关键字  if 
    如果条件表达式成立,执行语句
    如果表达式不成立, 就不执行语句
    """ 
        
    if 条件表达式:    	#关键字,if 条件表达式,然后面接一个冒号:
    	  执行语句1      # 换行之后, 制表符tab距离相当于4个空格 	
    # 注意,按照缩进格式进行区别  
    执行语句2 # 执行语句2就不受if控制.
    
  2. 练习

    • 键盘录入天气状况,然后判断是否能出去活动,并给出提示。
      • 从题目中去分析代码编写要求。
      • 没有使用代码缩进,会有什么现象。
    """
     键盘录入天气状况,然后判断是否能出去活动,并给出提示。
    """
    
    #1.控制台接收输入条件
    weather = input("请输入天气条件"); #控制台接收类型是 str类型
    
    #2. 根据条件进行判断
    if weather =="晴天":
        print("可以在室外进行活动")
    
    #如果和if是同级别的,
    print("看看我执行了么?")
    
  3. 扩展题:判断下面a输出的结果 ?

    • 思考一下?
    a = 1
    if a >0:
        a+=a
    if a>1:
        a*=2
    print(a) #结果是 4
    

2.2 多分支语法结构

  1. 接上一个单分支结构案例,根据条件表达式的判断,可以执行不同的流程。

    • 现在我需要根据表达式条件不同,执行不同的流程,需要别分给出结果 ?
  2. 多分支语法结构

    • 条件表达式成立,Ture 执行,if中的 ,语句1 ,
    • 表达式不成立,False 执行 ,else中的,语句2.
          
    	if 条件表达式:    	#关键字,if 条件表达式,然后面接一个冒号:
    		  执行语句1      # 换行之后, 制表符tab距离相当于4个空格 	
    	else:
    		  执行语句2  
    
  3. 练习:

    • 思考一个问题? else 后面为什么不接条件表达式?
    """
     键盘录入天气状况,然后判断是否能出去活动,并给出提示。
    """
    
    #1.控制台接收输入条件
    weather = input("请输入天气条件"); #控制台接收类型是 str类型
    
    #2. 根据条件进行判断
    if weather =="晴天":
        print("可以在室外进行活动")
    else:       # else 后面为什么不接条件表达式? 可以if共用一个组成分支.
        print("可以在室内进行活动")
    
    print("程序执行结束......")
    
  4. 思考: 只使用单分支能否解决 多分支if-else的案例。

    • 单个if 解决。
    • 这样同上面的 if - else 结构有么不同 ?
    if weather =="晴天":
        print("可以在室外进行活动")
    if weather =="雨天":
        print("进行室外活动")
    
  • 思路 : 单分支相当于匹配 2次, 而 if-else结构只需要匹配1 次即可, 效率高!
    • 注意, 下面双if的时候如果条件输入错误,都会不执行, 但是if-else结构总会执行一个**(例如: 天气判断)。**

在这里插入图片描述

2.3 多重语法结构

  1. 主要是解决区间条件判断问题,如,开始成绩。

    • 语法格式
    if 判断条件1:
        语句体1
    elif 判断条件2:
        语句体2
    ....    # 这里可以有多个elif
    else:
        语句体n   # 当所有的条件都不满足的时候, 执行这里的内容.
    
  2. 多重if 结构的执行流程 :

    • 先执行判断条件1, 看其是否成立, 成立则执行对应的语句体1, 然后程序结束.
    • 如果判断条件1不成立, 则执行判断条件2, 看其是否成立, 成立则执行对应的语句体2, 然后程序结束.
    • 如果不成立, 则执行判断条件3,… 依次类推.
    • 如果所有的条件都不满足的时候, 执行最后一个else的内容.
      在这里插入图片描述
  3. 计算区间成绩 :

    • 下面的案例你有几种实现形式 ?
    • 从一个编程角度去,考虑 边界值,或者反向使用if多重结构
      在这里插入图片描述
    score = int(input("请输入考试成绩:")) # 接收成绩,进行类型转换.
    #因为涉及到区间选择,即多条件选择,所以需要 多重分支结构
    if score<=100 and score>=90:
        print("A")
    elif score<=89 and score>=80:
        print("B")
    elif score<=79  and score>=70:
        print("C")
    elif score<=69 and score>=60:
        print("D")
    elif score<=59 and score>=0:
        print("E")
    else:
        print("输入有误,请重新检查")
    
    #分割线 
    print("-"*20)
    
    """
    	第二种实现方式, 考虑边界值, 使用if的反向操作,
    	
    """
    # 反向操作 如果 不满足条件我就不需要进行判断
    
    if score < 0 or score > 100:  # 直接排除非法的边界值条件
        print("输入有误,请重新检查")
    elif score >= 90:  # 相当于 score<=100 and score>=90:
        print("A")
    elif score >= 80:
        print("B")
    elif score >= 70:  # 相当于 score <= 79 and score >= 70:
        print("C")
    elif score >= 60:
        print("D")
    else:
        print("E")  # score<=59 and score>=0:
    
    

2.4 分支语句的嵌套结构

  1. 所谓的if嵌套指的是 if语句内部还有一个if语句.

    • 那我们怎么理解这句话,先看语法构成。
    • 原理: 只有外面的if条件成立了,才能执行里面的语句。
    if 判断条件:
    	语句体
        
        if 判断条件:
            语句体
        else:
            语句体
    else:
        语句体
    
  2. 练习场景: 跑步比赛,男女同组选拔,跑进20s内,进入正式比赛,男生进男生组,女生进女生组,并且给出提示

    • 这就是一个嵌套结构的体现。
    """
    跑步比赛,男女同组选拔,跑进20s内,进入正式比赛,男生进男生组,女生进女生组。
    
    1. 首先需要判断是否能进正式比赛
    2. 然后判断性别
            男生进男生
            女生进女生
    """
    
    # 控制台输入跑步成绩
    score = int(input("请输入比赛成绩:"))
    
    # 1. 第一次判断是否能进比赛
    if score<=20 :
        print("进入比赛,请输入性别:")
        sex = input()
        if sex=="男":
            print("进男生组")
        elif sex=="女":
            print("进女生组")
        else:
            print("请正确输入,您的性别")
    
    # 如果没有成功,给出提示.
    else:
        print("很遗憾,继续努力")
    

3. debug 断点调试

  1. 什么事 Debug ? 就是用来调试程序的, 可以查看程序的执行流程, 或者 对程序进行排错.

    • Bug解释: 程序员把程序出现的所有的非正常的情况, 统称为: Bug.
    • 调试程序,查看程序执行流程,通过 断点进行调试
  2. 看哪里?

    • 下左: 记录的是程序执行到哪里了.
    • 下中: 记录的是变量的变化过程.
    • 下右: 记录的是控制台的输出结果.
  3. 如何进行下一步?

    • F7: 逐过程调试, 即: 一步一步的走, 看到函数会进去查看源码.
    • F8: 逐行调试, 即: 一行一行的走, 不管是否是函数, 都当做一行代码执行.
    • F9: 逐断点调试, 即: 一个一个断点的走.
  • 逐个断点调式相当于对有问题的代码缩小范围, 然后在使用逐行的方式,如果有自己写的方法,可以在使用逐过程调试。 三者需要配合使用!
    在这里插入图片描述
  1. 如何移除断点?
    • 第一种: 重新点击你的断点。
    • 第二种: 选择"双点图标(break points… )即可。
      在这里插入图片描述

4. 三元运算符

4.1 语法使用

  1. 什么是三元运算符?

    • 它也叫,三目运算符,相当于简化了 if -else 的书写格式,增强了阅读理解的方便性.
    • 相当于另一种运算符。
  2. 语法格式 变量名 = 语句体1 if 判断条件 else 语句体2

    • 练习题: 获取两个数的最大值
    • 先用if-else 分支结构, 在使用 三目运算符的方式,观察有什么不同?
    # 输入两个数比较最大值
    
    a = int(input("请输入a的值"))
    b = int(input("请输入b的值"))
    
    #需要使用 一个值接收这个三元运算符输出的值  max = 三元运算符
    max =  a if a>b else b
    print(max)
    
    print("-"*20)
    
    #通过if --else 分支结构写出
    # 声明第三个变量存储最大值
    max=0
    if a>b:
        max =a  #如果a大,就赋值给max
    else:
        max = b
    print(f"a输入的值是:{a},b输入的值是:{b},最大值是{max}")
    		 
    

4.2 求两个数的差值

  1. 输入两个数, 计算他们的差值。
    • 注意,两个数相差的值,叫做差值,并且差值不能为负数。
    • 怎么解决差值不能为负数 ?
     #所以 差值不能出现负数 -10 是啥!怎么处理这样的问题
    	v1 = int(input("输入第一个值: "))
    	v2 = int(input("输入第二个值: "))
    #使用三元运算符,处理逻辑思路。
    	value = (v1-v2) if (v1>=v2) else (v2-v1)
    	print(f"差值是{value}")
    

5.案例练习

5.1 计算快递包裹重量

  1. 如图所示,需要 计算包裹费用。
    • 邮寄水果需要根据快递进行计价,计价规则:快递的价格是,包裹重量不超过15公斤时,每公斤6元;超过15公斤后,超出部分每公斤3元。
    #测试数据    输入11.6 输出 69.6  
    			#输入 18.8 输出101.4
    	# 从控制台接收输入水果重量
    	# 需要注意转换数据类型 float()
    		weight = float(input())
    	
    	#2.进行逻辑上的判断
    	#2.1 如果小于15 相当于标准运费
    		if weight <= 15:
    		    print("运费", weight * 6)
    	#2.2 如果大于15的话,如何处理?
    	# 超过的部分 需要额外计算 但是规定部分重量以内的部分在原来基础上计算。
    		else:
    		    print("运费", (weight - 15) * 3 + 15 * 6)
    

5.2 判断奇偶数

  1. 如何写一个判断奇数还是偶数的程序。
    • 什么是奇数?, 什么是 偶数 ?
    """
    1. 首先明确什么是奇数
        什么是偶数
        就是跟2做对比
        num%2==0 余数为0偶数
        num%2==1 余数为奇数
    
    """
    	num = int(input("请输入"))
    	if num % 2 == 0:
    	    print("偶数")
    	else:
    	    print("奇数")
    
    

5.3 判断闰年

  1. 什么是闰年?闰年分为世纪闰年和普通闰年。
    • 第一个条件: 能被4整除但不能被100整除的年份为闰年。
    • 第二个条件: 能被400整除的为闰年。(2000年是闰年,1900年就不是)
  2. 要求编写一个程序判断是否是闰年。
    """
    根据条件说明
        第一点 能被4整数并且不能被100整数
        	year%4==0 and year%100!=0
    
        第二个条件 能被400整除
            year%400==0
    
    """
    	year = int(input("请输入年份:"))
    	if year % 4 == 0 and year % 100 != 0:
    	    print("闰年")
    	elif year % 400 == 0:
    	    print("闰年")
    	else:
    	    print("平年")
    
    

5.4 判断三个数最大数

  1. 从控制台输入三个数, 判断哪一个是最大数 ?
    • 控制台输入: 三行,每行一个整数 。
    """
        主要考察的就是 比较运算符和逻辑运算符的使用
        第一个条件 如果 a>=b and a>=c 是就是a最大
            ...所以依次类推
                b>=c and b>=a
                不那么就是 b最大
    """
    #函数使用,(了解即可)
    a, b, c = list(map(int, input().split()))
    
    if a >= b and a >= c:
        print(a)
    elif b >= a and b >= c:
        print(b)
    else:
        print(c)
    
    

5.5 三个数排序

  1. 从键盘输入三个整数,请输出三个整数按照从小到大的顺序输出
    • 相当于 冒泡排序 的算法,有几个数就比较几次。
    • a,b = b,a 交换变量。
""""
 7 10 8   这三个数应该比较几次
第一次比较   a> b? 7 10 8 不交换位置
第二次比较   a>c?  7 10 8 不交换位置
第三次比较   b>c ? 7 8 10 交换位置 

经过排序算出结果.
"""

a, b, c = list(map(int, input().split()))
# 记住是三个if结构 不是 if--elif结构
if a > b:
    a, b = b, a
if a > c:
    a, c = c, a
if b > c:
    b, c = c, b
print(a, b, c)

5.6 三角形进阶判断

  1. 三角形成立的条件是什么?

    • 两边之和大于第三边。
  2. 给出3条线段长度,请你判断

    • 是否能组成等边三角形,如果能请输出‘yes’不能输出‘no’;
    • 是否能组成等腰三角形,如能输出‘yes’不能输出‘no’;
    • 是否能组成三角形;如果能输出‘yes’ 不能输出‘no’
    #提前定义标志变量
    x_db = "no"  # 等腰
    x_dy = "no"  # 等边
    x_ = "no"  # 三角形
    
    # 接收三个输入的整数
    a = int(input())
    b = int(input())
    c = int(input())
    
    # 最外面的一层开始判断
    if a == b and b == c:
        x_db = "yes"  # 改变变量
    if a == b or b == c or a == c:
        x_dy = "yes"
    if a + b > c and a + c > b and b + c > a:
        x_ = "yes"
    
    print(x_db, x_dy, x_)
    

5.7 人机猜拳游戏

  1. 模拟玩家与电脑的一种猜拳的游戏
  2. 需要使用一个新的函数
    • 导包 import random
    • random.randint(a, b) 用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,生成的随机数n: a <= n <= b。
    import  random  
    #随机生产 包含开始到结束的随机数: 如下  随机生成 1~3的随机数。
    num = random.randint(1,3)
    print(num)
    
  3. 模拟猜拳游戏规则
    • 提示用户出拳,然后与电脑相比较,规则通用 剪刀>布 就算赢,并给出提示。
    • 规则就是 电脑赢, 玩家赢 , 平局。
import  random  # 导包
#猜拳游戏, 代码实现.
user_play = int(input('请出拳:  1(剪刀)  2(石头)  3(布'))
# 2.电脑出的拳,就是随机数.
pc_play = random.randint(1, 3)  # 1(剪刀)  2(石头)  3(布)
# 输出电脑
print(f"电脑出拳:{pc_play}")
#可以先使用平局,这样就可以少写一部分代码,不然判断玩家胜,在判断电脑胜, 最后else才是平局,就会代码冗余.
#反方向,使用if选择结构.
if user_play == pc_play:
    print('平局')
# 4. 如果玩家胜利了, 就是提示玩家胜利,
elif (user_play == 1 and pc_play == 3) or (user_play == 2 and pc_play == 1) or (user_play == 3 and pc_play == 2):
    print("玩家取得胜利")
# 反之,则电脑胜利
else:
    print('电脑胜利')

5.8 判断坐标点属于第几象限

  1. 使用逻辑运算符。

    • 象限的范围怎么确定 ?
      在这里插入图片描述
    #数值比较,就需要进行数据类型转换。
    x = int(input('X:'))
    y = int(input('Y:'))
    if x == 0:
        print('X轴')
    elif y == 0:
        print('Y轴')
    elif x>0 and y>0:
        print('第一象限')
    elif x>0 and y<0:
        print('第四象限')
    elif x<0 and y>0:
        print('第二象限')
    elif x<0 and y<0:
        print('第三象限')
    

5.9 取苹果

  1. 小明和小美在玩一个游戏,桌子上有n个苹果,每次只能取1个或者2个,最后一个取走苹果的人获胜。
    • 假设:小明和小美都很聪明,都采用最优的策略。
    • 小明先取,那小美能获取胜利吗?
  2. 如果小明能赢,就输出Yes,否则输出No。
    • 分析如下图:
      在这里插入图片描述
  3. 根据上图分析得知:
    • 代码如下:
    #include <iostream>
    using namespace std;
    
    int main(){
    
    	int apple_num;
    	cin >>apple_num;// 输入苹果数量 
    	
    	//根据上图分析, 只要是3的倍数小明就会赢 
    	if(apple_num%3==0){
    		cout<<"Yes"; 
    	}else{
    		cout<<"No"; 
    	} 
    	return 0;
    }
    
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吴琼老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值