学习python分支结构


Posted in Python onMay 17, 2019

分支结构的应用场景

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

if语句的使用

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

"""
用户身份验证

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)=\begin{cases} 3x-5&\text{(x>1)}\x+2&\text{(-1}\leq\text{x}\leq\text{1)}\5x+3&\text {(x<-1)}\end{cases}$$

"""
分段函数求值

    3x - 5 (x > 1)
f(x) = x + 2  (-1 <= x <= 1)
    5x + 3 (x < -1)

Version: 0.1
Author: 骆昊
"""

x = float(input('x = '))
if x > 1:
  y = 3 * x - 5
elif x >= -1:
  y = x + 2
else:
  y = 5 * x + 3
print('f(%.2f) = %.2f' % (x, y))

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

"""
分段函数求值
		3x - 5	(x > 1)
f(x) =	x + 2	(-1 <= x <= 1)
		5x + 3	(x < -1)

Version: 0.1
Author: 骆昊
"""

x = float(input('x = '))
if x > 1:
  y = 3 * x - 5
else:
  if x >= -1:
    y = x + 2
  else:
    y = 5 * x + 3
print('f(%.2f) = %.2f' % (x, y))

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

练习1:英制单位与公制单位互换

"""
英制单位英寸和公制单位厘米互换

Version: 0.1
Author: 骆昊
"""

value = float(input('请输入长度: '))
unit = input('请输入单位: ')
if unit == 'in' or unit == '英寸':
  print('%f英寸 = %f厘米' % (value, value * 2.54))
elif unit == 'cm' or unit == '厘米':
  print('%f厘米 = %f英寸' % (value, value / 2.54))
else:
  print('请输入有效的单位')

练习2:掷骰子决定做什么

"""
掷骰子决定做什么事情

Version: 0.1
Author: 骆昊
"""

from random import randint

face = randint(1, 6)
if face == 1:
  result = '唱首歌'
elif face == 2:
  result = '跳个舞'
elif face == 3:
  result = '学狗叫'
elif face == 4:
  result = '做俯卧撑'
elif face == 5:
  result = '念绕口令'
else:
  result = '讲冷笑话'
print(result)

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

练习3:百分制成绩转等级制

"""
百分制成绩转等级制成绩
90分以上  --> A
80分~89分  --> B
70分~79分	  --> C
60分~69分  --> D
60分以下  --> E

Version: 0.1
Author: 骆昊
"""

score = float(input('请输入成绩: '))
if score >= 90:
  grade = 'A'
elif score >= 80:
  grade = 'B'
elif score >= 70:
  grade = 'C'
elif score >= 60:
  grade = 'D'
else:
  grade = 'E'
print('对应的等级是:', grade)

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

"""
判断输入的边长能否构成三角形
如果能则计算出三角形的周长和面积

Version: 0.1
Author: 骆昊
"""

import math

a = float(input('a = '))
b = float(input('b = '))
c = float(input('c = '))
if a + b > c and a + c > b and b + c > a:
  print('周长: %f' % (a + b + c))
  p = (a + b + c) / 2
  area = math.sqrt(p * (p - a) * (p - b) * (p - c))
  print('面积: %f' % (area))
else:
  print('不能构成三角形')

练习5:个人所得税计算器。

"""
输入月收入和五险一金计算个人所得税

