一、流程控制理论和必备基础知识

理论:

顾名思义就是控制程序进行的流程。

我们把流程控制分成三种结构:

1、顺序结构

根据流程的排序,从上到下依次进行。

2、分支结构

当程序运行到分支结构时,需要根据条件进行判断,符合对应的条件,就往符合条件的分支方向运行代码,如果没有符合的条件,就停止运行。

3、循环结构

当程序执行到循环结构处,我们就根据条件判断,如果条件不符合,循环结构内的代码就不用执行,直接运行后续的代码,如果符合条件就进入循环结构内。当程序一直符合循环变量内的条件,就会出现死循环,无法执行后续的代码。

当程序运行一定次数后不符合循环结构的条件后,就会退出循环,运行后续的代码。

必备基础知识:

1、在python中代码行前面如果有空格,就表示有空格(缩进)的代码更上一行代码是从属关系,但是并不是所有的代码都可以拥有从属关系的代码(子代码)。比如print就不能拥有,if、while都可以拥有。

2、如果一大批代码都想要归于同一个父代码,那么就需要所有的子代码都拥有相同的缩进量,

3、通常我们都是用tab键(四个空格)制造缩进,但是一个空格也是可以形成从属关系的。这也是一种PEP8规范。

4、当某一行代码需要一些子代码的时候,它的末尾肯定会出现一个冒号。

5、当代码执行的时候,会根据缩进量来执行,相同缩进量的代码按顺序进行即可。其他结构的代码需要根据对应的结构执行。

break、continue的用法:

break

直接停止父代码的循环和父代码外部一层的循环

#break

# 依旧是上面的例子,增加一些功能
# 先输入拥有的钱的数量
a = int(input('请输入数字'))
#这里就进行判断了,比如说我们如果在有1000块以上的时候连着玩两次就够了,不用继续玩了
while a > 500:
print('我们想去哪就去哪')
a -= 100
while a > 1000:
a -= 200
print('我们有很多钱,还能再爽一次')
break
print('有没有呢') else:
print('没钱什么都做不了')

在breake的前后加上打印语句就可以看到后面的代码有没有执行:

continue

直接从continue所在的位置去判断语句处开始下一次循环

#continue
#打印一些数字
count = 0
while count<11:
count += 1
#这里是判断count是否等于4了,如果等于4就再自增1
if count == 4: count += 1
print('执行前')
continue
print('有没有执行continue呢')
print(count)

这里我们在continue的前后加上打印语句就可以看到后面的代码有没有执行,结果如下:

二、流程控制之分支结构

分支结构就是用if语句组成的,语句中会加入需要做出判断的条件,当满足条件就会执行其中的代码,不满足条件就会跳过分支结构中的代码,顺序执行后续代码。分支结构中只会选择一条分支执行下去,同时分支结构中的条件不会重复。加入的判断语句可以用上之前学的身份运算符(is)和成员运算符(in)、逻辑运算符(and、or、not)、等于号(==)等。

if

#输入一个数字判断是否比5大
a = int(input('请输入数字'))
#当程序运行到这里会开始判断变量a的大小
if a > 5:
#当a比5大
print('该数值比5大')

if...else

顾名思义就是在做了判断后对其他选项也做一些操作

#输入一个数字判断是比5大还是比5小
a = int(input('请输入数字'))
#当程序运行到这里会开始判断变量a的大小
if a > 5:
#当a比5大
print('该数值比5大')
else:
#当a比5小
print('该数值比5小')

if...elif...else

这里就是增加一些判断方向

#这里换个例子
#吃饭
#输入有多少钱
money_have = int(input('请输入数字'))
#判断这些钱能干嘛
if money_have > 15:
print('吃的比较一般')
elif money_have > 30:
print('吃的很好')
else:
print('不够吃饭呐')

注:elif可以有多个。这里我们可以看到上文说的分支条件不会重复判断。

if的嵌套使用

#嵌套
#举个考试的例子
is_test = input('请输入是否参加了考试:') if is_test == '是':
#再判断考试成绩的等级
grade = int(input('请输入成绩'))
if grade >= 90:
print('优秀')
elif grade >= 80:
print('良好')
elif grade >= 70:
print('一般')
elif grade >= 60:
print('及格') else:
excuse = input('请输入理由')
print(excuse)
print('挂科 交钱重修')

三、流程控制之循环结构

while

