004从零开始学Python—控制流
01Python控制流分类及使用规则
1.分类
Python 中的控制流语句和其他编程软件控制流相似。主要包含:
- if分支
- for循环
- while循环
2.使用规则
控制流的使用非常频繁,使用规则如下:
- 分不同情况执行不同的内容就可以使用 if 分支完成;
- 对每一个对象进行相同的操作可以使用 for 循环实现;
- 当无法确定循环的对像时,可以用while循环完成重复性的操作。
02Python控制流具体使用说明
1.if分支
if分支是用来判别某个条件是否满足所对应的执行内容,常见的分支类型有二分支类型和多分支类型。
二分支语法:
if conditionl: expression1else: expression2
三分支语法:
if conditionl: expression1elif condition2: expression2else: expression3
关于上面的语法,有如下4点需要注意:
- 对于多分支的情况,elseif在Python缩写为elif;
- 不论是关键词if,elif还是else,其所在的行末尾都必须加上英文状态的冒号;
- 在条件之后的执行语句(expression部分)都需要缩进, 而且在整个语句块中, 保持缩进风格一致;
- else 关键词后面千万不要再加上具体的条件。
2.for循环
循环的目的:一般都是为了解决重复性的工作。
优点:如果使用循环的语法,代码简洁,避免重复性无意义代码。
经验:if分支和 for 循环常配合使用。
举例1:将列表中的每个元素做平方加1处理
# 将列表中的每个元素作平方加1处理list6 = [1,5,2,8,10,13,17,4,6]
result = []for i in list6: y = i ** 2 + 1 result.append(y)print(result)out:[2, 26, 5, 65, 101, 170, 290, 17, 37
注:
- 在 for 循环之前先构造了空列result, 用于最终计算结果的存储;
- Python 中的指数运算可以使用两个星号表示, 如 3 的5 次方3**5;
- 最后通过列表append方法将每个元素计算结果依次存入result变量。
举例2:计算1到100之间的偶数和
# 计算1到100之间的偶数和s1_100 = 0for i in range(1,101): if i % 2 == 0: s1_100 = s1_100 + i else: passprint('1到100之间的偶数和为%s'%s1_100)out:1到100之间的偶数和为2550
注:
- 在进入循环之前必须定义一个变量,并将0赋给它,目的是用于和的累加;
- range 函数很方便地生成有规律的可迭代对象, 但是该函数取不到上限, 所以range 函数的第二个参数写入的是 101;
- 判断一个数值是否为偶数,就将该数值与2相除求其余数,如果余数等于0则为偶数,否则为奇数, 所以用%表示计算两个数相除的余数, 判断余数是否等于0,用双等号 ==” 表示;
- 由于计算的是偶数和,所以if分支属于二分支类型,这里只关心偶数的和,对于else直接使用关键词 pass表示忽略,当然读者也可以省略掉else:和pass两行;
- 最后的 print 输出部分使用了格式化的输出方法:
- %d代表一个整数型的坑,%s1_100就定在坑中填入的值;
- %s代表字符型的坑;;
- %f代表浮点型(小数型)的坑;
- .2f%代表保留两位小数点的浮点型坑;
- 如果有多个待填入坑, 就得指定多个填入的值, 这样的格式化输出可以写成%(值1,值2,值3)。
举例3:用更高效的列表表达式替代for循环
如果是对可迭代对象中的每一个元素做相同处理的话,不仅可以使用 for循环,还可以通过更简单的列表表达式完成。
对于列表表达式,可以写成如下语法:
[expression for i in iterable if condition]
- expression就是对每一个元素的具体操作表达式;
- iterable是某个可迭代对象, 如列表、 元组或字符串等;
- if condition 是对每一个元素做分支判断, 如果条件符合, 则expression 操作对应的元素。
# 对列表中的偶数作三次方减10的处理list7 = [3,1,18,13,22,17,23,14,19,28,16]result = [i ** 3 - 10 for i in list7 if i % 2 == 0]print(result)out:[5822, 10638, 2734, 21942, 408
注:
- 原列表 list7 中通过余数判断获得 5个偶数, 再对这些数做三次方减 10 的操作得到列表型的数据结构输出结果;
- Python 中除了有列表表达式还有元组表达式和字典表达式, 语法跟列表表达式类似, 但后两者在实际工作中不常用;
- 如果for 循环和列表表达式均可解决问题,优先选择列表表达式,因为其语法简洁,计算效率高。
3.while循环
while循环与for循环有一些相似之处,有时两者可以互换,但while循环更适合无具体迭代对象的重复性操作。
举例:当你登录某手机银行APP账号时,一旦输入错误,就会告知用户还剩几次输入机会,其限定用户只能在 N 次范围内完成正确的输入, 否则当天就无法再进行用户名和密码的输入。从1到N就是for循环的具体迭代对象;
当你在登录某邮箱账号时,输入错误的用户名或密码,只会告知“您的用户名或密码错误”, 并不会限定还有几次剩余的输入机会,所以对于这种重复性的输入操作,对方服务器不确定用户将会输入多少次才会正确,对于while 循环来说, 就相当于一 个无限次的循环, 除非用户输入正确。
while 循环在Python 中的语法表达:
while condition: if conditionl: expression1elif condition2: expression2else: expression3
注:
- 当while关键词后面的条件满足时,将会重复执行第二行开始的所有语句块。
- 一般情况下,while循环都会与if分支搭配使用。
03通过实例比较for循环与while循环
for循环:
# 使用for循环登录某手机银行APPfor i in range(1,6): user = input('请输入用户名:') password = int(input('请输入密码:')) if (user == 'test') & (password == 123): print('登录成功!') break else: if i < 5: print('错误!您今日还剩%d次输入机会。' %(5-i)) else: print('请24小时后再尝试登录!')out:请输入用户名:test请输入密码:111错误!您今日还剩4次输入机会。请输入用户名:test请输入密码:123登录成功!
while循环:
# 使用while循环登录某邮箱账号while True: user = input('请输入用户名:') password = int(input('请输入密码:')) if (user == 'test') & (password == 123): print('登录成功!') break else: print('您输入的用户名或密码错误!')out:请输入用户名:Excel知识管理请输入密码:111您输入的用户名或密码错误!请输入用户名:爱上深呼吸李强请输入密码:123您输入的用户名或密码错误!请输入用户名:test请输入密码:123登录成功!
注:
- input 函数可以实现人机交互式的输入, 一旦运行, 用户填入的任何内容都会以字符型的值赋值给user变量和password 变量, 由于实际的密码为数字 123, 因此必须将 input 函数的结果套在int函数内, 将其转换为整数型。
- 如果有多个条件,条件之间的逻辑关系不管是“且”(用&表示)还是“或”(用|表示),所的条件都必须用圆括号括起来, 否则可能会得到诡异的结果。
- 在 while 循环中, while 关键词后面直接跟上 True 值, 就表示循环将无限次执行, 正如用无限次输入错误的用户名和密码一般, 直到输入正确并碰见break关键词时才会退出循环;
- break 关键字在 Python 的循环过程中会比较常见,其功能是退出离它最近的循环系统(可能是for循环或while循环)。
- 与break类似的另一个关键字是continue,不同的是continue只是结束循环系统中的当前循环,还得继续下一轮的循环操作,并不会退出整个循环。
整体感觉:编程思想大同小异,如果你学习过C、C++、Java Script那肯定很有优势,或者哪怕只会VBA编程也没关系,知识迁移能力非常重要,类比着学习方能触类旁通。
读书笔记内容来源:刘顺祥,《从零开始学Python数据分析与挖掘》
作者公众号:数据分析1480
- 实例演示Android异步加载图片
- 使用OData协议查询Windows日志
- Android之Notification介绍
- postcss-lazysprite: 一种生成CSS 雪碧图的懒惰姿势
- Activity间中使用Intent传值
- VUE 入门基础(3)
- ASP.NET MVC 2 转换工具
- 使用Sysinternals工具定时休眠Windows Server 2008 R2
- Android中BroadcastReceiver广播
- 启用Windows 7/2008 R2 XPS Viewer
- Spring历史版本变迁和如今的生态帝国
- Android中Services之异步IntentService
- 使用GitHub搭建个人博客
- 这个用来玩儿游戏的算法,是谷歌收购DeepMind的最大原因
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Laravel 路由使用入门
- Go 数据存储篇(六):数据表之间的关联关系和关联查询
- 搭建nextcloud私有云存储网盘的教程详解
- Laravel 路由使用进阶
- 使用dig/nslookup命令查看dns解析的方法步骤
- Go 数据存储篇(七):GORM 使用入门
- 在 Linux 上使用 Multitail命令的教程
- 深入理解linux执行文件提示No such file or directory的背后原因
- Laravel 控制器:从 MVC 模式聊起
- 基于yolo5工地安全帽和禁入危险区域识别系统,附数据集
- Go 常见并发模式实现(一):调度后台处理任务的作业程序
- 路由使用进阶(二)
- linux No space left on device由索引节点(inode)爆满引发500问题
- linux中批量添加文件前缀的操作方法
- Go 常见并发模式实现(二):通过缓冲通道实现共享资源池