第三课:变量-放数据的“容器”

· 了解变量是什么以及为什么以及何时在程序中使用它们。

· 学习如何创建变量,将变量设置为初始值,以及在micro:bit程序中更改变量的值。

· 了解如何创建有意义且易于理解的变量名称。

· 了解变量一次只能保存一个值。

· 了解当您更新或更改变量所持有的值时,新值将替换先前的值。

· 了解如何使用基本数学块进行加,减,乘和除变量。

· 运用上述知识和技能创建一个独特的程序,使用变量作为程序的一个组成部分。

计算机程序处理信息。在计算机程序中输入,存储和使用的一些信息具有恒定的值,这意味着它在整个程序过程中不会改变。数学常量的一个例子是'pi',因为'pi'有一个永不改变的值。其他信息的值在程序运行期间会发生变化或变化。程序员创建变量来保存可能发生变化的信息的价值。在游戏程序中,可以创建变量以保持玩家的当前分数,因为该值将在游戏过程中改变(希望!)。

让学生思考日常生活中的一些信息,这些信息是常数,其他信息是变量。

哪些信息的值在一天的过程中不会改变(常量)?

哪些信息具有在一天的过程中发生变化的值(变量)常量和变量可以是数字和/或文本。

例子

在一个上学日......

常数:星期几,年份,学生姓名,学校地址

变量:温度/天气,当前时间,当前等级,无论是站立还是坐着......

变量包含特定类型的信息。micro:bit的变量可以跟踪数字,字符串,布尔值和精灵。第一次使用变量时,会指定其类型以匹配它所持有的任何内容。从那时起,您只能将该变量的值更改为该相同类型的另一个值。

数字变量可以保存数字数据,例如年份,温度或加速度。

字符串变量包含一串字母数字字符,例如人名,密码或星期几。

布尔变量只有两个值:true或false。例如,只有当名为gameOver的变量为false 时,才会发生某些事情。

精灵是一个特殊变量,它表示屏幕上的单个点,并为点当前所在的行和列保存两个单独的值。


Showing 1-2 of 2 items.
视听
(1-5分钟)

Unplugged:保持得分

此活动的目的是通过配对和播放Rock Paper Scissors来体验创建和处理变量

摇滚纸剪刀手

让学生在纸上记录他们的分数。您还可以让学生以三人一组的形式进行游戏,第三个学生充当记分员。

学生将记录每位球员获胜的次数以及球员打成的次数。

:让学生玩Rock Paper Scissors大约一分钟。完成后,要求学生将他们的分数和他们玩过的“回合”加起来。

再次播放:告诉学生他们现在将重新开始并再玩一次。完成后,要求学生将他们的分数和他们玩过的“回合”加起来。

让一些学生分享他们如何跟踪球员得分。可能会有一些变化,但大多数人会记下球员的名字,然后在名称旁边或下面,代表每个球员的“胜利”。而且他们可能已经为记录关系做了一个单独的地方。

评分表样本记分表

询问学生评分表的哪些部分代表常数,这些值在游戏过程中不会改变。

示例:玩家的名字是常数。

询问学生评分表的哪些部分代表变量,这些值在游戏过程中会发生变化。

示例:球员的胜利数量是变量。


准备活动
(1-5分钟)

活动:记分员

这个微观:位活动指导学生创建一个包含三个变量的程序,这些变量将保持他们的Rock Paper Scissors游戏的得分

告诉学生他们将创建一个程序,作为他们下一个Rock Paper Scissors游戏的记分员。他们需要为在游戏过程中改变的记分部分创建变量。这些变量是什么?

  • 第一个玩家获胜的次数

  • 第二位玩家获胜的次数

  • 球员打成平手的次数

创建和命名变量:引导学生为其变量创建有意义的名称。

  • 什么是变量的唯一且清晰的名称,将跟踪玩家A获胜的次数?

  • 学生的建议可能是:PAWPlayerAAButtonPressAButtonCountPlayerAWins...

  • 讨论为什么(或为什么不)不同的建议明确变量将具有什么价值。通常,变量名称应清楚地描述它们所持有的信息类型。

在MakeCode,从变量菜单,制作和命名这三个变量:PlayerAWinsPlayerBWinsPlayersTie

创建一个新变量

设置新的变量名称

初始化变量值

为变量赋予初始值非常重要。初始值是每次程序启动时变量将保存的值。对于我们的计数器程序,我们将在程序开始时为每个变量赋值0(零)。

000将PlayerAWins ▾设为将PlayerBWins ▾设为将PlayersTie ▾设为当开机时

更新变量值

在我们的计划中,我们希望记录每位玩家获胜的次数以及他们打成的次数。我们可以使用按钮A和B来执行此操作。

伪代码:

  • 按下按钮A记录玩家A的胜利

  • 按下按钮B记录玩家B的胜利

  • 同时按下按钮A和按钮B以记录平局

我们已经初始化了这些变量,现在需要编写代码来更新每轮游戏的值。

  • 每次记分员按下按钮A以记录玩家A的胜利时,我们希望将1添加到变量的当前值PlayerAWins

  • 每次记分员按下按钮B,记录玩家B的胜利时,我们想要将1添加到变量的当前值PlayerBWins

  • 每次记分员同时按下按钮A和按钮B以记录平局时,我们希望将1添加到变量的当前值PlayersTie