当程序符合条件的时候,会一直循环while中的代码,这也是循环语句的由来。判断条件也和if一样可以用上之前学的身份运算符(is)和成员运算符(in)、逻辑运算符(and、or、not)、等于号(==)等。

# while
#这里写一个模拟人们提建议的程序
#先输入拥有的钱的数量
a = int(input('请输入数字'))
#这里就进行判断了,玩一次要花100
while a > 500:
print('我们想去哪就去哪')
a -= 100

while...else

在判断条件的同时对其他条件下的对象做出处理

# while...else
#依旧是上面的例子,增加一些功能
#先输入拥有的钱的数量
a = int(input('请输入数字'))
#这里就进行判断了,可以看成出去玩一次要花100,不足500就不能去玩了。
while a > 500:
print('我们想去哪就去哪')
a -= 100
else:
print('没钱什么都做不了')

死循环

通过昨天的学习我们知道了当while的判断条件一直符合的情况下,我们会进入死循环,当程序的运算量比较小的时候,我们并没有什么感觉,只是需要手动结束代码的运行,但是当内部的运算变复杂或是内部的数据值变得很大的时候,内存和cpu的资源会被快速被占用,如果没有提前发现并结束代码的运行,计算机就会死机,之后需要重启才能使用。现在大家用的都是笔记本,可以在死循环运行的时候明显感受到cpu在燃烧,如果把这个死循环放到服务器中,可能会出现服务器着火爆炸之类的事。

# 这里举两个例子,把数据值变的很大的死循环。
# 1、使用乘法(*),出现较慢增长的死循环。这里可能效果会不明显,可以通过更改倍数或是多开几个程序同时运行来达成目标——死机。
count_test = 10
while True:
count_test *= 2 # 2、使用乘方(**),出现数据增长较快的死循环,简称死得快。
count_test = 10
while True:
count_test **= 2

嵌套和全局标志位

嵌套

#依旧是上面的例子,增加一些功能
#先输入拥有的钱的数量
a = int(input('请输入数字'))
#这里就进行判断了
while a > 500:
#大于500就去玩
print('我们想去哪就去哪')
a -= 100
while a > 1000:
#如果大于1000就连着玩直到少于500
a -= 200
print('我们有很多钱,还能再爽一次') else:
print('没钱什么都做不了')

ps:嵌套出现的时候,只需要把对应从属关系的循环结构或是分支结构放在一起,并把他们一块块分割开研究,就可以比较清晰的得到运行顺序。

全局标志位

嵌套使用while语句的时候,while语句的判断处的判断条件都可以通过绑定变量名的方式,在满足条件时快速结束循环,而使用break时需要频繁插入break来达成结束循环的操作。代码展示在:一、break和continue的生效范围

四、循环结构之for循环

概念介绍

for循环也是循环结构的一种,但是和while不同的是,for循环并不会出现死循环,因此我们今后的使用中for会比较常见。

for循环的功能就是把一个对象中的所有数据一个个提取出来。而这个一个个提取数据的过程叫做遍历。

for循环结构:

for 变量名 in 需要遍历的对象:

​ 表达式

可以遍历的数据类型:所有可以索引取值的数据类型(字符串、列表、元组、集合)和字典的k值。

for循环中的变量名也要尽量做到见名知意,如果感觉有困难,可以用一些常见的字母或者单词表示。

1、for结构

for 变量名 in 需要遍历的对象:

​ 表达式

2、for...else结构

for 变量名 in 需要遍历的对象:

​ 表达式

else:

​ 表达式

这里的else结构和while结构下的else结构一样,都是在不能进入循环后执行一次,并不会跟着循环。

五、break和continue的生效范围

在昨天我们学习了break和continue的用法,但是昨天并没有出现很复杂的嵌套情况,而break和continue都是有生效范围的,并不能一次性结束所有的循环语句或是一次性跳到最外层的循环处。下面通过代码来具体说明:

