热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

单分支两路分支和多分支的if结构_Python编程基础07:选择结构

在实际生活中经常需要作出一些判断,比如开车来到一个十字路口,这时需要对红绿灯进行判断,如果前面是红灯,就停车等候࿰

在实际生活中经常需要作出一些判断,比如开车来到一个十字路口,这时需要对红绿灯进行判断,如果前面是红灯,就停车等候,如果是绿灯,就通行。Python中有一种特殊的语句叫做选择结构语句,需要对一些条件作出判断,从而决定执行哪一段代码。

一、选择结构概述
  • 以双分支结构为例进行说明
64177dc5eb7767f959a9b1eac50168cc.png
  • 程序发生分支,根据判断框内的条件是否被满足来选择执行一块还是执行 B 块。无论条件是否被满足,只能选择执行一或 B 中之一,不能执行完一块后又执行 B 块无论走哪条路径,都要经过 C 点,然后脱离本选择结构框。

根据处理不同情况的个数,我们下面分成单分支结构、双分支结构与多分支结构来进行讲解。

二、单分支结构

(一)语法格式

if 表达式:

语句块

(二)执行情况
bbee6593c798542518785700bf2a3f1e.png
  • 表达式可以是任意表达式,如果表达式计算结果为True,那么执行语句块,否则什么也不做。
  • 如果是算术表达式,那么结果非零就是True,结果为零就是False
  • 如果是字符串表达式,那么非空字符串就是True,空字符串就是False

三、双分支结构

(一)语法格式

if 表达式:

语句块1

else:

语句块2:

(二)执行情况
543e500df610a647f67fac09f270983a.png
  • 双分支结构就是我们通常讲的“花开两朵,各表一枝”或者“鱼和熊掌不可兼得”。使用if-else语句时,表达式可以是一个单纯的布尔值或变量,也可以是比较表达式或逻辑表达式,如果满足条件,则执行if后面的语句块,否则,执行else后面的语句块,这种形式的选择语句相当于汉语里的关联词语“如果……否则……”。

(三)案例演示

任务1、判断令狐冲大侠喝酒杯数
  • 在单分支结构部分,我们已经处理过这个任务,但是有点不完美,当用户没有猜对时,程序没有给予用户一个提示,而是什么都没有输出,显得不太友好,下面我们采用双分支结构来完善。
  • 修改程序 - 判断令狐冲大侠喝酒杯数

# -*- coding: utf-8 -*-

"""

功能:判断令狐冲大侠喝酒杯数

"""

