参考博文:
Logo 是一种易于学习的编程语言。它用于教学生和儿童如何编程计算机。它被开发用于处理单词列表。
安装logo
如果想要安装logo编程软件,点击MSWLogo Downloads – Softronics Inc. (softronix.com)
下载setup kit安装即可
turtle
简单的 Logo 绘制命令可以前后移动 Turtle,也可以向右或向左转动。命令及其缩写如下:
fd
– 前进bk
– 向后rt
– 右lt
– 左cs
– 清屏
可以使用这些命令的任一版本。除了cs
命令,这些命令中的每一个都必须跟一个称为参数的值。fd
和bk
的参数是单位;rt
和lt
的角度可以是任何整数。旋转 360 度是完整的旋转,因此旋转 375 度与 1/15 度相同。
forward 60
或fd 60
表示前进 60 步right 90
或rt 90
表示右转 90 度left 90
或lt 90
表示左转 90 度back 60
或bk 60
表示返回 60 步clearscreen
或cs
表示擦除所有绘图。这将 Turtle 设置在中心
图形窗口有一个坐标系。中心的两个坐标(通常称为 x 和 y)的值为0、0。在东北角,它们是250、250;在东南角,它们是 250,-250。在西南角,它们是-250、-250;等等。如果 Turtle 试图走到屏幕的一侧,它会绕过去。右侧绕到左侧,顶部绕到底部。
turtle命令
现在让我们尝试一些命令。命令将每行发出一个,然后是回车。可以在命令窗口中连续键入其中几个命令,然后按回车符。对 Turtle 的效果是一样的。但是,如果您键入一个命令,该命令需要一个或多个输入并在下一行提供缺少的输入,Logo 将显示错误。
示例1:
1 | # 尝试画一个领奖台 |
示例2:
1 | # 尝试画一个正五边形 |
现在你可以尝试画出以下图形或者任何你想画的了
控制turtle和笔
Logo 还有许多其他绘图命令,其中一些在下面给出。
- pu - penup
- pd - pendown
- ht - hideturtle
- dt - showturtle
- setpensize
pendown 和 penup 命令分别告诉 turtle 在移动时在屏幕上留下墨迹或不留下墨迹。该hideturtle和showturtle命令隐藏或显示 turtle,但不影响其离开墨因为它移动的能力。home 命令使 turtle 返回到屏幕的中心。当 turtle 回到屏幕中心时,它可能会留下墨水。setpensize 命令决定绘图笔的大小。
- penup或pu表示拿起笔,因此您可以移动 turtle 而不会留下痕迹。
- pendown或pd表示放下笔,因此您可以移动 turtle 并留下轨迹。
- hideturtle或ht表示隐藏 turtle,这样您就可以欣赏您的画作。
- showturtle或st表示显示 turtle,因此您可以继续绘图。
- setpensize意味着它可以使笔更大,更容易看到。默认笔大小为–[1 1]。
示例1:
1 | # 设置笔的大小,是[1 1],中间有空格 |
示例2:
1 | # repeat表示重复, 4为重复次数 |
示例3:
1 | # 展示ht, 默认st,如果你想重新显示turtle, 后面加上st就行了 |
turtle世界
Logo 还有许多其他附加绘图命令,其中一些在下面给出。
Home
cleartext
或ct
label
setxy
label
命令将单个单词作为带引号的字符串(例如“a_string”)或 [ ] 括号中不带引号的单词列表(例如 [Programming]),并将它们打印在 turtle 所在位置的图形窗口上. 让我们考虑以下代码。
1 | label "Programming repeat 3 [rt 90 label "Programming ] ht |
setxy
命令采用两个参数,第一个参数作为横坐标(水平轴)的值和第二个参数为纵坐标(垂直轴)的值。它将 turtle 放置在这些坐标处,可能在到达这些坐标时留下墨迹。
示例1:
1 | setxy 60 60 |
示例2:
1 | setxy 60 60 pu setxy -60 60 |
cleartext
命令,缩写为ct
,用于清除命令窗口的文本区域。
尝试一下下面的命令
1 | cs pu setxy -60 60 pd home rt 45 fd 85 lt 135 fd 120 |
当您从左到右阅读这些命令时,请对其进行解释。尝试找出结果。 以下是命令摘要表。
命令名称 | 目的 |
---|---|
setx 100 | 将turtle的 x 坐标设置为 +100;将其移动到中心右侧 100 点;无垂直变化 |
setx -200 | 将turtle移动到中心左侧 200 点;无垂直变化 |
150 | 将turtle的 y 坐标设置为 150;将其移动到中心上方 150 点;无横向变化 |
sety - 50 | 将turtle移动到中心下方 50 点; 无横向变化 |
setxy 100 100 | 将turtle移动到 xy 坐标 (100,100) |
show xcor;show ycor | 报告turtle的 x 坐标;报告turtle的 y 坐标 |
setheading 0;seth 0 | 将turtle直指,“正午” |
seth 120 | 将turtle移动 120 度以指向四点钟位置 |
logo变量
变量是可以包含值的内存位置的名称。在计算机中,每个内存位置都有一个整数地址。由于很难记住包含程序使用的值的每个位置的地址,计算机科学家已经找到了给这些位置、符号名称的方法。一旦变量有了名称,我们就可以使用和操作它。
变量的名称是字母串。变量名可以包含字母(不区分大小写)、数字和下划线。变量名可以在计算中使用:
在它之前访问。让我们在屏幕截图中考虑以下示例。
示例:
1 | make "val1 100 |
logo运算符
Logo 提供了常用的加、减、乘、除算术运算,用符号+、-、*、/
表示。这些操作中的每一个都会产生一个结果。如果对结果不做任何处理,例如打印它,Logo 将显示错误。
使用打印命令,可以在命令窗口中使用和打印算术运算的结果。以下屏幕截图中给出的示例演示了相同的内容。
其他有用的命令是:
- sqrt - 它接受一个非负参数并返回其平方根。
- power - 它需要两个参数,称为“a”和“b”,并生成 a 的 b 次幂。
- ln - 它接受一个参数并返回其自然对数。
- exp - 它需要一个参数并计算 e 的那个幂,e 是自然数 2.718281828。
- log10 - 取其一个参数的以 10 为底的对数。
1 | print sqrt 16 |
算术运算符的优先级决定了它们的计算顺序。
注意: 打印60 * sqrt 2
和打印sqrt 2 * 60
会产生不同的答案。这里*
运算符优先于 sqrt 运算符。因此,如果有选择,*
将在 sqrt 之前完成,就像在第二种情况下一样。
logo重复
让我们假设我们想画一个边长为 100 的正方形,我们可以使用以下程序来做到这一点:
1 | fd 100 |
logo随机化
有时,计算出不可预测的结果很有趣。Logo 提供了一个随机程序来生成一个随机数。它有一个参数并产生一个随机统一选择的整数值,该值大于或等于 0 且小于其参数的值。因此,如果您想要一个 0 到 359 度之间的随机角度,您可以使用命令random 360
来生成它。请记住,除非您对结果执行某些操作(例如打印),否则 Logo 将显示错误。
示例1:
1 | print random 360 |
示例2:
1 | repeat 100[fd random 80 rt 90] |
示例3:
1 | repeat 1000[fd 10 rt random 360] |
logo程序
过程提供了一种封装命令集合的方法。一旦创建了过程,就可以像使用内置命令一样使用它。一个过程的“意义”就是它的各个命令的意义。
没有参数的过程在第一行有单词to
(保留字)和过程名称。(Logo 中的保留字不能作为变量使用,有明确的含义和用途。)它在最后一行有保留字end
。
子程序是供另一个程序执行的命名步骤序列。子程序的其他名称是过程和函数。在 Logo 中,你告诉计算机如何做某事——例如:
1 | to square |
一旦我们向 Logo 描述了我们的过程,我们就可以在命令行上输入它的名称,就像我们对任何内置的东西所做的一样。在这种情况下,我们将在命令行上输入square
,Logo 会查找命令以制作一个正方形。
单击显示Edall(用于编辑全部)的按钮以调出 Logo 的内置编辑器。(如果您的徽标没有 Edall 按钮,请在命令行中输入edall
)。以下代码块具有子程序所需的结构。
1 | to procedurename |
过程或子程序必须以to
这个词开头,后面跟着一个我们想到的名字。下一步是键入我们将在命令行上编写的所有相同步骤。该过程必须以end
一词结尾。所有注释或备注行都应以分号 ;
开头。
我们不希望每个方格的大小都一样——我们想要多样性。在 Logo 中,我们创建了变量,我们可以更改其值。在以下示例中,我们将使用相同的平方程序,但稍作改动。
1 | to square :n |
我们在命令行上给 Logo 一个:n
的替换值,如下所示。
1 | square 40 |
logo递归过程
在递归过程中,过程中会有一个过程的递归调用。让我们考虑以下代码
1 | # 螺旋线, 图形中n=30 |
logo决策
决策和变量相辅相成。程序需要能够根据情况改变课程。例如,下面是绘制螺旋的框架。它有一个循环,是前面显示的重复的变体,循环的主体供我们填写。
1 | to spiral |
上面的代码展示了 MSW Logo 语法的几个新特性。我们通过键入make
将一个变量设置为一个新值,然后变量的名称前面是双引号"
而不是冒号:
,如下所示。
1 | make "n 1 |
不过,我们使用了一个变量,在它的名称前有一个冒号:
1 | while [:n < 100] |
while [condition]
后括号内的代码被执行,而条件为真。当它不再为真时,因为(在这种情况下):n
的值增长大于 100,执行括号后面的代码。
现在,我们将讨论if 语句的使用,它具有仅在给定条件为真时才会执行的代码。
它还显示了一个生成随机数的内置徽标。语句random 3在随机序列中任意生成任意数字 0 或 1 或 2。然后程序决定“随机”走哪条路。生成的随机数将保存在 r
中,稍后将根据变量r
的值执行 if 语句之一,这将满足条件。因此,如果:
r
的值为 0,则将执行[fd 20]。r
的值为 1,则将执行[rt 90 fd 20]。r
的值为 2,则将执行[lt 90 fd 20]。
代码:
1 | to randomwalk |
logo字符串
任何字母数字字符序列,例如america
、emp1234
等,都是字符串的示例。计算字符数是所有字符串过程中最基本的。问题stringlength "abc12ef
的答案由以下过程给出:
1 | to stringlength :s |
在上面的过程中s
是包含输入字符串的变量。变量inputstring
包含输入字符串的副本。变量计数初始化为 0。在 while 循环中,条件检查字符串是否为空。在每个循环计数中,一个变量增加 1 以保持长度计数。语句print first :s
仅打印存储在s
中的字符串的第一个字符。
语句make "s butfirst :s
,检索不包括第一个字符的子字符串。退出while循环后,我们打印了输入字符串的字符数或长度。
logo颜色
计算机屏幕使用红色、绿色和蓝色的光成分,因此它们有时被称为RGB 屏幕。 在 Logo 的设置菜单上,我们可以设置三个屏幕元素的颜色:
- turtle 的笔
- turtle 的填充物(就像围栏的油漆桶)
- 画面背景
我们通过左右移动这三个滑块来设置颜色。请记住,黑色是所有颜色的缺失,而白色是所有颜色的结合。混合光不像混合油漆。例如,如果您将红色和绿色颜料混合,则会得到浑浊的颜色。由于这是一台计算机,因此每种颜色都有一个内部数字表示。
滑动刻度的左端为零 (0)。右端是 255,这有点像计算机的 99(它是 2 8 - 1)。因此黑色是[0 0 0],红色是[255 0 0],绿色是[0 255 0],蓝色是[0 0 255]。你可以在这些颜色之间制作任何东西,在所有这些颜色中,有256 * 256 * 256
种可能的颜色。那是2^8 * 2^8 * 2^8
,或 24 位颜色 — 机器内部的 24 位二进制数字。 以下命令会给你一个大红笔 -
1 | setpensize [5 5] |
当您使用滑块找到您喜欢的颜色时,您可以询问 Logo 它是什么:选择笔的颜色,然后在命令窗口中输入以下命令。
1 | show pencolor |
您可以使用以下步骤制作彩色方块 -
步骤 1 - 使用以下命令绘制边长为 40 的正方形。
1 | repeat 4 [fd 40 rt 90] |
步骤 2 - 使用以下命令完成。
1 | pu |
步骤 3 - 转到正方形内的一个点。例如,使用以下命令将海龟放置在坐标 (20, 20) 处。
1 | setxy 20 20 |
步骤 4 - 用设置的泛色填充正方形。例如,要将泛光颜色设置为蓝色,请使用以下命令。
1 | setfloodcolor [0 0 255] |
下表列出了更多与颜色和笔相关的命令。
颜色和笔命令 | 命令的目的 |
---|---|
setpencolor [rgb];setpc [rgb] | 设置turtle笔的颜色 rgb 是 [0, 255] 范围内的数字 |
setfloodcolor [rgb]; setfc [rgb] | 设置批注区域的颜色 |
设置屏幕颜色 [rgb]; 设置sc [rgb] | 设置背景颜色 |
显示笔色; 显示泛色; 显示屏幕颜色 | 指定命名项的 [rgb] 的当前值 |
填充 | 在光标位置倾倒一桶当前的泛色 |
尝试执行以下命令集:
- cs - 清除屏幕。
- home - 将turtle放置在初识位置。
- setpensize [5 5] - 设置笔的大小。
- setpencolor [255 0 0] - 将笔颜色设置为红色。
- setfloodcolor [0 0 255] - 将泛色设置为蓝色。
- setscreencolor [0 255 0] - 将屏幕颜色设置为绿色。
- repeat 4 [fd 40 rt 90] - 画一个边长为 40 的正方形。
- pu - 拿起钢笔。
- setxy 20 20 - 将turtle放在坐标 (20, 20) 处。
- fill- 用设置的泛光蓝色填充正方形。
- ht - 隐藏turtle。
好了,到此结束,有点像python里的turtle库,或许就是,再见!!!