侧边栏壁纸
  • 累计撰写 53 篇文章
  • 累计创建 55 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

2023 CS50 第 0 讲 Scratch 中文笔记

冬天冬天W
2023-10-06 / 0 评论 / 1 点赞 / 126 阅读 / 17718 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2023-10-10,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

第 0 讲 Scratch

课程链接:CS50's Introduction to Computer Science
原版笔记:Lecture 0 - CS50x 2023
中文精翻:BiliBili

欢迎!

  • 这门课不仅仅是关于计算机编程的!

  • 事实上,这门课是关于解决问题的,这是一种非常有力的方式!你将在这里学到的问题解决方法可能会立即适用于你在这门课程之外的工作,甚至你的整个职业生涯!

  • 然而,这并不容易!在这门课程中,你将“从消防水带中汲取知识”。你会惊讶于自己在接下来的几周里将能完成什么。

  • 这门课程更多的是让你从“现在的你”进步到“未来的你”,而不是达到某种想象中的标准。

  • 这门课程中最重要的初始考虑因素:给你学习这门课程所需的时间。每个人的学习方式都不一样。如果一开始某件事情进展不顺利,要知道随着时间的推移,你的技能会增长和发展。

接下来

  • 本周你将学习Scratch,这是一种可视化编程语言。

然后,在未来的几周内,你将学习C语言。看起来是这样的:

#include 
<p>int main(void)
{
printf("hello, world\n");
}
  • 随着学习的深入,你将了解算法

  • 你将了解内存

  • 你将会了解具有BUG(漏洞)的代码以及导致计算机崩溃的原因

  • 你将会了解数据结构,如哈希表

接下来,我们将转向一门新的更高级的语言——Python。你的代码看起来是这样的:

print("hello, world")
  • 这门课将让你深刻地理解当今的编程语言是如何从早期的编程语言发展而来的。

  • 我们还将探讨如何使用数据库和第三方框架构建Web应用程序。

社区!

  • 你是哈佛大学、哈佛扩展学校和edX.org上这门课程的社区成员之一。

  • 谜题日 和 CS50 展览会

计算机思维

  • 计算机编程基本上是从输入中得到一些结果,也就是解决问题。在此过程中,输入和输出之间的部分,我们可以称之为“黑箱”,也就是是这门课的重点。


     title=

  • 例如,我们可能需要记录上课的出勤情况。我们可以使用一种叫做 unary(一元)的系统来计数,一次一个手指。现在的计算机则使用一种叫做 binary ​(二进制)的系统来计数。我们从 binary digit ​(二进制位)这个术语中得到了一个熟悉的词,叫做 bi-t (比特)。一个 bit(比特)是0或1。

  • 计算机只使用0和1。0代表“关闭”,1代表“打开”。计算机由数以百万计,甚至数十亿计的晶体管组成,这些晶体管不断地开启和关闭。

  • 如果你想象一下使用电灯泡,单个灯泡只能计数从0到1。

  • 然而,如果你有三个电灯泡,你就有更多的选择!

  • 使用三个电灯泡,以下可以代表0:

     0 0 0
  • 同样地,以下将代表1:

     0 0 1
  • 根据这个逻辑,我们可以提出以下等于2:

     0 1 0
  • 进一步扩展这个逻辑,以下代表3:

     0 1 1
  • 4将表现为:

     1 0 0
  • 事实上,我们只需要三个电灯泡就可以计数到7!

     1 1 1
  • 作为一种启发式方法,我们可以想象以下值代表二进制位中的每一个可能的位置:

     4 2 1
  • 计算机使用“二进制”计数。这可以被描绘如下:

      2^2  2^1  2^0<br />
    4    2    1
  • 因此,你可以说需要三个比特(四位、两位和一位)来表示高达7的数字。

  • 计算机通常使用8个比特来表示一个数字。例如,00000101​是二进制中的数字5。