# break和continue的生效范围是一样的
# 这里偷老师上课的代码举例,我一下想不出这么多循环的例子
# 这是一个登陆程序,这里用的事全局标志位
is_flag = True
while is_flag:
# 这里输入用户名和密码
username = input('username>>>:')
password = input('password>>>:')
if username == 'jason' and password == '123':
# 登陆成功后选择需要执行的指令,如果是‘q’就停止循环
while is_flag:
cmd = input('请输入您的指令>>>:')
if cmd == 'q':
is_flag = False
print('正在执行您的指令:%s' % cmd)
else:
print('用户名或密码错误') # 这里用的是break方法
is_flag = True
while True:
# 这里输入用户名和密码
username = input('username>>>:')
password = input('password>>>:')
if username == 'jason' and password == '123':
# 登陆成功后选择需要执行的指令,如果是‘q’就停止循环
while True:
cmd = input('请输入您的指令>>>:')
if cmd == 'q':
break
print('正在执行您的指令:%s' % cmd)
break
else:
print('用户名或密码错误')

这里我们可以明显看到运行的时候,使用全局标志位只需要更改一下变量就能停止循环,但是使用break方法的时候需要连续的插入break,如果循环太多,很容易把人绕迷糊。

六、range方法

1、介绍

range方法起一个把输入的范围内,所有的整数都放到一个列表中的作用。但是range方法顾头不顾尾,最后的结尾不取。

ps:通过功能,我们可以知道通常range都是和for循环配合使用的。

2、不同版本中range方法的区别:

python2:

分为range和xrange两种

其中range就是把数据直接生成一个列表并把所有的数据值放进列表中。

而xrange就是在内存中生成一个类似工厂的东西,平时不会占用很大空间,当代码运行的时候需要用到xrange生成的列表的时候,才会开始工作,相对range节省内存空间。

python3:

python3中只有range这一种表达方式,但是作用是和python2中的xrange一样的。

通常来说有三种表达方式:

1、range(数值)

for i in range(100):
print(i)
# 这里就是打印从0开始,到99为止的100个数字

2、range(起始数值,结束数值)

for i in range(10,100):
print(i)
# 这里就是打印从10开始,到99为止的数字

3、range(起始数值,结束数值,间隔数值)

for i in range(10,100,2):
print(i)
# 这里就是打印从10开始,到99为止的数字,但是每隔两个数字打印一次。

3、实际应用:

主要应用在爬虫领域中,代码的世界中都是比较有规律可循的,所以range方法会大大方便我们查找。

举例:

在一些普通的网页中,我们可以发现网址是有规律的,我们这样通过这种方式,在数据值很多的时候获得所有的网址。

# 这里是博客园的不同页面的网址,我们可以找到规律就是自增1,而第一个没有显示p1。
但是我们可以大胆的去试试在网址后加上p1会不会跳到第一页去,毕竟代码都是有很强的逻辑性的,结果确实是可行的。
https://www.cnblogs.com/
https://www.cnblogs.com/#p2
https://www.cnblogs.com/#p3
https://www.cnblogs.com/#p4

但是也不是所有的网页都可以用这种方法获取,有一些网页会使用js文件产生动态编码的表达方式。

四、流程控制和break、continue、range函数的讲解的更多相关文章

  1. Java流程控制06——break continue

  2. JAVA之旅(二)——if,switch,for,while,do while,语句嵌套,流程控制break , continue ,函数,重载的示例总结

    JAVA之旅(二)--if,switch,for,while,do while,语句嵌套,流程控制break , continue ,函数,重载的示例总结 JAVA的思想真的很重要,所以要专心的学-- ...

  3. Java 关键字、标识符、注释、常量与变量、数据类型,算术、赋值、比较、逻辑、位、三元运算符和流程控制、break、continue【3】

    若有不正之处,请多多谅解并欢迎批评指正,不甚感激.请尊重作者劳动成果: 本文原创作者:pipi-changing本文原创出处:http://www.cnblogs.com/pipi-changing/ ...

  4. 大一C语言学习笔记(6)---自省篇--流程控制;break,continue,return间的异同;数组应用到循环语句中需要注意的问题;++i 和 i++的异同等。

    下面是傻瓜博主"曾经"犯过的错和一些心得:        ༼ つ ◕_◕ ༽つ 1.要想流程控制学好,一定要学会化繁为简,举栗子: 三目运算符 (略?略:略)---就是一个数字嘛, ...

  5. python基础--程序交互、格式化输出、流程控制、break、continue

    在此申明一下,博客参照了https://www.cnblogs.com/jin-xin/,自己做了部分的改动 (1) 程序交互 #!/usr/bin/env python # -*- coding: ...

  6. C 碎片四 流程控制

    前面介绍了程序中用到的一些基本要素(常量,变量,运算符,表达式),他们是构成程序的基本成分,下面将介绍C语言中流程控制的三种结构:顺序结构.分支结构.循环结构 一.顺序结构 顺序结构的程序设计是最简单 ...

  7. java 基础知识四 流程控制

    java   基础知识四 流程控制 Java流程控制包括顺序控制.条件控制和循环控制 顺序控制就是逐条执行 有if和switch两个分支 循环控制就是 又称为回路控制,根据循环初始条件和终结要求,执行 ...

  8. 【Shell 编程基础第二部分】Shell里的流程控制、Shell里的函数及脚本调试方法!

    http://blog.csdn.net/xiaominghimi/article/details/7603003 本站文章均为李华明Himi原创,转载务必在明显处注明:转载自[黑米GameDev街区 ...

  9. 5、前端--js常量、变量、5种基本数据类型(number string boolean undefined object)、运算符、流程控制、三元运算符、函数、自定义对象、内置对象、BOM操作

    变量与常量 在JS中声明变量需要使用关键字 老版本 var(全部都是全局变量) 新版本 let(可以声明局部变量) # 推荐使用let(其实问题不大) 在JS中声明常量也需要使用关键字 const # ...

  10. Postman高级应用——流程控制、调试、公共函数、外部数据文件

    postman客户端下载地址:https://www.getpostman.com/apps 目录 流程控制 调试 公共函数 外部数据文件 流程控制 流程控制简言之就是设置接口的执行顺序,流程控制只有 ...

