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

python系列之分支结构

朋友们,我是床长!如需转载请标明出处:http:blog.csdn.netjiangjunshow分支结构分支结构的应用场景迄今为止,

朋友们,我是床长! 如需转载请标明出处:http://blog.csdn.net/jiangjunshow

分支结构


分支结构的应用场景

迄今为止,我们写的Python代码都是一条一条语句顺序执行,这种结构的代码我们称之为顺序结构。然而仅有顺序结构并不能解决所有的问题,比如我们设计一个游戏,游戏第一关的通关条件是玩家获得1000分,那么在完成本局游戏后我们要根据玩家得到分数来决定究竟是进入第二关还是告诉玩家“Game Over”,这里就会产生两个分支,而且这两个分支只有一个会被执行,这就是程序中分支结构。类似的场景还有很多,给大家一分钟的时间,你应该可以想到至少5个以上这样的例子,赶紧试一试。

if语句的使用

在Python中,要构造分支结构可以使用ifelifelse关键字。所谓关键字就是有特殊含义的单词,像ifelse就是专门用于构造分支结构的关键字,很显然你不能够使用它作为变量名(事实上,用作其他的标识符也是不可以)。下面的例子中演示了如何构造一个分支结构。

"""
用户身份验证Version: 0.1
Author: 骆昊
"""username = input('请输入用户名: ')
password = input('请输入口令: ')
# 如果希望输入口令时 终端中没有回显 可以使用getpass模块的getpass函数
# import getpass
# password = getpass.getpass('请输入口令: ')
if username == 'admin' and password == '123456':print('身份验证成功!')
else:print('身份验证失败!')

唯一需要说明的是和C/C++、Java等语言不同,Python中没有用花括号来构造代码块而是使用了缩进的方式来设置代码的层次结构,如果if条件成立的情况下需要执行多条语句,只要保持多条语句具有相同的缩进就可以了,换句话说连续的代码如果又保持了相同的缩进那么它们属于同一个代码块,相当于是一个执行的整体。

当然如果要构造出更多的分支,可以使用if…elif…else…结构,例如下面的分段函数求值。

 

$$f(x)&#61;\begin{cases} 3x-5&\text{(x>1)}\\x&#43;2&\text{(-1}\leq\text{x}\leq\text{1)}\\5x&#43;3&\text {(x<-1)}\end{cases}$$

 

 