print('令狐冲大侠说他喝了若干杯酒,

杯数满足条件:三三数之剩二,

五五数之剩三,七七数之剩二,

问令大侠究竟喝了多少杯酒?')

cups = int(input('你认为令大侠喝了几杯?请输入杯数:'))

if cups % 3 == 2 and cups % 5 == 3 and cups % 7 == 2:

print('朋友,你说对了,令大侠确实喝了{}杯酒!'.format(cups))

else:

print('朋友,你说错了,令大侠并没有喝{}杯酒!'.format(cups))

  • 运行程序,查看结果
370ed7d46404e6025f7864e64b2a3c1c.png

任务2、计算三角形面积
91e4f38fb079fcb2755288fb3a295278.png

# -*- coding: utf-8 -*-

"""

功能:计算三角形面积

"""

from math import sqrt

a = float(input('a = '))

b = float(input('b = '))

c = float(input('c = '))

if a + b > c and b + c > a and c + a > b:

p = (a + b + c) / 2

area = sqrt(p * (p - a) * (p - b) * (p - c))

print('area = {:.2f}'.format(area))

else:

print('{}、{}与{},无法构成三角形!'.format(a, b, c))

  • 运行程序,查看结果
b795a49ba1a32b8e836039fd3a110c35.png
  • 问题:构成三角形的判断条件能否换种花样呢?

# -*- coding: utf-8 -*-

"""

功能:计算三角形面积02

"""

from math import sqrt

a = float(input('a = '))

b = float(input('b = '))

c = float(input('c = '))

p = (a + b + c) / 2

if p > a and p > b and p > c:

area = sqrt(p * (p - a) * (p - b) * (p - c))

print('area = {:.2f}'.format(area))

else:

print('{}、{}与{},无法构成三角形!'.format(a, b, c))

  • 运行程序,查看结果
21bbc8d4eb437827ed8dc70fcaa59214.png

(四)补充说明

1、else不能单飞
  • 在使用 else语句时,else一定不可以单独使用,它必须和保留字if一起使用,否则报错
31e1d47150befc9b1446c55234a8b04d.png

2、else与if的匹配
  • 程序中使用 if…else 语句时,如果出现if语句多于else语句的情况, 那么该else语句将会根据缩进确定else语句属于哪个if语句。
95f1db9226a0cac1919157bb2acd79dc.png
  • else与第二个if匹配,当用户输入一个负数,程序就没有任何输出
aff9d72dad1b3e9b23dc1fe62318bb2d.png
  • 修改程序,else与第一个if匹配
42297192a9d805706c6e423275b910af.png
  • 运行程序,查看结果
2af42fde99262d32f5db7a0025a1b6cc.png

四、多分支结构

(一)三种处理方式
  • 多分支结构可有三种处理方式:并列式、嵌套式、延拓式

1、并列式多分支结构

if 表达式1:

语句块1

if 表达式2:

语句块2

……

if 表达式n:

语句块n

2、嵌套式多分支结构
  • 单分支里嵌套双分支或双分支里嵌套单分支都是可以的

if 表达式1:

if 表达式2:

语句块2(可继续嵌套)

else:

语句块3(可继续嵌套)

else:

if 表达式3:

语句块4(可继续嵌套)

else:

语句块5(可继续嵌套)

3、延拓式多分支结构
326c50d2434df94f08474a99cc6fee21.png

if 表达式1:

语句块1

elif 表达式2:

语句块2

……

elif 表达式n:

语句块n

else:

语句块n+1

(二)案例演示

任务1、评定成绩等级
  • 对百分制成绩评定等级,输出评语

(100, +∞):超出范围

[90, 100]:优秀

[80, 90):良好

[70, 80):中等

[60, 70):及格

[0, 60):不及格

(-∞, 0):超出范围

方法1、采用并列式多分支结构
  • 编写程序 - 采用并列式多分支评定成绩等级.py
5286b520776e348c2b43a2a9a655b031.png

# -*- coding: utf-8 -*-64

"""

功能:采用并列式多分支评定成绩等级

"""

# 输入部分

score = float(input('成绩:'))

# 处理部分

level = ''

if score > 100:

level = '超出范围'

if score >&#61; 90 and score <&#61; 100:

level &#61; &#39;优秀&#39;

if score >&#61; 80 and score <90:

level &#61; &#39;良好&#39;

if score >&#61; 70 and score <80:

level &#61; &#39;中等&#39;

if score >&#61; 60 and score <70:

level &#61; &#39;及格&#39;

if score >&#61; 0 and score <60:

level &#61; &#39;不及格&#39;

if score <0:

level &#61; &#39;超出范围&#39;

# 输出部分

print(&#39;等级&#xff1a;{}&#39;.format(level))

  • 运行程序&#xff0c;查看结果
f077164cb3730afbcf273eaf39050835.png
  • 总结&#xff1a;并列式多分支结构&#xff0c;优点是易于理解&#xff0c;但缺点是效率低(思考一下&#xff0c;为什么效率低)。
  • 其实&#xff0c;这个程序可以作点优化&#xff0c;因为成绩大于100分或小于0分都是超出范围&#xff0c;所以可以将这两个并列得分之合而为一&#xff0c;如下图所示&#xff1a;
9e3f48c14c391e531a51f92fac72ee71.png

方法2、采用嵌套式多分支结构
  • 编写程序 - 采用嵌套式多分支评定成绩等级.py
d98384cb5ba0566efcc1be26730d9b93.png
da60a33a1bfb8b1c53c124263a8a5add.png

# -*- coding: utf-8 -*-

"""

功能&#xff1a;采用嵌套式多分支评定成绩等级

"""

# 输入部分

score &#61; float(input(&#39;成绩&#xff1a;&#39;))

# 处理部分

level &#61; &#39;&#39;

if score > 100:

level &#61; &#39;超出范围&#39;

else:

if score >&#61; 90:

level &#61; &#39;优秀&#39;

else:

if score >&#61; 80:

level &#61; &#39;良好&#39;

else:

if score >&#61; 70:

level &#61; &#39;中等&#39;

else:

if score >&#61; 60:

level &#61; &#39;及格&#39;

else:

if score >&#61; 0:

level &#61; &#39;不及格&#39;

else:

level &#61; &#39;超出范围&#39;

# 输出部分

print(&#39;等级&#xff1a;{}&#39;.format(level))

  • 运行程序&#xff0c;查看结果
4ee21c02a6743712df47bb27811272d4.png
  • 刚才是从大到小依次判断分数段&#xff0c;其实也可以反过来&#xff0c;从小到大依次判断分数段&#xff0c;如下图所示&#xff1a;
635b3345be589348b3393cae69095b43.png
9d73a3a837bef571f36090ea0573cc1f.png

# -*- coding: utf-8 -*-

"""

功能&#xff1a;采用嵌套式多分支评定成绩等级02

"""

# 输入部分

score &#61; float(input(&#39;成绩&#xff1a;&#39;))

# 处理部分

level &#61; &#39;&#39;

if score <0:

level &#61; &#39;超出范围&#39;

else:

if score <60:

level &#61; &#39;不及格&#39;

else:

if score <70:

level &#61; &#39;及格&#39;

else:

if score <80:

level &#61; &#39;中等&#39;

else:

if score <90:

level &#61; &#39;良好&#39;

else:

if score <&#61; 100:

level &#61; &#39;优秀&#39;

else:

level &#61; &#39;超出范围&#39;

# 输出部分

print(&#39;等级&#xff1a;{}&#39;.format(level))

  • 运行程序&#xff0c;查看结果
60199071f8db041aa3707546760c8cff.png
  • 总结&#xff1a;嵌套式多分支结构&#xff0c;优点是层次分明、效率高&#xff0c;但缺点是嵌套层次太多时显得很繁。

方法3、采用延拓式多分支结构
  • 编写程序 - 采用延拓式多分支评定成绩等级.py
70a1d5b535f6575030a12a3e19bdd709.png
fd7a490aba6c2dc0ff9de0223ecab0c8.png

# -*- coding: utf-8 -*-

"""

功能&#xff1a;采用延拓式多分支评定成绩等级

"""

# 输入部分

score &#61; float(input(&#39;成绩&#xff1a;&#39;))

# 处理部分

level &#61; &#39;&#39;

if score > 100:

level &#61; &#39;超出范围&#39;

elif score >&#61; 90:

level &#61; &#39;优秀&#39;

elif score >&#61; 80:

level &#61; &#39;良好&#39;

elif score >&#61; 70:

level &#61; &#39;中等&#39;

elif score >&#61; 60:

level &#61; &#39;及格&#39;

elif score >&#61; 0:

level &#61; &#39;不及格&#39;

else:

level &#61; &#39;超出范围&#39;

# 输出部分

print(&#39;等级&#xff1a;{}&#39;.format(level))

  • 运行程序&#xff0c;查看结果
6e4f7c0c563e212699c229c9231ac47f.png

刚才是从大到小依次判断分数段&#xff0c;其实也可以反过来&#xff0c;从小到大依次判断分数段&#xff0c;如下图所示&#xff1a;

06fce76e9ca949e877b7c76744263d24.png

最后&#xff0c;小编想说&#xff1a;我是一名python开发工程师&#xff0c;
整理了一套最新的python系统学习教程&#xff0c;
想要这些资料的可以关注私信小编“01”即可(免费分享哦)希望能对你有所帮助



推荐阅读
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 这篇文章主要介绍了Python拼接字符串的七种方式,包括使用%、format()、join()、f-string等方法。每种方法都有其特点和限制,通过本文的介绍可以帮助读者更好地理解和运用字符串拼接的技巧。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • WhenIusepythontoapplythepymysqlmoduletoaddafieldtoatableinthemysqldatabase,itdo ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • 本文介绍了在Python中使用FOR循环实现用户输入错误值3次后终止程序的方法。作者提到了自己对这个问题的困惑和尝试,并给出了解决方案。该方案要求代码必须包含FOR循环,但作者不确定是需要一个FOR循环还是3个FOR循环。最后,作者还给出了一些示例代码来说明如何将英里转换为公里和将英寸转换为厘米。 ... [详细]
  • 本文介绍了使用Python解析C语言结构体的方法,包括定义基本类型和结构体类型的字典,并提供了一个示例代码,展示了如何解析C语言结构体。 ... [详细]
  • 本文小编为大家详细介绍“Java中的逻辑结构模式有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java中的逻辑结构模式有哪些”文章能帮 ... [详细]
  • 流程控制之分支结构
    一. 什么是流程控制流程控制是程序代码执行的顺序。二. 事物执行流程1)顺序结构从上往下依次执行,我们之前所编写的代码都属于该结构2)分支结构事物的 ... [详细]
  • 广告关闭腾讯云11.11云上盛惠,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元࿰ ... [详细]
  • 那你就是学的c语言,跟我学c语言
    本文目录一览:1、如何学习C语言?2、新手如何 ... [详细]
author-avatar
手机用户2502936521
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有