文本

  • 就像数字是由1和0组成的二进制模式一样,字母也是用1和0来表示的!

  • 由于表示数字和字母的1和0之间有重叠,因此创建了ASCII标准将特定的字母映射到特定的数字。

  • 例如,字母A​被决定映射到数字65。

  • 如果你收到一条短信,该短信下的二进制可能代表数字72、73和33。将这些数字映射到ASCII,你的信息将如下所示:

 H   I   !
72  73  33
  • 感谢ASCII等标准,让我们能够就这些值达成一致!

  • 这是ASCII值的扩展映射:

 title=

  • 如果你愿意,你可以了解更多关于ASCII的信息。

表情符号

  • 随着时间的推移,通过文本进行通信的方式越来越多。

  • 由于二进制中的数字不足以表示人类可以表示的所有不同字符,因此Unicode标准扩展了计算机可以传输和理解的位数。

  • 你可能每天都在使用表情符号。下面的表情符号可能对你来说很熟悉:

 title=

  • 计算机科学家在想要为每个表情符号分配不同的肤色以进一步个性化通信时面临了一个挑战。在这种情况下,表情符号的创造者和贡献者决定,初始的比特将是表情符号本身的结构,然后是肤色。

  • 越来越多的功能被添加到Unicode标准中,以表示更多的字符和表情符号。

  • 如果你愿意,你可以了解更多关于Unicode的信息。

  • 如果你愿意,你可以了解更多关于表情符号的信息。

RGB

  • 红色、绿色和蓝色(称为“RGB”)是三个数字的组合。

 title=

  • 采用我们之前使用的72、73和33,通过文本表示“HI!”,图像阅读器会将其解释为浅黄色。红色值为72,绿色值为73,蓝色值为33。

 title=

图像、视频和声音

  • 图像只是RGB值的集合。

  • 视频是将许多图像存储在一起的序列,就像翻页书一样。

  • 音乐可以通过MIDI数据来表示。

算法

  • 解决问题是计算机科学和计算机编程的核心。

  • 想象一下在电话簿中查找单个姓名的基本问题。

  • 你会怎么做呢?

  • 一种方法可能是从第一页开始,一页一页地读,直到读到最后一页。

  • 另一种方法可能是每次搜索两页。

  • 最后一种也许更好的方法是,先翻到电话簿的中间,然后问:“我要找的名字在左边还是右边?”然后,重复这个过程,将问题不断减半。

  • 这些方法都可以被称为算法。这些算法的速度可以用所谓的“大O表示法”(译者注:类似于国内的二分法)来表示,如下所示:

 title=

请注意,第一种算法(红色高亮)的大O为n​​,因为如果有100个名字在电话簿中,则可能需要最多尝试100次才能找到正确的名字。第二种算法,每次搜索两页,其大O为n/2​​,因为我们搜索的速度提高了两倍。最后一种算法的大O为log~2~n,因为将问题加倍只会增加一步来解决问题。

伪代码和编程的基本结构

  • 创建伪代码的能力是一个人在这门课程中以及在计算机编程中成功的关键。

  • 伪代码是人类可读的代码版本。例如,考虑到上面的第三种算法,我们可以编写如下伪代码:

拿起电话簿
翻到电话簿的中间
查看页面
如果人在页面上
打电话给人
否则如果人在书的前半部分
翻到书的左半部分的中间
回到第3行
否则如果人在书的后半部分
翻到书的右半部分的中间
回到第3行
否则
退出
  • 伪编码是一项非常重要的技能,原因至少有两个。首先,当你在编写正式代码之前进行伪编码时,它允许你提前思考问题的逻辑。其次,当你进行伪编码时,你可以稍后向其他人提供这些信息,以帮助他们理解你的编码决策和你的代码工作原理。

  • 请注意,我们的伪代码中使用的语言有一些独特的特点。首先,其中一些行以动词开头,如“拿起”、“打开”、“查看”。稍后,我们将把这些称为functions(函数)。

  • 其次,注意有些行包括“if”或“else if”这样的语句。这些被称为conditionals(条件语句)。

  • 第三,注意有一些表达式可以被表述为“true”或“false”,例如“人在书的前半部分”。我们称这些为boolean expressions(布尔表达式)。

  • 最后,注意这些像“回到第3行”这样的语句。我们称这些为loops(循环)。

  • 在下面讨论的Scratch的上下文中,我们将使用上述编程的基本结构中的每一个。