Version: 0.1
Author: 骆昊
"""

salary = float(input('本月收入: '))
insurance = float(input('五险一金: '))
diff = salary - insurance - 3500
if diff <= 0:
  rate = 0
  deduction = 0
elif diff < 1500:
  rate = 0.03
  deduction = 0
elif diff < 4500:
  rate = 0.1
  deduction = 105
elif diff < 9000:
  rate = 0.2
  deduction = 555
elif diff < 35000:
  rate = 0.25
  deduction = 1005
elif diff < 55000:
  rate = 0.3
  deduction = 2755
elif diff < 80000:
  rate = 0.35
  deduction = 5505
else:
  rate = 0.45
  deduction = 13505
tax = abs(diff * rate - deduction)
print('个人所得税: ¥%.2f元' % tax)
print('实际到手收入: ¥%.2f元' % (diff + 3500 - tax))
Python 相关文章推荐
Python ZipFile模块详解
Nov 01 Python
Python读取一个目录下所有目录和文件的方法
Jul 15 Python
Python:Scrapy框架中Item Pipeline组件使用详解
Dec 27 Python
Pycharm在创建py文件时,自动添加文件头注释的实例
May 07 Python
pycham查看程序执行的时间方法
Nov 29 Python
Pandas之DataFrame对象的列和索引之间的转化
Jun 25 Python
python项目对接钉钉SDK的实现
Jul 15 Python
python3 使用Opencv打开USB摄像头,配置1080P分辨率的操作
Dec 11 Python
详解基于Jupyter notebooks采用sklearn库实现多元回归方程编程
Mar 25 Python
pytorch实现查看当前学习率
Jun 24 Python
python+excel接口自动化获取token并作为请求参数进行传参操作
Nov 10 Python
Selenium浏览器自动化如何上传文件
Apr 06 Python
python pygame实现方向键控制小球
May 17 #Python
基于Numpy.convolve使用Python实现滑动平均滤波的思路详解
May 16 #Python
Python实现Linux监控的方法
May 16 #Python
计算机二级python学习教程(3) python语言基本数据类型
May 16 #Python
Python实现爬取亚马逊数据并打印出Excel文件操作示例
May 16 #Python
Python实现的文轩网爬虫完整示例
May 16 #Python
计算机二级python学习教程(2) python语言基本语法元素
May 16 #Python
You might like
Smarty模板快速入门
2007/01/04 PHP
解析php扩展php_curl.dll不加载的解决方法
2013/06/26 PHP
PHP引用符&amp;的用法详细解析
2013/08/22 PHP
destoon实现不同会员组公司名称显示不同的颜色的方法
2014/08/22 PHP
PHP接入支付宝接口失效流程详解
2020/11/10 PHP
XP折叠菜单&amp;仿QQ2006菜单
2006/12/16 Javascript
JavaScript中的私有/静态属性介绍
2012/07/26 Javascript
关于jQuery中的each方法(jQuery到底干了什么)
2014/03/05 Javascript
分享两段简单的JS代码防止SQL注入
2016/04/12 Javascript
JS如何设置cookie有效期为当天24点并弹出欢迎登陆界面
2016/08/04 Javascript
Node.js的Mongodb使用实例
2016/12/30 Javascript
JS继承与闭包及JS实现继承的三种方式
2017/10/15 Javascript
webpack多页面开发实践
2017/12/18 Javascript
在 React、Vue项目中使用SVG的方法
2018/02/09 Javascript
react中实现搜索结果中关键词高亮显示
2018/07/31 Javascript
vue2实现搜索结果中的搜索关键字高亮的代码
2018/08/29 Javascript
vue通过指令(directives)实现点击空白处收起下拉框
2018/12/06 Javascript
Python实现国外赌场热门游戏Craps(双骰子)
2015/03/31 Python
如何在Django中添加没有微秒的 DateTimeField 属性详解
2019/01/30 Python
pandas中的数据去重处理的实现方法
2020/02/10 Python
python等差数列求和公式前 100 项的和实例
2020/02/25 Python
通过css3的filter滤镜改变png图片的颜色的示例代码
2020/05/06 HTML / CSS
韩国三星旗下的一家超市连锁店:Home Plus
2016/07/30 全球购物
欧洲最大的笔和书写专家:The Pen Shop
2017/03/19 全球购物
简单说说tomcat的配置
2013/05/28 面试题
大学生毕业求职的自我评价
2013/09/29 职场文书
函授本科毕业自我鉴定
2013/10/09 职场文书
高考自主招生自荐信
2013/10/20 职场文书
小学教师国培感言
2014/02/08 职场文书
团支部建设方案
2014/05/02 职场文书
2014年护理部工作总结
2014/11/14 职场文书
2014年社区教育工作总结
2014/12/02 职场文书
酒店辞职书怎么写
2015/02/26 职场文书
2016民族团结先进个人事迹材料
2016/02/26 职场文书
CSS 新特性 contain控制页面的重绘与重排问题
2021/04/30 HTML / CSS
浅谈mysql执行过程以及顺序
2021/05/12 MySQL