跟我读python3文档:013_流程控制语句(4. More Control Flow Tools)中

贯穿始终的理念:别废话,就是干!


往期回顾

  • 分片
  • 索引
  • 对象
  • 字符串为什么是特殊的列表?
  • 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
  1. for、in关键字
  2. 列表 注意:这里其实有一个更适合的词,叫可迭代对象,列表只是其中一种。
  3. 分号
  4. 缩进

本期拓展:
上一期我们说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

我们来学习几个常用的函数。我们在学习编程时,很大一部分是在学习函数的运用。
学习函数一般要注意以下五点:

  1. 函数名
  2. 函数功能
  3. 函数参数
  4. 函数返回值
  5. 函数返回值类型

我们以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]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351

推荐阅读更多精彩内容