当前课程知识点:Python 交互式程序设计导论 > 第5周 > A 课程视频(鼠标输入、列表进阶) > Video
返回《Python 交互式程序设计导论》慕课在线视频课程列表
大家好!欢迎来到本周的可视化程序调试课程
这个礼拜我们学习了迭代
那我们今天的主要内容是通过可视化的
方式帮助大家理解一下迭代的概念
同时呢我们也会介绍一种迭代的方法我们把它叫做列表推导式
那下面开始我们今天的课程,先看一下我们第一个例子
这个例子中我们有一个全局的示成绩的列表
它里面有10同学的成绩
那我们知道大学里面我们课程的
成绩可能不是单单有你的最后考试的成绩来决定的
还是有几个部分组成,比如说我们python的成绩呢它有三部分组成
那我们在这里呢假设我们这门课的成绩呢是有两部分组成的
我们的平时成绩呢占10分
那我现在想通过一种计算来给每一个同学成绩加上他的平时成绩
那我们来调试一下看一下它是怎么完成这个操作的,可视化执行
下一步,大家看大家看我全局的栈框架
这个呢它指向了它对上面的一个的函数,
然后在下一步,这是我全局的表示成绩的列表
它里面有10个元素值,在下一步,这个方法呢是利用在计算总成绩的
他把这个返回值呢复制了左边的total_score,好,我们下一步
大家看在这个函数的栈框架里面它的输入参数指向了这个score_list, 在下一步
它创建了一个空的列表result是个empty是吧,空的列表
在for循环里面呢,这个列表呢是一个迭代器了
我们通过迭代器呢每次都可以查询到这个列表里面的元素
好我们下一步,大家看现在呢是score里面的第一个元素值应该是65
那它呢加上10对吧,会变成75,
然后再把这个值添加到我这result列表里面去
下一步,看result第0个元素是75继续for循环,下一步,
此时我们成绩这个列表第二个元素值是75对吧
然后它加10分变成85,下一步,好,85,我继续了
我就快一点点了,每一个同学的值呢都会加上10分,
之后呢就是总成绩,最后一个加完了之后
因为我这个列表呢,元素呢已经遍历完了,
从第一个元素到最后一个元素都遍历完了
那我们的for循环呢执行结束了,
会把这个rusult作为结果返回,它的返回值就是这个列表,
返回值呢会复制给我这个列表
total_score,下一步,好,看
全局的这个列表值total_score就是它,
那我们打印一下,这是我们总成绩
10个同学的总成绩就打印出来了,
关于这个呢我们还有另外一种写法
我们把它叫做列表推导式,我们看一下,它是怎么来写的
好,这是我第二种写法了,把它调动一下2,同样也是一样的
好可视化执行,看,它是怎么做的呢,
我们跟第一个比较一下,同样它们是创建了一个空列表对吧,然后呢
这个地方我是通过for循环这样的方式来执行的
然后在我第二种方式里面,这个我们往这边调一下, 大家看的可以更清楚
在第二种方式里面呢我们是把它作为一个表达式来执行的对不对,
就是我的这一部分,第一种方法的这一部分在第二种方法里面
我是作为表达式来执行的,它最终的计算结果呢是一个列表
那因为我们的append的方法
列表的append的方法是往列表里面添加一个元素
而我们的extend的方法呢是往列表里面添加一个列表
这它们两的区别,我在下一步,我就快点走了
好,score_list将调用第二个方法result一个空列表对吧
那我们看一下这个时候它是怎么实行的
大家看这个时候,刚才我跟大家讲过这种方式呢叫做列表推导式
在右存呢它就生成了一个列表推导式的栈框架
这个.0呢指向的是一个列表的迭代器对象
在for循环里面呢列表呢就会变成一个迭代器对象是吧
然后就会挨个去遍历,列表里面的每一个元素,
那这个地方它是一个迭代器对象
通过这个迭代器的对象呢我们可以一次查询列表里面的 每一个元素,
我们下一步看一下,好,第零个元素是65了,75对吧
因为这一部分是我们没有办法进去调试的
因为它不是一个函数,而是一个表达式
所以我们就看它第三个元素60
继续,它一直在发生变化,它一直在遍历,当它遍历结束的时候
就是列表里面的,所有的元素遍历完的时候,它会给我们返回值,
返回值就是我们每个元素加上10的结果,它把这个列表呢作为返回值 给我们返回了
返回值当然也是复制给我的total_score了,好,打印一下,
结果跟第一种方式一模一样的对吧
那这种方式呢其实它不是最简单的方式,
我们还要一种,那还有第三种写法
我们来把它复制一下,第三种写法我们复制一下
ctrl+c,好这个地方我调用一下
我在执行一下,好,我下一步大家看,我继续走了,下一步,下一步
全局的列表,我调用我第三个函数,也是计算总成绩的一个函数
我们看它是怎么执行的,下一步,在下一步,
大家看同样跟第二种方式一样
它也形成了一个列表推导式的栈框架,
里面.0呢它同样也指向了我列表的迭代器对象了
在下一步,下一步 它跟第二种是不一样的方式,它也遍历我的列表里面的每一个元素
就快速点了,看,同样它也把这个新的列表作为返回值返回了
那它第二种有什么区别呢,跟第二种相比,
第二种我们是先创建了一个空的列表
然后把这个表达式的计算结果呢,这边放一下
然后把这个表达式的计算结果呢添加到result这个空列表里面去, 把result返回
而第三种方式呢,我们 创建空列表的方式呢省略掉了我们直接一步到位
我遍历score_list里面的每一个元素,
然后给每一个元素都加上10把整体作为一个列表返回,
结果呢跟前面两种方式一样的,但这种写法就简单一些,
我们把它叫做列表推导式
那什么叫做列表推导式呢,就是根据一个列表来生成一个新列表的方法
新列表中每一个元素呢都是通过原来列表里面的元素建立起来的
我们把这种方式,叫做列表推导式,那我们看一下这个例子
它还另外一种情况呢就是,我们是不是每一个成绩,
每个同学的成绩都给他加上平时成绩满分10分儿呢
不是这样呢,好,这是我们第二个例子
同样刚才那个例子不过是我做了一些修改,因为我觉得,
就是如果你的成绩加上平时成绩还不能及格的话
就是不能大于等于60的时候,
我就会把你的成绩的从我的总成绩列表里面踢除掉
如果它是及格了大于等于60了
那我就把它加到里面来,我调试一下
我就要先进行一个判断了,它就有条件的加上平时成绩,好, 看一下,继续,看
result是个空列表,在遍历的时候,
我score的当前值是我列表的第一个元素65
那我现在要进行判断了,那这个值加上65之后会怎么样呢
下一步,看我是这pass_exam的这个函数,score呢是65,下一步, 它会返回ture吗
返回值是ture对吧那当返回值是ture的时候,
if条件,这里面它的条件值为正的时候,
它就会进行下一步操作了,看,下一步 好,再下一步,
你看result里面多了一个元素值75对吧
它是65加10的结果,那我在进行下一个调试
此时呢score变成75,当然它加10时85也是没有问题了
这个函数的返回值也ture,那我快速的执行了
看,返回值是ture,在这个地方第二个元素的值是85
再下一个,返回值也是ture了,70,60对吧,
再下一个,90,没问题,好,这个要大家注意一下
因为我当前的score值成绩是45对吧,它加上10分变成55
那它返回值会是false,那我就不会添加到新的列表里面去了
看,下一步,score是45,下一步,再下一步,
它只点上了return false这一句,它的返回值肯定是一个false
就是一个假的一个值,就是这个条件是不成立的,那当不成立的时候呢 它会怎么办
大家看一下,下一步,我们已知它是不成立的,
它就会,不会去执行这一句了,下一步
如果直接到score是88了,45这个它略过了对不对,
因为当score只是45的时候,刚才是45的时候
score加10呢小于60的,返回值是false呢
这一条,这个语句呢,if条件呢是假的,那它当然不会执行下面的语句
看,紧接着就会循环到列表的下一个元素,也就是88 再下一步,好
我这个新的列表已经创建完了,踢出了一个元素,下一步,
它作为返回值返回了是吧
复制给我的total_score,打印一下,没有问题,那这一种呢
就是说我在创建新的列表的时候呢,我不是每个元素进行操作的,
符合我要求的元素我才给它进行了一些操作
不符合要求的元素我就把他给踢出掉了,那我们看一下,
它是怎么利用我们列表推导式的方式来创建
这个给大家写一下,我就直接写了,好,这个新的列表是怎么创建呢
首先我们要遍历这个score_list了,每一个遍历,每一个元素值呢
把它前面加score,然后score_list,好,然后呢,
对于每一个元素我们要进行什么样的操作
加10是吧,好,这个列表呢,每一个元素 给它加10,
当什么情况下给它加10呢
就是我的if条件了,什么情况score加上10大于等于60的时候,
当score加10大于等于60的时候
我在执行score加10的操作,那它最后的结果应该是一个列表,
放在一对中括号里面,然后把这个列表作为返回值,返回,好
这就是我的列表推导式,大家看,我是怎么写的啊,
首先我先遍历这个列表对吧
那要对列表里的元素进行哪些操作呢,每个列表元素加10,
我是不是每个元素都加10呢,不是的
我要符合我的条件,这就是我的条件了
通过这种方式我们也创建了一个新的列表,
我们要调用一下来看看结果是不是一样的
好,直接点击执行了,下一步,来下一步,看一下,
调用的是它,这是原始的列表对吧
这是我第二个,下一步,看我在返回的时候怎么做的, 在执行的时候怎么做的,下一步
同样它是一个列表推导式的栈框架,
.0呢指向的是我列表的一个迭代器对象
下一步,第0个元素65,它在遍历我每一个元素了,
遍历完成之后,它返回我的把新的列表作为返回值返回对不对
返回值返回,当然是返回到我的total_score这个地方,
下一步,看我的全局变量里面有一个total_score了
它指向的列表是这个,我根据这个列表创建的一个新列表, 打印下它的值,没问题
那这节课呢,我们主要是介绍了一下迭代的可视化以及介绍了一种 新的方法就是列表推导式
什么叫列表推导式呢它就是根据已有的列表,创建一个新列表的方法
那新列表里面每一个元素都是通过原来那个列表中元素某种计算得到的
比如说,我们刚才举的那个例子就是,
原来列表里面每个元素的值都加上10
那列表推导式呢有两种方式今天我们也给大家介绍到了,一种就是表达式
这个地方的列表是,原来的旧列表,生成了中括号里面,
这一段中括号里面的列表呢
是我们的新列表,通过for循环的方式就可以创建一个新列表
它的第二种方式就是加上if条件,
因为我们不想for里面的每一个元素都来作为我新列表的元素值对吧
我们当符合条件的时候才要它,不符合条件我们就把它踢出掉
那今天关于迭代的可视化和列表推导式呢
就给大家介绍到这里,我们下次课再见!
-课程简介
--课程简介
-A 课程视频(算数操作符及表达式)
--绪论
-B 课程视频(变量及赋值)
--变量
--项目提交
-C 辅助视频(计算机结构、Python开发环境安装)
-D 辅助视频(如何提交项目)
--项目提交
-第0周--小测验
-本周项目:"我喜欢Python"
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
--项目提交
-A 课程视频(函数)
--函数
--其它操作符
--随机函数
-B 课程视频(逻辑及表达式)
--逻辑值和比较
--条件
--编程技巧
-第1周--小测验
-本周项目:“老虎杠子鸡虫”游戏
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(Python交互式应用)
--事件驱动编程
--按钮
-B 课程视频(输入框、全局变量)
--输入框
--编程技巧
-第2周--小测验A
-第2周--小测验B
-本周项目:猫咪藏在哪个房间
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(画布绘图)
--画布和图形绘制
--字符串处理
--图片和音效
-B 课程视频(计时器)
--计时器
--交互式绘图
--“神奇时钟”游戏
--编程技巧
-第3周--小测验A
-第3周--小测验B
-本周项目:“神奇时钟”
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(列表)
--列表
--键盘输入
--碰撞和反射
-B 课程视频(键盘控制)
--速度控制
--运动
--编程技巧
--“桌上冰球”游戏
-第4周--小测验A
-第4周--小测验B
-本周项目:“桌上冰球”游戏
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(鼠标输入、列表进阶)
--鼠标输入
--Video
--Video
--Video
-B 课程视频(字典和图片)
--Video
--Video
--Video
--Video
-第5周--小测验A
-第5周--小测验B
-本周项目:“世界杯八强连连看”
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(类)
--华容道中的类
-B 课程视频(平铺图片)
--平铺图片
--理解对象
--编程技巧
--“华容道”游戏
-第6周--小测验A
-第6周--小测验B
-本周项目:“华容道”游戏
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(类进阶及文件操作)
--集合
--文件操作
--文字块类
--处理停止的文字块
-B 课程视频(游戏状态控制)
--游戏记分规则
--编程技巧
-第7周--小测验A
-第7周--小测验B
-本周项目:决战三字经
--游戏说明
--程序说明
--编程步骤
--评分标准
--项目模板
-A、课程视屏(精灵集合)
--Video
--精灵类
--战士类
--编程技巧
-B、课程视屏(动画)
--精灵碰撞
--精灵动画
--编程技巧
--保卫家园游戏
-第8周--小测验
-本周项目:守卫家园
--游戏说明
--程序说明
--编程步骤
--评分标准
--项目模板