3.3 循环结构
3.3.1 range()函数
🚩我们在介绍循环结构之前,首先介绍一个函数:range(),这个函数的作用是可以用它来生成一个整数的序列,range() 函数的返回对象是一个迭代器对象 (这里无须知道什么是迭代器对象,知道range()函数可以产生一连串的整数序列即可),关于range() 函数,这里介绍其使用的三种方法:
range的使用 | 具体解释说明 |
range(strop) | 创造一个[0, stop)的整数序列,序列中相邻两数的差为1 |
range(start, stop) | 创造一个[start, stop)的整数序列,序列中相邻两数的差为1 |
range(start, stop, step) | 创造一个[start, stop)的整数序列,序列中相邻两数的差为step |
我们把序列中相邻两数之间的差称为:步长,注意以上的范围均是左闭右开型,下面我们用代码去讲解我们的range():
# 博主:辰chen # 博客地址:https://chen-ac.blog.csdn.net/ # 开发时间:2021/12/8 15:36 # 欢迎大家关注AIoT相关博客~ a = range(10) print(a)
我们可以看到输出的结果为:range(0, 10)
,这就是所谓的迭代器,我们知道,range返回的应该是一连串的数,但我们不可能把这一连串的数全部存到一个变量a之中,故我们可以调用list(),就可以查看我们的rang()产生的这一连串的数字,关于 list(),后续会重点进行讲解,读者此时把它理解成为一个可以把 range() 中产生的数全部显示出来即可:
# 博主:辰chen # 博客地址:https://chen-ac.blog.csdn.net/ # 开发时间:2021/12/8 15:36 # 欢迎大家关注AIoT相关博客~ # range() 的第一种用法: range(stop) a = range(10) print(list(a)) # range() 的第二种用法: range(start, stop) b = range(5, 10) print(list(b)) # range() 的第三种用法: range(start, stop, step) c = range(2, 10, 2) print(list(c))
我们还可以使用 2.4.4 布尔运算符 中所讲过的 in
和 not in
去判断序列中是否存在我们规定的整数,代码如下:
print(1 in range(1, 10, 2)) print(2 not in range(1, 10, 2))
这里再来介绍一下 range() 的优点,我们知道,我们在创建变量的时候,对应的是创造的过程,一旦有东西被创造出来了,那么它一定是占用了一定的资源空间的,我们人类的出生占用的是地球的资源和空间,那么一个变量创造就会占用计算机内存的空间,故如果我们想要创造一个 [10, 100) 这个范围内的所有偶数的话,我们可以开辟很多个变量,然后每一个变量都对应一个值,这显然会占用很大的内存空间,我们还可以采用 range() 函数,我们在用a = range(10, 100, 2)的时候,相当于是创造了一个 range() 的迭代器,或者你可以理解成,我们创造了 [10, 100) 内的所有偶数的一个压缩文件,并用 a 指向这个文件,我们的压缩文件其实只是存储了start, stop, step三个值,并没有存储所有的偶数,对应到这个例子之中相当于我们在进行a = range(10, 100, 2)
这个操作的时候,只存储了10, 100, 2
这三个数,这样显然是比开一堆变量分别存储偶数是要省空间的,那么什么时候 “解压” 这个 range() 呢?当我们要用它的时候,才会对它 “解压”,就单独说存储而言,我们在调用 range() 函数的时候只存储了start stop step
3.3.2 while循环
🚩什么是循环?反复的做着相同的任务就叫做循环,我们如果要打印一行hello world
,那么只需要写出print('hello world')
即可,,但是如果我们要打印 10 行hello world怎么办呢?你可能会回答到:在原有的代码基础上直接 Ctrl c + Ctrl v 九次不就好啦嘛,那么打印 100 次,1000 次呢?你可能会回答到:没有人会闲到打印 1000 次的 hello world,咳咳咳,你真是个小聪明😒 (不管你,反正我就要讲while循环!!!
while循环的语法结构如下:
while 条件表达式: 执行语句(循环体)
while循环的语法如上述所示,条件表达式后面的:不可以省略,它是循环开始的象征,并且执行语句必须进行相应的缩进(一个Tab键的距离【4个空格】),代码所表达的意思就是,如果 条件表达式成立【bool值为True】,就执行语句的内容
while 循环和 if 的区别:if 循环如果条件表达式为 True 的话,会执行一次执行语句,while 循环的话,当条件表达式为 True 后会执行一次执行语句,执行完成之后再次返回条件表达式,如果还为 True,那么会再次执行执行语句,直至条件表达式的值为 False,从这里我们也可以看出,如果执行语句执行了 n 次的话,那么我们的条件表达式会执行 n+1 次(最后一次执行表达式值为False,不执行执行语句而是退出循环)
为了强化大家对while的理解,这里讲一个例题:经典高斯求和问题:求出 1 + … + 100 的值
# 博主:辰chen # 博客地址:https://chen-ac.blog.csdn.net/ # 开发时间:2021/12/8 16:26 # 欢迎大家关注AIoT相关博客~ a, res = 1, 0 while a <= 100: res += a a += 1 print(res)
3.3.3 for循环
🚩for 循环和 while 循环的思想是一样的,可以理解成循环的又一种表达形式,for循环的语法结构如下:
for 自定义的变量 in 可迭代对象: 循环体
for循环的语法如上述所示,条件表达式后面的:不可以省略,它是循环开始的象征,并且执行语句必须进行相应的缩进(一个Tab键的距离【4个空格】),代码所表达的意思就是,如果 条件表达式成立【bool值为True】,就执行语句的内容
我们来依次介绍几个知识点:
可迭代对象:对于现在而言,我们的可迭代对象只有两个:range() 以及字符串,后续我们还会介绍更多的可迭代对象;
自定义的变量:说白了就是给起一个变量名,然后把可迭代对象里面的值依次逐个赋值给自定义的变量
遍历:我们以后会常见到遍历这个名词,它的意思就是我们依次从可迭代对象中取值,直至取值操作结束为止
下面我们来用代码去介绍for循环,还是和while循环中一样的问题:高斯求和
# 博主:辰chen # 博客地址:https://chen-ac.blog.csdn.net/ # 开发时间:2021/12/8 16:59 # 欢迎大家关注AIoT相关博客~ res = 0 for item in range(1, 101): res += item print(res)
根据代码去理解for循环:我们可以看到,对于上述代码,for循环所遍历的对象为:range(1, 101),即当我们遍历到 100 的时候,for 循环就会停止,在遍历的过程中,我们把 range 中产生的数依次赋值给了 item(当然我们可以任意去给它取名,一般习惯起名为 item),我们根据上述也可以看出,在我们计算 1 + … + 100 的时候,既可以使用while也可以使用for,故其实我们的 for 和 while 没有本质上的区别,它们之间是可以相互转换的