表达式 (14分钟)
-
0:00 - 0:05在这节课,我们要将表达式加到我们学过的代码里
-
0:05 - 0:10这是我们开始要写的
-
0:10 - 0:14最后一段有关现实的图像操作
-
0:14 - 0:19这节课结束前,我们将会试试基于图像的拼图,会很有意思
-
0:19 - 0:24我们已经写过这样的代码很多次了,这里是 print(42)
-
0:24 - 0:28数字可以是40、400或250,代码里写什么数字都可以
-
0:28 - 0:33你也可以以这种方式写代码,这里是 print(11+31)
-
0:33 - 0:3711+31 是表达式
-
0:37 - 0:43这不是我们之前讲过的固定值,我们可以用一个小小的算术表达式
-
0:45 - 0:4811+31 是一个小问题
-
0:48 - 0:53原理是当计算机运行时,读取这一行
-
0:53 - 0:57计算机首先要做的是求表达式值
-
0:57 - 1:01我要求这个值
-
1:01 - 1:05这里计算机做的是加法11+31是42
-
1:05 - 1:09求表达式得到42后,代码可以继续,就使用这个值
-
1:09 - 1:14这里只是打印42
-
1:14 - 1:18我们不在代码里写0、255、100或其他数值
-
1:18 - 1:23我们可以填一个小算术表达式
-
1:23 - 1:28利用运算来计算要在代码里使用的数值
-
1:28 - 1:33这可以帮助我们更好地解决问题
-
1:33 - 1:39尽管还没讲到,像素有三个额外的功能
-
1:39 - 1:44pixel.getRed(),getRed 与 setRed 相反,是取像素的值
-
1:44 - 1:49这是某个红色值,0、100或其他
-
1:49 - 1:54这个代码是取红色值,这里是 getGreen 和 getBlue
-
1:54 - 1:59用表达式去取像素的 RGB 值是很普遍的
-
1:59 - 2:04设想我要将像素的红色值翻倍,红色值是50的话,要改成100
-
2:04 - 2:09值是100的话,改成200,等等
-
2:09 - 2:13这是要用到的代码,我来解释一下
-
2:13 - 2:18改变像素的值,将其变成三倍等等
-
2:18 - 2:22是处理像素的 RGB 值一个比较现实的作法
-
2:22 - 2:27看看这行代码的作用
-
2:27 - 2:32这是正确的,它将像素的红色值翻倍,第一行是 pixel.getRed()
-
2:32 - 2:36它要取值,红色值是50
-
2:36 - 2:41pixel.getRed() 是要取值50
-
2:41 - 2:45我们使用的是等号,和以前一样,等号是将值存储在变量里
-
2:45 - 2:49我将旧值称作 old
-
2:49 - 2:54这里就是将50存储在 old 里
-
2:54 - 2:58下一行是 pixel.setRed(old "times"2)。我在这里用表达式
-
2:58 - 3:03这里的方式是到这行时,代码首先要求表达式
-
3:03 - 3:07计算机会先读 old * 2
-
3:07 - 3:11记得存储的是50,所以这里说50乘2
-
3:11 - 3:15求值得100
-
3:15 - 3:19求得值后,就可以继续运行代码,这是 pixel.setRed,就是100
-
3:19 - 3:24整个过程就是取50,乘以2得100
-
3:24 - 3:29然后将100放回去,就是值乘以2
-
3:29 - 3:35实际上我们是这样写代码的
-
3:35 - 3:39全部内容都可以缩成一行
-
3:39 - 3:43因为 old 这个变量没有添加太多内容
-
3:43 - 3:47它只是一个暂时的存储点
-
3:47 - 3:51设想像素的红色值是50,我要运行一下。我将这缩成一行
-
3:51 - 3:56设想一下运行代码
-
3:56 - 3:59这有个像素,红色值是50的像素,我要运行这行代码
-
3:59 - 4:04计算机首先会注意到这有个表达式, pixel.getRed()*2
-
4:04 - 4:08将要求表达式,因此 pixel.getRed()要取红色值
-
4:08 - 4:13譬如说50
-
4:13 - 4:17跟50乘以2的数学是一样的,得到100
-
4:17 - 4:22这里调用 pixel.setRed(100),然后放回去
-
4:22 - 4:27这里的原理和我们刚才讲的一样
-
4:27 - 4:32先取值,乘以2,再放回去
-
4:32 - 4:37用英语讲,就是将红色值翻倍。我要做一些遵循这个模式的例子
-
4:37 - 4:44我们要看到的是,我开始在循环里使用之前的
-
4:44 - 4:510或250,我们有一些固定值
-
4:51 - 4:57不过现在,我们要写代码,这是我刚做的实例
-
4:57 - 5:02我们要根据原来的红色值来改变红色值
-
5:02 - 5:08原理是,我们常说 pixel.setRed
-
5:08 - 5:14在括号里,我们将调用 pixel.getRed(),然后有一些算式
-
5:14 - 5:19这个例子里,这行将红色值翻倍
-
5:19 - 5:24或调用 pixel.setRed (pixel.getRed()*0.5)
-
5:24 - 5:28取旧值,并乘以0.5,或者是除以2
-
5:28 - 5:33将值变小,然后放回去
-
5:33 - 5:38我们会遵循这个模式很多次。我们来做一个真正的实例
-
5:38 - 5:43我要取这朵花的值,我要将其变橙色
-
5:43 - 5:48我的策略是改变绿色值
-
5:48 - 5:52我们将绿色值调低
-
5:52 - 5:56从数学上,将绿色值改为其原有值的75%
-
5:56 - 6:01这页里没有代码,我要键入代码
-
6:01 - 6:05我要将绿色值改成原来的75%
-
6:05 - 6:10这是我刚才演示过的实例
-
6:10 - 6:14这里写 pixel.setGreen,你也可以从外到内
-
6:14 - 6:19我要调用 setGreen,这里要写一些表达式
-
6:19 - 6:24我要用表达式来计算一个作为绿色值的数值
-
6:24 - 6:28这里用 pixel.getGreen(),我要取旧值
-
6:28 - 6:33将其乘以任何数。在这里,乘以0.75
-
6:33 - 6:38我要将数值变成原来的四分之三
-
6:38 - 6:43试试看,是可以的,或许你叫这种颜色为黄色
-
6:43 - 6:49如果填1.0,可以是没有任何改变
-
6:49 - 6:54很好看的黄色。这是0.75
-
6:54 - 6:58这是橙色,应该说,在这些实例里
-
6:58 - 7:02我刚才花了点时间键入代码
-
7:02 - 7:06如果你要自己试试也可以,这里有一个显示答案的小按钮
-
7:06 - 7:10你可以稍后再复习,可以看到这段答案代码
-
7:10 - 7:14用作练习的目的的话,最好用空白屏幕开始
-
7:14 - 7:18真正经历输入代码的过程
-
7:18 - 7:23所有这些实例都遵循这个模式,我们来试试难一点的内容
-
7:23 - 7:30这里将红色值、绿色值和蓝色值设成原来的0.75倍
-
7:30 - 7:37我们试试0.5倍和0.25倍,计算机科学的一个伟大传统是
-
7:37 - 7:43不从头开始输入代码,而是复制代码
-
7:43 - 7:50这是我原来写的代码,我来复制一下,我要复制三次
-
7:50 - 7:56我们来修改一下,达到我们要的效果,顺序是红、绿、蓝
-
7:56 - 8:02这里写 setRed,getRed(),填0.75
-
8:02 - 8:08这个好了。然后是 setGreen(getGreen()*0.75)
-
8:08 - 8:14最后是蓝色,setBlue(pixel.getBlue())
-
8:14 - 8:19你可以看到这里将 set 和 get 组合起来,这是个十分可行的模式
-
8:19 - 8:24我按这种方式运行一下。变化不是太明显
-
8:24 - 8:29但这里是将原图变暗
-
8:29 - 8:33你想一下,就知道将原值乘以0.75,就是将值移近0
-
8:33 - 8:38很明显,0、0、0是纯黑,所以我们是将数值压缩
-
8:38 - 8:43我们来试一些更极端的实例。将原值乘以0.5
-
8:43 - 8:48运行一下,变暗了一些。乘以0.25的话
-
8:48 - 8:54是原值的四分之一,变得很暗
-
8:54 - 8:59这里的用法是将 setRed 和 getRed() 结合
-
8:59 - 9:05乘以倍数,改变数值
-
9:05 - 9:10将原数值增大或缩小
-
9:10 - 9:14我要跳过第三个问题
-
9:14 - 9:18这只是额外的练习,如果你要试试看的话,这有解答代码
-
9:18 - 9:22我要做的是研究这些5、10 和20问题
-
9:22 - 9:285、10和20问题的概念是这里有一些花朵图像或水果图像
-
9:28 - 9:33这些图像经过更改
-
9:33 - 9:39更改的方式是将红、绿和蓝的值除以5、10或20
-
9:39 - 9:45这些值非常小,图像可能会非常暗
-
9:45 - 9:50困难的是要将红、绿和蓝的值乘以5、10或20
-
9:50 - 9:55撤消变暗的作法是将图像变亮
-
9:55 - 10:01我们来做一些试验,多做尝试
-
10:01 - 10:06看如何将图像变亮
-
10:06 - 10:10那么用数值5一次,用10一次,用20一次
-
10:10 - 10:15你要看看哪种颜色使用哪个数值
-
10:15 - 10:19应该说,你知道使用5、10和20有六种方法
-
10:19 - 10:24所以不需花太多力气
-
10:24 - 10:29你可以想象首先在红色值用5
-
10:29 - 10:33首先是5,然后是5、10、20
-
10:33 - 10:37如果先用5,那么只剩下两个可能
-
10:37 - 10:41如果先用10,只剩下两个可能
-
10:41 - 10:44如果先用20,只剩下两个可能,这样你就可以整理出来
-
10:44 - 10:49我们回到这里
-
10:49 - 10:56复制一段代码,就不用从头写起
-
10:56 - 11:01我们这里有一根香蕉,我先将这几行设为说明
-
11:01 - 11:06我们看到图像里什么都没有
-
11:06 - 11:11所以这是个疑问图片,我告诉你
-
11:11 - 11:16这里有根黄香蕉,背景是暗红砖
-
11:16 - 11:21在红砖之间,有一些绿色苔藓
-
11:21 - 11:26如果你修改图像的话,就可以看到这些东西
-
11:26 - 11:31我要用乘法,先用5、10、20
-
11:31 - 11:36譬如,红色值乘5,
-
11:36 - 11:41绿色值乘10、蓝色值成20
-
11:41 - 11:46只是猜一下,来试试看
-
11:46 - 11:50显然是不对的,是吧?香蕉看起来不对劲
-
11:50 - 11:55砖头有点蓝色,不好看
-
11:55 - 12:00我仍然使用先用5这个假设,再试其他变化
-
12:00 - 12:06譬如5、20、10,我们来试试看,更糟糕
-
12:06 - 12:11好吧,我不首先用5了,已经试过先用5两次了
-
12:11 - 12:21试试用10、5、20
-
12:21 - 12:26我将这些值增大,快弄好了
-
12:26 - 12:31香蕉看起来挺不错的,但是砖块很明显不是紫色的
-
12:31 - 12:36它们应该是红色
-
12:36 - 12:42我试着在中间用5,然后先填20
-
12:42 - 12:48试试20、5、10
-
12:48 - 12:53你可以看到砖头是暗红色
-
12:53 - 12:58这还有些绿色苔藓,令人放心了,我要放大
-
12:58 - 13:04给你看看一些细节
-
13:04 - 13:08这是砖块,苔藓和香蕉都不错
-
13:08 - 13:13但这里有点小东西,香蕉这里有些横线
-
13:13 - 13:17这是可以的,只是快速查看图像时像素的显示方式而已
-
13:17 - 13:23之所以这样,是因为当红、绿、蓝
-
13:23 - 13:28除以诸如10或20的数值时
-
13:28 - 13:33这些通常从0到255的数值
-
13:33 - 13:38被缩成从0到12或从0到24的数值
-
13:38 - 13:42被压成这个范围的数值时,只有一部分的黄色可选
-
13:42 - 13:46尽管我们将数值增大后
-
13:46 - 13:50仍只有这些颜色可选
-
13:50 - 13:54所以我们看到这些平行线,它们只是深浅不同的黄色
-
13:54 - 13:58所以是无法捕捉的,我来放大看看
-
13:58 - 14:03是无法捕捉的,这是你想要的实际渐变色
-
14:03 - 14:07这个练习就是这个原理
-
14:07 - 14:12本节课的练习有更多的5、10、20难题
-
14:12 - 14:14你应该认真学学
- Title:
- 表达式 (14分钟)
- Video Language:
- English
lovetranslation edited Chinese, Simplified subtitles for Expressions | ||
lovetranslation edited Chinese, Simplified subtitles for Expressions | ||
lovetranslation edited Chinese, Simplified subtitles for Expressions | ||
lovetranslation edited Chinese, Simplified subtitles for Expressions | ||
lovetranslation edited Chinese, Simplified subtitles for Expressions | ||
lovetranslation added a translation |