文章目录
- 一,分支结构
- 1.1 概述
- 1.2 语法格式
- 1.2.1 单分支语法结构
- 1.2.2 多分支语法结构
- 1.2.3 多重语法结构
- 1.2.4 分支语句的嵌套结构
- 1.3 Debug调试
- 1.4 三元运算符
- 1.4.1 求两个数的差值
- 二 专项练习题
- 2.1 计算快递包裹重量
- 2.2 判断奇偶数
- 2.3 判断闰年
- 2.4 最大的数
- 2.5 三个数排序
- 2.6 三角形进阶判断
- 2.7 人机猜拳游戏
一,分支结构
1.1 概述
- 根据python第一节的内容,如果跟着敲的同学们会发现,无论你怎么写,代码的执行顺序都是从上往下按照顺序结构执行的。
- 如下列场景:都需要根据判断条件来决定执行哪个流程。
- 过走斑马线 ,根据交通灯的颜色,判断上是否可以通过。
- 上网吧,会根据年龄,进行判断你是否可以上网。
- 做公交车,根据是否刷卡来判断能否乘坐。
- 什么叫做分支语句?
- 根据 判断条件 选择执行路径,而不是按照语句出现的物理顺序。
- 根据 判断条件 选择执行路径,而不是按照语句出现的物理顺序。
1.2 语法格式
1.2.1 单分支语法结构
-
如果判断条件中的,表达式成立,会执行结构里面内容,否则就不执行。
- 在python中使用 缩进来,代替代码中的层级关系。
""" 关键字 if 如果条件表达式成立,执行语句 如果表达式不成立, 就不执行语句 """ if 条件表达式: #关键字,if 条件表达式,然后面接一个冒号: 执行语句1 # 换行之后, 制表符tab距离相当于4个空格 # 注意,按照缩进格式进行区别 执行语句2 # 执行语句2就不受if控制.
-
练习
- 键盘录入天气状况,然后判断是否能出去活动,并给出提示。
- 从题目中去分析代码编写要求。
- 没有使用代码缩进,会有什么现象。
""" 键盘录入天气状况,然后判断是否能出去活动,并给出提示。 """ #1.控制台接收输入条件 weather = input("请输入天气条件"); #控制台接收类型是 str类型 #2. 根据条件进行判断 if weather =="晴天": print("可以在室外进行活动") #如果和if是同级别的, print("看看我执行了么?")
- 键盘录入天气状况,然后判断是否能出去活动,并给出提示。
1.2.2 多分支语法结构
-
接上一个单分支结构案例,根据条件表达式的判断,可以执行不同的流程。
- 现在我需要根据表达式条件不同,执行不同的流程,需要别分给出结果 ?
-
多分支语法结构
- 条件表达式成立,Ture 执行,if中的 ,语句1 ,
- 表达式不成立,False 执行 ,else中的,语句2.
if 条件表达式: #关键字,if 条件表达式,然后面接一个冒号: 执行语句1 # 换行之后, 制表符tab距离相当于4个空格 else: 执行语句2
-
练习:
- 思考一个问题?
else
后面为什么不接条件表达式?
""" 键盘录入天气状况,然后判断是否能出去活动,并给出提示。 """ #1.控制台接收输入条件 weather = input("请输入天气条件"); #控制台接收类型是 str类型 #2. 根据条件进行判断 if weather =="晴天": print("可以在室外进行活动") else: # else 后面为什么不接条件表达式? 可以if共用一个组成分支. print("可以在室内进行活动") print("程序执行结束......")
- 思考一个问题?
-
思考: 只使用单分支能否解决 多分支if-else的案例。
- 单个if 解决。
- 这样同上面的 if - else 结构有么不同 ?
if weather =="晴天": print("可以在室外进行活动") if weather =="雨天": print("进行室外活动")
- 思路 : 单分支相当于匹配 2次, 而 if-else结构只需要匹配1 次即可, 效率高!
- 注意, 下面双if的时候如果条件输入错误,都会不执行, 但是if-else结构总会执行一个。
1.2.3 多重语法结构
-
主要是解决区间条件判断问题,如,开始成绩。
- 语法格式
if 判断条件1: 语句体1 elif 判断条件2: 语句体2 .... # 这里可以有多个elif else: 语句体n # 当所有的条件都不满足的时候, 执行这里的内容.
-
多重if 结构的执行流程 :
- 先执行判断条件1, 看其是否成立, 成立则执行对应的语句体1, 然后程序结束.
- 如果判断条件1不成立, 则执行判断条件2, 看其是否成立, 成立则执行对应的语句体2, 然后程序结束.
- 如果不成立, 则执行判断条件3,… 依次类推.
- 如果所有的条件都不满足的时候, 执行最后一个else的内容.
-
计算区间成绩 :
- 下面的案例你有几种实现形式 ?
- 从一个编程角度去,考虑 边界值,或者反向使用
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:
1.2.4 分支语句的嵌套结构
-
所谓的if嵌套指的是 if语句内部还有一个if语句.
- 那我们怎么理解这句话,先看语法构成。
- 原理: 只有外面的if条件成立了,才能执行里面的语句。
if 判断条件: 语句体 if 判断条件: 语句体 else: 语句体 else: 语句体
-
练习场景: 跑步比赛,男女同组选拔,跑进20s内,进入正式比赛,男生进男生组,女生进女生组,并且给出提示
- 这就是一个嵌套结构的体现。
""" 跑步比赛,男女同组选拔,跑进20s内,进入正式比赛,男生进男生组,女生进女生组。 1. 首先需要判断是否能进正式比赛 2. 然后判断性别 男生进男生 女生进女生 """ # 控制台输入跑步成绩 score = int(input("请输入比赛成绩:")) # 1. 第一次判断是否能进比赛 if score<=20 : print("进入比赛,请输入性别:") sex = input() if sex=="男": print("进男生组") elif sex=="女": print("进女生组") else: print("请正确输入,您的性别") # 如果没有成功,给出提示. else: print("很遗憾,继续努力")
1.3 Debug调试
-
什么事 Debug ? 就是用来调试程序的, 可以查看程序的执行流程, 或者 对程序进行排错.
- Bug解释: 程序员把程序出现的所有的非正常的情况, 统称为: Bug.
- 调试程序, 查看程序执行流程,排错。
-
看哪里?
- 下左: 记录的是程序执行到哪里了.
- 下中: 记录的是变量的变化过程.
- 下右: 记录的是控制台的输出结果.
-
如何进行下一步?
- F7: 逐过程调试, 即: 一步一步的走, 看到函数会进去查看源码.
- F8: 逐行调试, 即: 一行一行的走, 不管是否是函数, 都当做一行代码执行.
- F9: 逐断点调试, 即: 一个一个断点的走.
- 逐个断点调式相当于对有问题的代码缩小范围, 然后在使用逐行的方式,如果有自己写的方法,可以在使用逐过程调试。 三者需要配合使用!
- 如何移除断点?
- 第一种: 重新点击你的断点。
- 第二种: 选择"双点图标(break points… )即可。
1.4 三元运算符
- 什么是三元运算符?
- 它也叫三目运算符, 就是用来简化 if—else的写法的.
- 相当于另一种运算符。
- 语法格式
- 练习题: 获取两个数的最大值
- 先用if-else 分支结构, 在使用 三目运算符的方式,观察有什么不同?
"""
变量名 = 语句体1 if 判断条件 else 语句体2
相当于 a if条件判断 else b
执行流程 :
先执行判断条件
如果条件成立,则执行语句体1
如果条件不成立 语句体2
"""
# 相当于简化了 if -else 的书写格式,增强了阅读理解的方便性.
#根据语法的结构
# a if条件判断 else b 相当于成立就是 a 不成立就是b
# 输入两个数比较最大值
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}")
1.4.1 求两个数的差值
- 输入两个数, 计算他们的差值。
- 注意,两个数相差的值,叫做差值。
"""
练习:计算两个数的差值.
例如
输入2个整数
a= 10
b= 20
之间差值是 10
假如:
a = 20
b = 10
之间差是 10
所以 差值不能出现负数 -10 是啥!怎么处理这样的问题
"""
v1 = int(input("输入第一个值: "))
v2 = int(input("输入第二个值: "))
value = (v1-v2) if (v1>=v2) else (v2-v1)
print(f"差值是{value}")
二 专项练习题
2.1 计算快递包裹重量
-
如图所示,需要计算包裹费用。
# 从控制台接收输入水果重量 # 需要注意转换数据类型 float() weight = float(input()) #2.进行逻辑上的判断 #2.1 如果小于15 相当于标准运费 if weight <= 15: print("运费", weight * 6) #2.2 如果大于15的话,如何处理? # 超过的部分 需要额外计算 但是规定部分重量以内的部分在原来基础上计算。 else: print("运费", (weight - 15) * 3 + 15 * 6)
2.2 判断奇偶数
- 如何写一个判断奇数还是偶数的程序。
- 什么是奇数? 什么是偶数 ?
- 什么是奇数? 什么是偶数 ?
"""
1. 首先明确什么是奇数
什么是偶数
就是跟2做对比
num%2==0 余数为0偶数
num%2==1 余数为奇数
"""
num = int(input("请输入"))
if num % 2 == 0:
print("偶数")
else:
print("奇数")
2.3 判断闰年
"""
根据条件说明
第一点 能被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("平年")
2.4 最大的数
"""
从键盘中输入三个整数,输出其中最大的数.
1. 输入格式
三行,每行一个整数
2.输出格式
一个整数 为其中最大数.
主要考察的就是 比较运算符和逻辑运算符的使用
第一个条件 如果 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)
2.5 三个数排序
""""
三个数的排序
1. 从键盘输入三个整数,请输出三个整数按照从小到大的顺序输出
相当于冒泡排序的算法
有几个数比较就循环几次
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)
2.6 三角形进阶判断
- 三角形成立的条件是什么?
- 两边之和大于第三边。
- 两边之和大于第三边。
"""
1. 能否组成等边三角形,如果能输出 yes 否则 no
2. 是否能组成等腰三角形,如果能请输出yes
3. 是否能组成三角形 如果能输出 yes
"""
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_)
2.7 人机猜拳游戏
- 模拟玩家与电脑的一种猜拳的游戏
- 需要使用一个新的函数
- 导包
import random
random.randint(a, b)
用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,生成的随机数n: a <= n <= b。
import random #随机生产 包含开始到结束的随机数: 如下 随机生成 1~3的随机数。 num = random.randint(1,3) print(num)
- 导包
- 模拟猜拳游戏规则
- 提示用户出拳,然后与电脑相比较,规则通用 剪刀>布 就算赢,并给出提示。
- 规则就是 电脑赢, 玩家赢 , 平局。
"""
1.相当于和机器人猜拳游戏
提示:
可以将石头剪刀布设计为
对应数字 1 石头
2 剪刀
3 布
2. 随机生产函数
先导入包 import random
random.randint(a,b) 随机生成 包含 a~b 的数.
"""
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('电脑胜利')