零基础上手 Scratch 编程
一、学Scratch 起源
近期在学习 Harvard University 的 CS50x 课程,第一节课就介绍了 Scratch
(一款针对青少年的易上手的图形化编程语言,类似于苹果的 Swift),发现图形化编程挺容易上手,麻雀虽小五脏俱全:简单的或者复杂的程序都可以用类似搭积木的方式实现,而且这个编程语言、编程软件还是 MIT 媒体实验室(MIT Media Lab)开发的,一定很优秀,根据官方的报道,到 2022 年底 Scratch 全球有超过 1 亿的用户了。
第一节课程,仅用了一个小时不到的时间,就完成了 Scratch 的入门:David 教授首先展示了仅用简单几个模块就可以实现的功能(如点一下,发出猫叫 meo 音),还有一个摄像头感知模块来感知运动,进而触发meo 音的简单演示;其次,演示了几个有趣的之前的 CS50x 课程学长学姐开发的小游戏,让同学试玩,体验不错引发同学兴趣后,再展示内在的程序设计逻辑。
每一节课都有个课程作业,第一节课的课后作业,就是用 Scratch 编写一个程序,要求用到Control Flow(IF or Forever),用到自变量(variable),用到不少于一个的 角色(Sprite)
二、总结 Scratch 与C、Python 等编程语言的异同(后续持续更新)
Scratch | Python | 备注 | |
---|---|---|---|
Variable type | int float boolean text | ||
control flow | If-else forever(相当于Python while) 还有其他的 loop 吗? |
If-else while for | |
coding style | 点选每个角色 sprite,然后实现编程。 编程的开始都是一个 event(点鼠标啊,或者点这个角色本身), 然后触发后面的动作 |
三、关于 calculator 项目初始设计和网上教程思路之反思
在做课后作业的时候,我想实现一个计算器应用
,在自己画好 丑丑的但是凑合能用的UI 后,coding 环节卡壳了,一是不知道有哪些模块可以用,二是对于变量设置,也没有了然于胸。
初始的想法还是非常不成熟的,在想法 1 和想法 2 实现就卡壳了。
初始想法 | 挑战 | 教程思路 | 总结 |
---|---|---|---|
想法 1:按键赋值数字给变量 | 有两个变量x、y,其中x 存储操作符(+ - * /)之前的数字,而 y 存储操作符之后的数字; 后面实现时候碰到的挑战是如何判断哪一次按键赋值给 x,哪一次按键赋值给 y,卡壳了 |
凡是数字按键给赋值给同一个位置变量 numberDisplay; 然后操作符按下后,会触发赋值操作:numberDisplay 的值赋值给 memory(存储第一个按下的数字); 然后接下来按下第二个数字,会继续触发赋值给 numberdisplay,operator 有单独的变量实现。 |
|
想法 2:如何实现两位数或者三位数 | 譬如按下 123,数字是一百二十三,而不是 3;之前我的想法是监控按了几次,然后依次去用 1*100+2*10+3 来实现,发现太繁琐了。 |
教程直接用了 join 操作,就是按了几个键之后,直接显示数字 123 | 我理解join 操作,用 python 功能解释就是 float(‘button1’+’button2’),键盘输入的是字符串,字符串相加,然后 用 float()实现字符串转成浮点数字。 |
想法 3:加、减、乘、除 | 基于过往经验,也知道要用 if else 语句,不过我没有尝试在这层实现,因为在想法 1 和 2 那层就卡壳,无法通关 | 用了 if else 的嵌套 |
后面通过观看 YouTube 教程,实现了简单的加减乘除,我后面凭借记忆复现了(当然还喵了一两眼其中的部分关键设置环节,没有全程按葫芦画瓢),在教程基础上还做了一个改进:显示完整的计算过程。这里背后的实现也是用到了第一讲里面的自定义模块(Define module)。
最后,当当当当,下面是我画的丑丑的界面。
一键直达作品链接,欢迎试用。
四、对程序进一步改进,后续编程的启发
当然,程序还有很多瑕疵,即还不能实现连续计算,然后没有小数点,还不支持括号内操作,后面持续改进吧。
这个项目对我后续编程也有启发,即先用思维导图或者草图自己脑子过一遍全流程怎么实现,思路第一,编程作为执行永远是第二位,不然没有预先设计,编程时会卡壳。
MIT CX50x 课程挺实用,课程中 David 教授经常讲的一句话挺意味深长:
When you learn to code, you are also learning by coding.
任何人都能零基础上手编程
,这也是我深信不疑的一句信仰。小孩都爱玩游戏,与其玩游戏,不如自己设计游戏,让别人来玩。我要让自己的侄子、侄女,将来我也要让自己的孩子,都上手学会Scratch,在 ta们小的时候就埋下一颗自己动手改变身边小世界
的种子,会不会让ta 之后的人生多一种可能性?Who knows……