Scratch

  • Scratch是由麻省理工学院(MIT)开发的一种视觉编程语言。

  • Scratch使用了我们在本次讲座中介绍的相同的基本编码构建块。

  • Scratch是一种学习计算机编程的好方法,因为它允许你以可视化的方式玩这些构建块,而不必关心大括号、分号、括号等的语法。

  • Scratch的IDE​(集成开发环境)如下所示:

 title=

请注意,在左侧,有一些你可以在你的编程中使用的“构建块”。在构建块的右侧,有一个区域,你可以将块拖放到该区域来构建程序。在那个区域的右侧,你会看到一个“舞台”,上面站着一只猫。舞台是你的编程成果展示的地方。

  • Scratch的坐标系统如下所示:

 title=

请注意,舞台的中心位于坐标(0,0)。现在,猫的位置就在同一个位置上。

  • 首先,将“当绿色旗帜被点击时”的构建块拖动到编程区域。然后,将say​​构建块拖动到编程区域并将其连接到前一个块上。

    1.png

请注意,当你现在点击绿色旗帜时,在舞台上,猫会说“hello world”。

  • 这很好地说明了我们之前讨论的编程内容:

 title=

请注意,输入“hello world”被传递给函数say​​,该函数运行的“副作用”是猫说出“hello world”。

  • 我们可以让你的程序更具交互性,让猫对特定的人说“hello”。修改你的程序如下:

    2.png

    请注意,当点击绿色旗帜时,函数ask​会被执行。程序会提示你,也就是用户,“你叫什么名字?”然后它会将这个名字存储在一个名为answer​的变量中。程序然后将answer​传递给一个名为join​的特殊函数,该函数将两个字符串“hello”和提供的名字组合在一起。这些字符串一起被传递给say​函数。猫会说“Hello,”和一个名字。你的程序现在是交互式的。

  • 非常相似的是,我们可以将程序修改如下:

    3.png

    请注意,此程序在单击绿色标志时,会将相同的变量与hello​拼接起来传递给名为speak​的函数。

抽象

  • 除了伪编码外,抽象是计算机编程中的一项基本技能和概念。

  • 抽象是将问题简化为越来越小的问题的行为。

  • 例如,如果你要为朋友举办一场盛大的晚宴,那么准备整场晚宴的“问题”可能会非常令人望而生畏!然而,如果你将烹饪任务分解成越来越小的任务(或问题),那么准备这场美味盛宴的大任务可能会变得不那么具有挑战性。

  • 在编程中,甚至在Scratch中,我们都可以看到抽象的实际应用。在你的编程区域中,编写如下程序:

    4.png

    请注意,你在一遍又一遍地做同样的事情。事实上,如果你发现自己反复编写相同的语句,那么你可能会更有艺术感地进行编程——将这些重复的代码抽象出来。

  • 你可以将代码修改如下:

    5.png

    请注意,这个循环与前一个程序的作用完全相同。然而,通过将重复的部分抽象到一个为我们“重复”代码的块中,问题得到了简化。

  • 我们甚至可以通过使用define​块进一步推进这一点,在这个块中,你可以创建自己的块(自己的函数)!编写如下代码:

 title=

请注意,我们正在定义一个名为meow​的自己的块。该函数播放meow​声音,然后等待一秒钟。在下面,你可以看到当单击绿色标志时,我们的meow​函数重复三次。

  • 我们甚至可以提供一种方法,使函数可以接受输入n​​并重复执行多次:

    6.png

    6.2.png

    请注意n​是如何从“meow n times”中获取的。n​通过define​块传递给meow​函数。

  • 顺便说一下,我们可以将猫称为sprite​(精灵)——这是游戏编程中用于屏幕上与玩家交互的对象或角色的通用术语。

