APP下载

Scratch做个计算器

2020-06-30

电脑报 2020年21期
关键词:赋值变量符号

计算器大家都用过,今天我们用Scratch编写一个计算器程序。它可以计算两个数之间的加减乘除运算,还有清除键C。点击所有按钮有音效,当输入错误时还有错误音效提示(如图1)。

1. 素材准备

为了方便,数字按钮0~9和清除键C我们使用Scratch内置的数字和字母角色。运算符号是在Scratch里手工绘制的。这个程序只完成了计算器的最基本功能,没有考虑美化工作,为了美观可以导入更好看的按钮角色。

2. 算法分析及设置变量

程序中需要的变量是根据算法需求来设置的。我们在编写程序前需要分析算法,同时确定必要的变量,在程序编写过程中如果发现需要添加临时变量时再临时添加。

我们从1+2=3这个基础算式开始分析,这个算式中除了等号外的每个块实际计算时都可能发生变化,所以都需要一个单独变量存储,这就确定了主要变量有:“X、Y、运算符、答”。(如图2)。

3. 观察程序运行图(如图1),运算过程和结果的显示是通过大字显示的变量实现的,需要一个“显示信息”变量,作为计算器的显示屏。这个变量需要勾选显示,并在舞台中右键设置为大字显示(如图3)。

4. 分析正常运算时的操作步骤,先输入前数X,再输入运算符,接着输入后数Y,点等号计算结果。

那么怎样判断输入的数字是需要存入前数X还是后数Y呢,这就需要一个记录是否已经输入运算符的变量“判断前后数字”,变量在程序开始时为0,当点击某个“运算符号”角色时,将这个变量设为1。之后输入的任意数字就存入Y直到点击“等于”角色(如图4)。

5. 在测试程序时我发现有个Bug。当点击“等于”计算出结果后,再点击数字会在结果后继续输入数字。

为了解决这个问题,我额外添加了一个变量,用来判断是否已经点过“等号”了。这个变量是“等待清除指示”,初始化时设为0,点击“等号”后设为1。然后除了复位键C和等号外的所有角色再添加一层判断,如果“等待清除指示=0”那么开始正常执行,否则意味着已经有计算结果无需执行并播放报错音。

6. 程序初始化和复位键C

在程序开始时需要对这些变量赋值。

无论前数X、后数Y还是答案初始值都不能是0,因为输入的数字和结果可能就是0。为了给程序判定这些值处于初始状态,我们给它们一个英文作为初始值,就用电脑报的简称“cpcw”吧,其实任意英文都可以。

“显示信息”初始时应该什么都不显示,所以删除其中的数字设定为“空”。

这些初始值在清除键C上编程设置,因为程序开始和计算完按C键重置时都需要这样初始化,所以同样的语句在点击绿旗和点击角色时都需要执行一次(如图5)。

这里我们为变量赋值为空是一个重要的知识点,请注意体会。

7. 数字角色编程

以数字键1为例,为0到9的数字键编程。完全编写好1之后,直接拖动代码块到另外的角色上(这个角色会抖动)放开就可以复制代码到同类角色上了。

点击数字1时,需要将数字1显示出来并根据当前情况将数值1赋值给前数X或后数Y。

如果“判断前后数字=0”成立,说明还没有输入过运算符,现在点击的数字都需要赋值给前数X。在赋值给前数X时,判断“X=cpcw”是否成立,成立说明X还是第一次赋值,需要先给X赋值为“空”。如果X里已经有数值,需要将1添加到X的末位。并显示X(如图6)。

否則赋值给后数Y(如图7)。

在完成基础功能后,外层再添加条件判断“等待清除指示=0”,等于0说明没有点击过等号可以执行,否则停止执行并播放错误提示音E Elec Bsaa。避免计算出结果后还可以输入数字的Bug(如图8)。

提示音需要在声音中找E Elec Bsaa并添加。拖放操作可以复制给其他需要用到这个错误提示音的角色。

由于需要判断的情况很多,在实际编写过程中代码是在完成基础赋值和显示功能后不断完善的,所以后续的情况判断就一层层包裹在核心功能之外了。看起来结构比较复杂,可以拆开一部分一部分的理解。

将1的代码块通过拖放操作复制给其他数字角色,修改图7中标红圈的3个位置为相应数字即可。这三处表示赋值给X、Y和显示信息末位。

8. 运算符角色编程

当点击运算符号后,把“判断前后数字”赋值为1,表示已經输入了运算符号,这样以后再按数字会把数值赋给后数Y。

根据点击符号不同,为变量“运算符”赋值“+、-、×、÷”。

以加号为例,运算符号总是在后数Y之前输入,所以判断当“Y=cpcw”也就是后数Y还没有输入的情况下,修改显示信息的值为“连接‘显示信息和‘+”。否则后数已经输入播放错误提示音(如图9)。

9. 等号编程

点击等号后,将“等待清除指示”设为1,表示已经执行过运算了,不能再继续输入数字了。

判断如果“答=cpcw”表示,变量“答”处于初始状态。可以进行后续计算,根据不同的运算符号判断执行相应的运算过程。否则发出错误提示音。

以加法为例,点击等号后,根据“运算符=+”判定需要进行加法运算,将“答”设为“X+Y”的结果。

将“显示信息”设为“‘显示信息和‘=”,把等号加入显示屏。

将“显示信息”设为“‘显示信息和‘答”,把加法计算结果加入显示屏。

其他运算方式以此类推。

10. 测试和优化

回顾我编写这个计算器的过程,更多的精力花在了处理各种不按套路输入引发的各种错误,俗称的找Bug上面了。

我先编写了数字1和加号和等号加法的部分,很快就实现了1+1=2的基本计算和正常显示。

然后开始各种胡乱点击测试异常,并解决测试过程中遇到的Bug。基本改好之后才复制代码给其他数字和符号,开始下一轮测试。

比如没有输入前数X就可以输入加号或已经输入后数Y之后还可以继续点加号,导致计算结果错误。解决办法就是添加“X=cpcw不成立”且“运算符=0”的判断,表示已经输入了X且没有输入运算符。添加“Y=cpcw”的判断,表示后数Y还没有输入。只有这些条件都成立时,才允许输入运算符号。

又比如在计算出结果后还可以输入数字的Bug。解决办法就是加入了一个新的变量“等待清除指示”记录是否已经点击过等号。这个解决办法引入了新的变量,是不是还可以在不引入新变量的基础上更巧妙地解决还需要更多的思考。

虽然表面上只是程序中的一条判断或一个辅助变量,但那背后都是为了解决Bug掉的头发啊,我秃了也变强了。

链接:https://pan.baidu.com/s/

1AoWxsbkb22eP5STc91SYRg

提取码:p30l

猜你喜欢

赋值变量符号
让阅读更方便的小符号
加减运算符号的由来
算法框图问题中的易错点
抽象函数难度降 巧用赋值来帮忙
利用赋值法解决抽象函数相关问题オ
草绳和奇怪的符号
中国符号,太美了!
分离变量法:常见的通性通法
学生为什么“懂而不会”
不可忽视变量的离散与连续