- 本教程为python3文档解读
- 本教程面向完全型小白,只要你会在电脑上打字,那你就可以看懂。
- 参考视频观看,味道更加:https://space.bilibili.com/186584185/#!/video
- 建议优先阅读本系列的《编程的本质》这一章节。
贯穿始终的理念:别废话,就是干!
往期回顾:
- 分片
- 索引
- 对象
- 字符串为什么是特殊的列表?
- if语句
文档解读
python3文档第四小节链接地址:4. More Control Flow Tools
本章主要讲解4.2. for Statements(for语句)和4.3. The range( ) Function(range()函数)这个小节
上一期我们讲了if语句,知道他是分支判断语句。
这期,我们讲解for语句,他是循环语句。
依旧用举例的方式来说明。
假如你是一个清洁工,你的老板让你到如下人家去打扫房间。
张三家、李四家、王二麻子家、小明家。
并且规定了如下的打扫细节:
1、扫地
2、墩地
3、擦桌子
4、给人家留言:已经打扫完毕
你会发现,你在不同的人家重复相同的动作。
那么如果用for语句,如何表达呢?
for 地点 in [ "张三家"、"李四家"、"王二麻子家"、"小明家" ] :
扫地
墩地
擦桌子
print(地点+“已经打扫完毕”) #还记得加号操作符在字符串中的作用吗?它可以连接两个字符串。
如果当作一个程序运行会得到什么结果呢?
你会得到如下数据:
张三家已经打扫完毕
李四家已经打扫完毕
王二麻子家已经打扫完毕
小明家已经打扫完毕
能看明白吗?
for语句每次按顺序取in后边的列表里的值,把这个值赋值给名为地点的变量,然后取执行操作;执行完之后,for 语句会把列表里第二个值赋值给地点变量,然后执行操作。然后在下一个值,直到列表里的值都用过一边(一般称为遍历)。
学过其他语言的同学要注意一点,python的for语句和其他语言的for语句区别还是很大的,不要搞混~
让我们看下面的代码来实际说明for语句的框架结构:
>>> words = ['cat', 'window', 'defenestrate']
>>> for w in words:
... print(w)
...
cat 3
window 6
defenestrate 12
- for、in关键字
- 列表 注意:这里其实有一个更适合的词,叫可迭代对象,列表只是其中一种。
- 分号
- 缩进
本期拓展:
上一期我们说if语句可以嵌套,那么for语句是否可以嵌套?for语句和if语句可以一起用吗?
试试输入如下代码,看看结果和你想象中的一样吗?
>>> for i in [1, 2, 3, 4, 5]:
... for j in [6, 7, 8, 9]:
... print(i, j)
...
思考下这里,两个for语句的执行顺序。
4.3. The range( ) Function
我们来学习几个常用的函数。我们在学习编程时,很大一部分是在学习函数的运用。
学习函数一般要注意以下五点:
- 函数名
- 函数功能
- 函数参数
- 函数返回值
- 函数返回值类型
我们以range( )函数举例。
range( )函数会返回一个可迭代序列,比如:range(5),会从0开始生成5个数字:0~4 。
range( )函数其实是提供了一个范围,我们可以指定这个范围的起始和结束,也可以指定这个范围取值的间隔。并且我们也能用列表把它显示出来:
>>> list(range(5))
[0, 1, 2, 3, 4]
我们用for语句遍历他,并且用print( )函数打印他们,就会得到下面代码的结果。
>>> for i in range(5):
... print(i)
...
0
1
2
3
4
以上说的是函数名、函数功能、函数返回值与类型。
下面来说函数的参数。
range( ) 函数有3个参数。分别指定了起始范围与间隔。
例如:
>>> list(range(5, 10)) #两个参数表示范围,注意包括左值,不包括右值。
[5,6,7,8,9]
>>> list(range(0, 10, 3)) #三个参数,前两个表示范围,第三个表示间隔。
[0, 3, 6, 9]
>>> list(range(-1, -10, -3)) #负数表示的是间隔方向,
[ -1, -4, -7]
range( )函数是非常常用的函数,记得背下来哟~包括三个参数~
思考题:
我们常听说算法这个词,什么是算法呢?千万别想的太高深莫测,其实说白了就是执行顺序。举个最简单的例子:把大象关进冰箱里需要几步???
你没有看错!理解算法就是这么简单。
下面就是货真价实的算法!
算法:打开冰箱,把大象塞进去,关上冰箱。
明白算法是什么了吧。但是往往实际问题要比这复杂的多得多。
而算法比拼的就是,谁的步骤更精减,谁的效率更高。
大家是否听说过冒泡排序法?
可以先来通过视频感受下:https://www.bilibili.com/video/av13977395/
提示:(以下内容可以自行google)
冒泡排序算法的流程如下:
比较相邻的元素。 如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。 在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
这里,我们降低难度,试试用冒泡排序下面这个列表:
[5, 432, 23, 73, 98, 23, 765, 11, 90, 69, 4]
记得使用我们新学的东西,比如for语句,range( )函数。
补充:len( ) 函数可以得出列表内部有多少个值。
比如:
>>> a = [5, 432, 23, 73, 98, 23, 765, 11, 90, 69, 4]
>>> len(a)
>>> 11
一定要自己动手哟~
为了防止你们不思考,答案我会晚点更新。
你也可以在评论区回复自己的答案~
写这个答案之前,给大家讲一个知识点:
>>> a = 1,b = 2
#数值互换
>>> c = a
>>> a = b
>>> b = c
#可以简写为如下形式:
>>> a, b = b, a
答案:
>>> a = [5, 432, 23, 73, 98, 23, 765, 11, 90, 69, 4]
>>> b = len(a) - 1
>>> while b :
··· for i in range(len(a)-1):
··· j = i + 1
··· if a[i]>a[j]:
··· a[i], a[j] = a[j], a[i]
··· b -= 1
···
>>> print(a)
[4, 5, 11, 23, 23, 69, 73, 90, 98, 432, 765]
不知道大家有没有成功写出来。
也许这样看不够直观,你可以试试在每次循环时都打印出列表。
代码就像下面这样:
>>> a = [5, 432, 23, 73, 98, 23, 765, 11, 90, 69, 4]
>>> b = len(a) - 1
>>> while b :
··· for i in range(len(a)-1):
··· j = i + 1
··· if a[i]>a[j]:
··· a[i], a[j] = a[j], a[i]
··· b -= 1
··· print(a) #唯一的区别在这里。print语句前的缩进。
···
[5, 23, 73, 98, 23, 432, 11, 90, 69, 4, 765]
[5, 23, 73, 23, 98, 11, 90, 69, 4, 432, 765]
[5, 23, 23, 73, 11, 90, 69, 4, 98, 432, 765]
[5, 23, 23, 11, 73, 69, 4, 90, 98, 432, 765]
[5, 23, 11, 23, 69, 4, 73, 90, 98, 432, 765]
[5, 11, 23, 23, 4, 69, 73, 90, 98, 432, 765]
[5, 11, 23, 4, 23, 69, 73, 90, 98, 432, 765]
[5, 11, 4, 23, 23, 69, 73, 90, 98, 432, 765]
[5, 4, 11, 23, 23, 69, 73, 90, 98, 432, 765]
[4, 5, 11, 23, 23, 69, 73, 90, 98, 432, 765]