随机推荐

  1. shardingsphere-jdbc 水平分表学习记录

    放在自己博客里搬过来一份~ 前司使用的是自己魔改的TDDL,在家时间比较多就尝试学一些业内比较常用的中间件. 这里记录一下学习中遇到的一些问题. 环境 设置的比较简单(太懒了就测试了几个表), 两个分 ...

  2. el-select实现下拉框触底加载更多

    当下拉框需要展示的数据有很多时,几千甚至上万条,一次性全部请求回来再按照特定格式比如 id-name 去处理数据的话,不论是从接口还是前端,这个性能都不是很好,会造成下拉框初次打开时响应很慢,影响用户 ...

  3. 如何理解Java中眼花缭乱的各种并发锁?

    在互联网公司面试中,很多小伙伴都被问到过关于锁的问题. 今天,我给大家一次性把Java并发锁的全家桶彻底讲明白.包括互斥锁.读写锁.重入锁.公平锁.悲观锁.自旋锁.偏向锁等等等等.视频有点长,大家一定 ...

  4. 第2-3-2章 环境搭建-文件存储服务系统-nginx/fastDFS/minio/阿里云oss/七牛云oss

    目录 5. 文件服务开发 5.1 环境搭建 5.1.1 数据库环境搭建 5.1.2 Nacos环境搭建 5.1.3 Nginx环境搭建 5.1.4 maven工程环境搭建 5. 文件服务开发 全套代码 ...

  5. IIS 配置集中式证书模块实现网站自动绑定证书文件

    在 Windows 环境下如果采用 IIS 作为 网站服务器时,常规的网站绑定 HTTPS 需要一个一个站点手动选择对应的证书绑定,而且证书过期之后更换证书时也是需要一个个重新绑定操作,无法便捷的做到 ...

  6. Go语言核心36讲43-----io包中接口的好处与优势

    上一篇文章中,我主要讲到了io.Reader的扩展接口和实现类型.当然,io代码包中的核心接口不止io.Reader一个. 我们基于它引出的一条主线,只是io包类型体系中的一部分.我们很有必要再从另一 ...

  7. day18-web工程路径

    web工程路径 配置tomcat运行快捷键 tomcat启动的默认快捷键时shift+f10,可以自定义配置:file-setting-keymap-搜索run,找到右边写有shift+f10的选项, ...

  8. Spark通过打jar包形式提交任务

    idea构建项目 创建一个maven项目,配置pom依赖,以及scala编译插件. 注意一定要保证,你的scala版本和spark版本和要提交的集群版本一致,要不很多莫名其妙的问题,scala如果你在 ...

  9. 关于C++ find

    #include <bits/stdc++.h> using namespace std; int a[1005]; int main() { for(int i = 0;i < 1 ...

  10. 在CentOS编译Git源码

    Git 是一个免费的开源分布式版本控制系统,旨在处理从小到小到的所有内容 具有速度和效率的超大型项目. Git易于学习,占用空间很小,性能快如闪电. 它超越了Subversion,CVS,Perfor ...