If

  • 条件语句是编程的基本构建块,程序会检查是否满足特定条件。如果满足条件,程序就会执行某些操作。

  • 为了说明条件语句,编写如下代码:

    7.png

    请注意,forever​块被用来反复触发if​块,以便它可以不断地检查猫是否触摸到鼠标指针。

  • 我们可以将程序修改如下,以整合视频感知:

    8.png

  • 请记住,编程通常是一个反复试验的过程。如果你感到沮丧,花些时间跟自己讨论一下手头上的问题。你现在正在处理的具体问题是什么?哪些部分是可行的?哪些部分不可行?

拓展你的想象力

  • 在本次讲座中,我们向你展示了许多Scratch程序,以激发你的想象力。

  • Oscartime是David自己的一个Scratch程序——尽管他在创建这个程序时听了很长时间的音乐,现在音乐可能会让他感到困扰。花几分钟时间自己玩玩这个游戏。

  • 要自己构建Oscartime,我们首先添加路灯。

 title=

  • 然后,编写如下代码:

    9.png

    请注意,将鼠标移到Oscar上会改变他的服装。你可以通过探索这些代码块来了解更多信息。

  • 然后,将代码修改如下,以创建一个掉落的垃圾:

    10.png

    请注意,垃圾在y轴上的位置始终从180开始。x位置是随机的。当垃圾在地板上方时,它每次向下移动3个像素。你可以通过探索这些代码块来了解更多信息。

  • 接下来,将代码修改如下,以允许拖动垃圾的可能性。

    11.png

    你可以通过探索这些代码块来了解更多信息。

  • 接下来,我们可以实现计分变量,如下所示:

    12.png

    你可以通过探索这些代码块来了解更多信息。

精灵移动

  • 从Oscartime转向Ivy的最难游戏,我们现在可以想象如何在程序中实现移动。

  • 我们的程序有三个主要组成部分。

  • 首先,编写如下代码:

    13.png

    请注意,当单击绿色标志时,我们的精灵会移动到舞台中央的坐标(0,0),然后永远监听键盘并检查墙壁。

  • 其次,添加第二组代码块:

    14.png

    请注意,我们如何创建了一个自定义的“监听键盘”脚本。对于键盘上的每个箭头键,它将精灵在屏幕上移动。

  • 最后,添加这组代码块:

    15.png

    请注意,我们还有一个自定义的“感受墙壁”脚本。当精灵碰到墙壁时,它会将其移回安全位置——防止它走出屏幕。

  • 你可以通过探索这些代码块来了解更多信息。

  • 去试试完整的游戏Oscartime

更多精灵

  • Scratch允许屏幕上同时出现多个精灵。

  • 添加另一个精灵,将以下代码块添加到你的程序中:

    16.png

    请注意,Yale精灵似乎通过来回移动来妨碍Harvard精灵。当它碰到墙壁时,它会转身,直到再次碰到墙壁。你可以通过探索这些代码块来了解更多信息。

  • 你甚至可以让一个精灵跟随另一个精灵。添加另一个精灵,将以下代码块添加到你的程序中:

    17.png

    请注意,现在MIT标志似乎跟随Harvard标志移动。你可以通过探索这些代码块来了解更多信息。

  • 去试试完整的游戏Ivy's Hardest Game

总结

在本节课中,你了解了这门课程在计算机科学和编程领域的地位。你学到了……

  • 很少有学生在上这门课之前有编程经验!

  • 你并不孤单!你是社区的一部分。

  • 解决问题是计算机科学家的工作精髓。

  • 这门课程不仅仅是关于编程的——这门课程将向你介绍一种新的学习方式,你可以将它应用于几乎每一个生活领域。

  • 计算机如何理解数字、文本、图像、音乐和视频。

  • 伪代码的基本编程技能。

  • 抽象化将如何在你未来在这门课程中的工作中发挥作用。

  • 编程的基本构建块,包括函数、条件语句、循环和变量。

  • 如何在Scratch中构建一个项目。

下次见!

1
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区