从Input菜单中,将'on button A pressed'事件处理程序中的3拖到编程工作区。

onButtonPressed A.

留下一个带'A'的街区。使用块中的下拉菜单为第二个块选择“B”,为第三个块选择“A + B”。

从Variables菜单中,将'change item by 1'块中的3个拖到编程工作区。

改变变量

将一个更改块放入每个按钮按下的块中。

从更改块的下拉菜单中选择适当的变量。

1以为幅度更改PlayerAWins ▾当按钮A ▾被按下时1以为幅度更改PlayerBWins ▾当按钮B ▾被按下时1以为幅度更改PlayersTie ▾当按钮A + B ▾被按下时

用户反馈

每当记分员按下按钮A,按钮B或两个按钮时,我们将向用户提供视觉反馈,确认用户按下了按钮。我们可以通过编写我们的程序来显示:

  • 每次用户按下按钮A以记录玩家A的胜利时,'A',

  • 每次用户按下按钮'B'记录玩家B的胜利时,'B',

  • 每次用户同时按下按钮A和按钮B以记录平局时的'T'。

我们可以使用'show leds'块或'show string'块显示'A','B'或'T'。

显示LED

在这个例子中,我们使用了“show leds”块。

1清空屏幕显示 LED   ■  ■  ■     ■    ■     ■  ■  ■     ■    ■     ■    ■  以为幅度更改PlayerAWins ▾当按钮A ▾被按下时1清空屏幕显示 LED   ■  ■       ■    ■     ■  ■  ■     ■    ■     ■  ■    以为幅度更改PlayerBWins ▾当按钮B ▾被按下时1清空屏幕显示 LED   ■  ■  ■       ■         ■         ■         ■    以为幅度更改PlayersTie ▾当按钮A + B ▾被按下时

请注意,我们在显示“A”,“B”或“T”后添加了“清除屏幕”块。如果我们没有清除屏幕,您认为会发生什么?尝试一下。

显示变量的最终值

为了完成我们的程序,我们可以添加告诉micro:bit的代码来显示变量的最终值。由于我们已经使用了按钮A和B,我们可以使用'on shake'事件处理程序块来触发此事件。我们可以使用'show string','show leds','pause'和'show number'块以清晰的方式显示这些最终值。这是完整的计划。

1清空屏幕显示 LED   ■  ■  ■     ■    ■     ■  ■  ■     ■    ■     ■    ■  以为幅度更改PlayerAWins ▾当按钮A ▾被按下时1清空屏幕显示 LED   ■  ■       ■    ■     ■  ■  ■     ■    ■     ■  ■    以为幅度更改PlayerBWins ▾当按钮B ▾被按下时1清空屏幕显示 LED   ■  ■  ■       ■         ■         ■         ■    以为幅度更改PlayersTie ▾当按钮A + B ▾被按下时Wins:PlayerAWins ▾1000PlayerBWins ▾1000Ties:PlayersTie ▾1000清空屏幕暂停 (ms)显示数字显示字符串暂停 (ms)显示数字显示 LED   ■  ■       ■    ■     ■  ■  ■     ■    ■     ■  ■    暂停 (ms)显示数字显示 LED   ■  ■  ■     ■    ■     ■  ■  ■     ■    ■     ■    ■  显示字符串当振动 ▾000将PlayersTie ▾设为将PlayerBWins ▾设为将PlayerAWins ▾设为当开机时

试试看!

将Scorekeeper程序下载到micro:bit,并让学生使用他们的micro:bits作为记分员来玩最后一轮Rock Paper Scissors!

“添加”数学运算

我们可以使用此程序收到的输入更多。我们可以对变量使用数学运算。

示例:也许您想跟踪并向玩家显示已播放的“回合”总数。为此,我们可以添加存储在我们创建的变量中的值,以跟踪每个玩家获胜的次数以及他们并列的次数。

为了做到这一点,我们可以在'on shake'事件处理程序下将代码添加到我们的程序中。

  • 首先,显示一个字符串,向玩家显示以下总和代表播放的总轮数。

  • 我们的节目将增加存储在变量的值PlayerAWinsPlayerBWinsPlayersTie然后显示这个数学运算的总和。

  • 数学运算加法,减法,乘法和除法的块列在工具箱的“数学”部分中。注意:即使为这4个操作显示了4个块,您也可以从四个块中的任何一个访问四个操作中的任何一个,也可以从这些块访问指数操作。

添加块

操作员选择器

  • 将默认值零替换为我们要一起添加的变量的名称。请注意,因为我们在一起添加三个变量,所以需要第二个数学块。首先,我们为PlayerAWins添加值PlayerBWins,然后添加PlayersTie

Total rounds played:PlayerAWins ▾PlayerBWins ▾ + ▾PlayersTie ▾ + ▾显示数字显示字符串当振动 ▾

  • 保存,下载并再次尝试该程序,以确保它正确运行并显示每个变量的正确数字。

请记住,micro:bit是一个处理输入并以某种方式将其显示为输出的设备。通过将值存储在变量中,您可以对提供有用信息的数据执行数学运算。

还有哪些数学运算可以从存储在这些变量中的值中提供有价值的信息?

例子:

  • 计算并显示玩家的胜出和/或损失占所有轮次的百分比。

  • 计算显示绑定游戏的数量占所有轮次的百分比。