学习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实现登陆知乎获得个人收藏并保存为word文件
Mar 16 Python
Python常用小技巧总结
Jun 01 Python
python获取一组汉字拼音首字母的方法
Jul 01 Python
python使用clear方法清除字典内全部数据实例
Jul 11 Python
Python3中的json模块使用详解
May 05 Python
基于Python在MacOS上安装robotframework-ride
Dec 28 Python
自学python的建议和周期预算
Jan 30 Python
Django后台admin的使用详解
Jul 08 Python
python爬虫 正则表达式解析
Sep 28 Python
在vscode中配置python环境过程解析
Sep 28 Python
Python统计时间内的并发数代码实例
Dec 28 Python
Python3 搭建Qt5 环境的方法示例
Jul 16 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
dedecms 制作模板中使用的全局标记图文教程
2007/03/11 PHP
php 无限极分类
2008/03/27 PHP
php安全配置 如何配置使其更安全
2011/12/16 PHP
php生成图形(Libchart)实例
2013/11/06 PHP
基于thinkPHP实现的微信自定义分享功能示例
2016/09/23 PHP
Laravel 集成 Geetest验证码的方法
2018/05/14 PHP
Laravel框架控制器的middleware中间件用法分析
2019/09/30 PHP
css3实现背景模糊的三种方式
2021/03/09 HTML / CSS
jQuery的attr与prop使用介绍
2013/10/10 Javascript
javascript中的事件代理初探
2014/03/08 Javascript
JSP中使用JavaScript动态插入删除输入框实现代码
2014/06/13 Javascript
javascript实现了照片拖拽点击置顶的照片墙代码
2015/04/03 Javascript
jQuery的css() 方法使用指南
2015/05/03 Javascript
详解jQuery向动态生成的内容添加事件响应jQuery live()方法
2015/11/02 Javascript
React-Router如何进行页面权限管理的方法
2017/12/06 Javascript
AngularJS使用ui-route实现多层嵌套路由的示例
2018/01/10 Javascript
小程序组件之自定义顶部导航实例
2019/06/12 Javascript
layui select 禁止点击的实现方法
2019/09/05 Javascript
JS可断点续传文件上传实现代码解析
2020/07/30 Javascript
老生常谈python函数参数的区别(必看篇)
2017/05/29 Python
Numpy中转置transpose、T和swapaxes的实例讲解
2018/04/17 Python
pyspark 读取csv文件创建DataFrame的两种方法
2018/06/07 Python
对Python中的条件判断、循环以及循环的终止方法详解
2019/02/08 Python
Python实现将元组中的元素作为参数传入函数的操作
2020/06/05 Python
巧用CSS3的calc()宽度计算做响应模式布局的方法
2018/03/22 HTML / CSS
StubHub美国:购买或出售您的门票
2019/07/09 全球购物
某公司C#程序员面试题笔试题
2014/05/26 面试题
大专生工程监理求职信
2013/10/04 职场文书
内科护士实习自我鉴定
2013/10/17 职场文书
争做文明公民倡议书
2014/08/29 职场文书
2014年驾驶员工作总结
2014/11/18 职场文书
春秋淹城导游词
2015/02/11 职场文书
高考升学宴主持词
2019/06/21 职场文书
浅谈Python类的单继承相关知识
2021/05/12 Python
CSS3实现列表无限滚动/轮播效果
2021/06/23 HTML / CSS
在容器中使用nginx搭建上传下载服务器
2022/05/11 Servers