学习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脚本实现网卡流量监控
Feb 14 Python
Python实现在线暴力破解邮箱账号密码功能示例【测试可用】
Sep 06 Python
Python基于csv模块实现读取与写入csv数据的方法
Jan 18 Python
人脸识别经典算法一 特征脸方法(Eigenface)
Mar 13 Python
python 日期操作类代码
May 05 Python
python处理数据,存进hive表的方法
Jul 04 Python
Python实现钉钉发送报警消息的方法
Feb 20 Python
python生成requirements.txt的两种方法
Sep 18 Python
Python算法的时间复杂度和空间复杂度(实例解析)
Nov 19 Python
Python object类中的特殊方法代码讲解
Mar 06 Python
如何理解python中数字列表
May 29 Python
Python学习之os包使用教程详解
Mar 21 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
PHP数据流应用的一个简单实例
2012/09/14 PHP
PHP中的生成XML文件的4种方法分享
2012/10/06 PHP
PHP遍历某个目录下的所有文件和子文件夹的实现代码
2013/06/28 PHP
php树型类实例
2014/12/05 PHP
PHP实现的多维数组去重操作示例
2018/07/21 PHP
javascript parseInt与Number函数的区别
2010/01/21 Javascript
url 编码 js url传参中文乱码解决方案
2010/04/11 Javascript
JS控制弹出新页面窗口位置和大小的方法
2015/03/02 Javascript
基于jquery实现表格无刷新分页
2016/01/07 Javascript
Javascript中的arguments对象
2016/06/20 Javascript
浅谈Cookie的生命周期问题
2016/08/02 Javascript
详解用vue-cli来搭建vue项目和webpack
2017/04/20 Javascript
ES6新特性之类(Class)和继承(Extends)相关概念与用法分析
2017/05/24 Javascript
详解使用webpack打包编写一个vue-toast插件
2017/11/08 Javascript
Angular实现点击按钮后在上方显示输入内容的方法
2017/12/27 Javascript
原生JS实现网页手机音乐播放器 歌词同步播放的示例
2018/02/02 Javascript
解决Webpack 热部署检测不到文件变化的问题
2018/02/22 Javascript
Node.js使用Angular简单示例
2018/05/11 Javascript
Webpack 4如何动态切割JS注入文件名详解
2019/07/09 Javascript
谈谈JavaScript中的函数
2020/09/08 Javascript
vue 函数调用加括号与不加括号的区别
2020/10/29 Javascript
Python 对输入的数字进行排序的方法
2018/06/23 Python
python 获取utc时间转化为本地时间的方法
2018/12/31 Python
ubuntu 16.04下python版本切换的方法
2019/06/14 Python
python字典的遍历3种方法详解
2019/08/10 Python
使用python实现希尔、计数、基数基础排序的代码
2019/12/25 Python
python 截取XML中bndbox的坐标中的图像,另存为jpg的实例
2020/03/10 Python
Keras保存模型并载入模型继续训练的实现
2021/02/20 Python
使用HTML5进行SVG矢量图形绘制的入门教程
2016/02/19 HTML / CSS
生物工程专业求职信
2014/09/03 职场文书
树转促学习心得体会
2014/09/10 职场文书
安全生产月宣传标语
2014/10/06 职场文书
2015年度工程师评职称工作总结
2015/10/14 职场文书
五年级作文之劳动作文
2019/11/12 职场文书
pytorch中的model=model.to(device)使用说明
2021/05/24 Python
Spring Security动态权限的实现方法详解
2022/06/16 Java/Android