"""
分段函数求值3x - 5 (x > 1)
f(x) &#61; x &#43; 2 (-1 <&#61; x <&#61; 1)5x &#43; 3 (x <-1)Version: 0.1
Author: 骆昊
"""x &#61; float(input(&#39;x &#61; &#39;))
if x > 1:y &#61; 3 * x - 5
elif x >&#61; -1:y &#61; x &#43; 2
else:y &#61; 5 * x &#43; 3
print(&#39;f(%.2f) &#61; %.2f&#39; % (x, y))

当然根据实际开发的需要&#xff0c;分支结构是可以嵌套的&#xff0c;例如判断是否通关以后还要根据你获得的宝物或者道具的数量对你的表现给出等级&#xff08;比如点亮两颗或三颗星星&#xff09;&#xff0c;那么我们就需要在if的内部构造出一个新的分支结构&#xff0c;同理elifelse中也可以再构造新的分支&#xff0c;我们称之为嵌套的分支结构&#xff0c;也就是说上面的代码也可以写成下面的样子。

"""
分段函数求值3x - 5 (x > 1)
f(x) &#61; x &#43; 2 (-1 <&#61; x <&#61; 1)5x &#43; 3 (x <-1)Version: 0.1
Author: 骆昊
"""x &#61; float(input(&#39;x &#61; &#39;))
if x > 1:y &#61; 3 * x - 5
else:if x >&#61; -1:y &#61; x &#43; 2else:y &#61; 5 * x &#43; 3
print(&#39;f(%.2f) &#61; %.2f&#39; % (x, y))

说明&#xff1a; 大家可以自己感受一下这两种写法到底是哪一种更好。在之前我们提到的Python之禅中有这么一句话“Flat is better than nested.”&#xff0c;之所以提出这个观点是因为嵌套结构的嵌套层次多了之后会严重的影响代码的可读性&#xff0c;如果可以使用扁平化的结构就不要去用嵌套&#xff0c;因此之前的写法是更好的做法。


练习

练习1&#xff1a;英制单位与公制单位互换

"""
英制单位英寸和公制单位厘米互换Version: 0.1
Author: 骆昊
"""value &#61; float(input(&#39;请输入长度: &#39;))
unit &#61; input(&#39;请输入单位: &#39;)
if unit &#61;&#61; &#39;in&#39; or unit &#61;&#61; &#39;英寸&#39;:print(&#39;%f英寸 &#61; %f厘米&#39; % (value, value * 2.54))
elif unit &#61;&#61; &#39;cm&#39; or unit &#61;&#61; &#39;厘米&#39;:print(&#39;%f厘米 &#61; %f英寸&#39; % (value, value / 2.54))
else:print(&#39;请输入有效的单位&#39;)

练习2&#xff1a;掷骰子决定做什么

"""
掷骰子决定做什么事情Version: 0.1
Author: 骆昊
"""from random import randintface &#61; randint(1, 6)
if face &#61;&#61; 1:result &#61; &#39;唱首歌&#39;
elif face &#61;&#61; 2:result &#61; &#39;跳个舞&#39;
elif face &#61;&#61; 3:result &#61; &#39;学狗叫&#39;
elif face &#61;&#61; 4:result &#61; &#39;做俯卧撑&#39;
elif face &#61;&#61; 5:result &#61; &#39;念绕口令&#39;
else:result &#61; &#39;讲冷笑话&#39;
print(result)

说明&#xff1a; 上面的代码中使用了random模块的randint函数生成指定范围的随机数来模拟掷骰子。

练习3&#xff1a;百分制成绩转等级制

"""
百分制成绩转等级制成绩
90分以上 --> A
80分~89分 --> B
70分~79分 --> C
60分~69分 --> D
60分以下 --> EVersion: 0.1
Author: 骆昊
"""score &#61; float(input(&#39;请输入成绩: &#39;))
if score >&#61; 90:grade &#61; &#39;A&#39;
elif score >&#61; 80:grade &#61; &#39;B&#39;
elif score >&#61; 70:grade &#61; &#39;C&#39;
elif score >&#61; 60:grade &#61; &#39;D&#39;
else:grade &#61; &#39;E&#39;
print(&#39;对应的等级是:&#39;, grade)

练习4&#xff1a;输入三条边长如果能构成三角形就计算周长和面积

"""
判断输入的边长能否构成三角形
如果能则计算出三角形的周长和面积Version: 0.1
Author: 骆昊
"""import matha &#61; float(input(&#39;a &#61; &#39;))
b &#61; float(input(&#39;b &#61; &#39;))
c &#61; float(input(&#39;c &#61; &#39;))
if a &#43; b > c and a &#43; c > b and b &#43; c > a:print(&#39;周长: %f&#39; % (a &#43; b &#43; c))p &#61; (a &#43; b &#43; c) / 2area &#61; math.sqrt(p * (p - a) * (p - b) * (p - c))print(&#39;面积: %f&#39; % (area))
else:print(&#39;不能构成三角形&#39;)

说明&#xff1a; 上面的代码中使用了math模块的sqrt函数来计算平方根。用边长计算三角形面积的公式叫做海伦公式。

练习5&#xff1a;个人所得税计算器。

"""
输入月收入和五险一金计算个人所得税Version: 0.1
Author: 骆昊
"""salary &#61; float(input(&#39;本月收入: &#39;))
insurance &#61; float(input(&#39;五险一金: &#39;))
diff &#61; salary - insurance - 3500
if diff <&#61; 0:rate &#61; 0deduction &#61; 0
elif diff <1500:rate &#61; 0.03deduction &#61; 0
elif diff <4500:rate &#61; 0.1deduction &#61; 105
elif diff <9000:rate &#61; 0.2deduction &#61; 555
elif diff <35000:rate &#61; 0.25deduction &#61; 1005
elif diff <55000:rate &#61; 0.3deduction &#61; 2755
elif diff <80000:rate &#61; 0.35deduction &#61; 5505
else:rate &#61; 0.45deduction &#61; 13505
tax &#61; abs(diff * rate - deduction)
print(&#39;个人所得税: &#xffe5;%.2f元&#39; % tax)
print(&#39;实际到手收入: &#xffe5;%.2f元&#39; % (diff &#43; 3500 - tax))

说明&#xff1a; 上面的代码中使用了Python内置的abs()函数取绝对值来处理-0的问题。


推荐阅读
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 尽管使用TensorFlow和PyTorch等成熟框架可以显著降低实现递归神经网络(RNN)的门槛,但对于初学者来说,理解其底层原理至关重要。本文将引导您使用NumPy从头构建一个用于自然语言处理(NLP)的RNN模型。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 毕业设计:基于机器学习与深度学习的垃圾邮件(短信)分类算法实现
    本文详细介绍了如何使用机器学习和深度学习技术对垃圾邮件和短信进行分类。内容涵盖从数据集介绍、预处理、特征提取到模型训练与评估的完整流程,并提供了具体的代码示例和实验结果。 ... [详细]
  • 实体映射最强工具类:MapStruct真香 ... [详细]
  • 微软Exchange服务器遭遇2022年版“千年虫”漏洞
    微软Exchange服务器在新年伊始遭遇了一个类似于‘千年虫’的日期处理漏洞,导致邮件传输受阻。该问题主要影响配置了FIP-FS恶意软件引擎的Exchange 2016和2019版本。 ... [详细]
  • 优化局域网SSH连接延迟问题的解决方案
    本文介绍了解决局域网内SSH连接到服务器时出现长时间等待问题的方法。通过调整配置和优化网络设置,可以显著缩短SSH连接的时间。 ... [详细]
  • 本文介绍如何在Linux Mint系统上搭建Rust开发环境,包括安装IntelliJ IDEA、Rust工具链及必要的插件。通过详细步骤,帮助开发者快速上手。 ... [详细]
author-avatar
wyyxit
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有