学习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之一个免费的实验室
Sep 14 Python
python入门:这篇文章带你直接学会python
Sep 14 Python
pandas.dataframe按行索引表达式选取方法
Oct 30 Python
Python英文文本分词(无空格)模块wordninja的使用实例
Feb 20 Python
python爬取酷狗音乐排行榜
Feb 20 Python
python实现字符串加密成纯数字
Mar 19 Python
Python Pandas数据结构简单介绍
Jul 03 Python
详解python中eval函数的作用
Oct 22 Python
python如何运行js语句
Sep 09 Python
python压包的概念及实例详解
Feb 17 Python
Python爬虫入门案例之爬取二手房源数据
Oct 16 Python
Python turtle编写简单的球类小游戏
Mar 31 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 date与gmdate的获取日期的区别
2010/02/08 PHP
php绘制一条直线的方法
2015/01/24 PHP
Yii2中DropDownList简单用法示例
2016/07/18 PHP
php中替换字符串函数strtr()和str_repalce()的用法与区别
2016/11/25 PHP
在网页中屏蔽快捷键
2006/09/06 Javascript
JS简单实现元素复制示例附图
2013/11/19 Javascript
javascript关于运动的各种问题经典总结
2015/04/27 Javascript
纯js实现仿QQ邮箱弹出确认框
2015/04/29 Javascript
详解JavaScript对象类型
2016/06/16 Javascript
Bootstrap3制作搜索框样式的方法
2016/07/11 Javascript
JavaScript鼠标特效大全
2016/09/13 Javascript
javascript数组拍平方法总结
2018/01/20 Javascript
新版小程序登录授权的方法
2018/12/12 Javascript
详解mpvue中小程序自定义导航组件开发指南
2019/02/11 Javascript
vue父子组件通信的高级用法示例
2019/08/29 Javascript
解决antd datepicker 获取时间默认少8个小时的问题
2020/10/29 Javascript
vue的webcamjs集成方式
2020/11/16 Javascript
[56:48]FNATIC vs EG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python实现端口转发器的方法
2015/03/13 Python
python迭代器与生成器详解
2016/03/10 Python
Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)
2016/09/21 Python
在python中获取div的文本内容并和想定结果进行对比详解
2019/01/02 Python
Python多线程及其基本使用方法实例分析
2019/10/29 Python
python三引号如何输入
2020/07/06 Python
任意一块网页内容实现“活”的背景(目前火狐浏览器专有)
2014/05/07 HTML / CSS
使用CSS3编写灰阶滤镜来制作黑白照片效果的方法
2016/05/09 HTML / CSS
C语言50道问题
2014/10/23 面试题
建筑工程自我鉴定
2013/10/18 职场文书
《胖乎乎的小手》教学反思
2014/02/26 职场文书
终止合同协议书
2014/04/17 职场文书
中国梦口号
2014/06/13 职场文书
幼儿园法制宣传日活动总结
2014/11/01 职场文书
党风廉正建设个人工作总结
2015/03/06 职场文书
2015小学教师年度工作总结
2015/05/12 职场文书
三八节活动主持词
2015/07/04 职场文书
Go web入门Go pongo2模板引擎
2022/05/20 Golang