参考博文:

1.logo(程序设计语言)

2.Logo 简介_w3cschool

Logo 是一种易于学习的编程语言。它用于教学生和儿童如何编程计算机。它被开发用于处理单词列表。

如果想要安装logo编程软件,点击MSWLogo Downloads – Softronics Inc. (softronix.com)

下载setup kit安装即可

turtle

简单的 Logo 绘制命令可以前后移动 Turtle,也可以向右或向左转动。命令及其缩写如下:

  • fd – 前进
  • bk – 向后
  • rt – 右
  • lt – 左
  • cs – 清屏

可以使用这些命令的任一版本。除了cs命令,这些命令中的每一个都必须跟一个称为参数的值。fdbk的参数是单位;rtlt的角度可以是任何整数。旋转 360 度是完整的旋转,因此旋转 375 度1/15 度相同。

  • forward 60fd 60表示前进 60 步
  • right 90rt 90表示右转 90 度
  • left 90lt 90表示左转 90 度
  • back 60bk 60表示返回 60 步
  • clearscreencs表示擦除所有绘图。这将 Turtle 设置在中心

图形窗口有一个坐标系。中心的两个坐标(通常称为 x 和 y)的值为0、0。在东北角,它们是250、250;在东南角,它们是 250,-250。在西南角,它们是-250、-250;等等。如果 Turtle 试图走到屏幕的一侧,它会绕过去。右侧绕到左侧,顶部绕到底部。

turtle命令

现在让我们尝试一些命令。命令将每行发出一个,然后是回车。可以在命令窗口中连续键入其中几个命令,然后按回车符。对 Turtle 的效果是一样的。但是,如果您键入一个命令,该命令需要一个或多个输入并在下一行提供缺少的输入,Logo 将显示错误。

示例1:

1
2
# 尝试画一个领奖台
fd 40 rt 90 fd 40 lt 90 fd 40 rt 90 fd 40 rt 90 fd 40 lt 90 fd 40 rt 90 fd 40 rt 90 fd 120

image-20221011194845234

示例2:

1
2
# 尝试画一个正五边形
fd 60 rt 72 fd 60 rt 72 fd 60 rt 72 fd 60 rt 72 fd 60

image-20221011195053589

现在你可以尝试画出以下图形或者任何你想画的了

image-20221011195259241

控制turtle和笔

Logo 还有许多其他绘图命令,其中一些在下面给出。

  • pu - penup
  • pd - pendown
  • ht - hideturtle
  • dt - showturtle
  • setpensize

pendown 和 penup 命令分别告诉 turtle 在移动时在屏幕上留下墨迹或不留下墨迹。该hideturtle和showturtle命令隐藏或显示 turtle,但不影响其离开墨因为它移动的能力。home 命令使 turtle 返回到屏幕的中心。当 turtle 回到屏幕中心时,它可能会留下墨水。setpensize 命令决定绘图笔的大小。

  • penuppu表示拿起笔,因此您可以移动 turtle 而不会留下痕迹。
  • pendownpd表示放下笔,因此您可以移动 turtle 并留下轨迹。
  • hideturtleht表示隐藏 turtle,这样您就可以欣赏您的画作。
  • showturtlest表示显示 turtle,因此您可以继续绘图。
  • setpensize意味着它可以使笔更大,更容易看到。默认笔大小为–[1 1]

示例1:

1
2
# 设置笔的大小,是[1 1],中间有空格
setpensize [1 1] fd 40 setpensize [3 3] fd 40

image-20221011201718341

示例2:

1
2
3
# repeat表示重复, 4为重复次数
# 展示pu, pd功能
repeat 4[fd 30 pu fd 30 pd fd 30 rt 90]

image-20221011201922042

示例3:

1
2
# 展示ht, 默认st,如果你想重新显示turtle, 后面加上st就行了
repeat 4[fd 30 pu fd 30 pd fd 30 rt 90] ht

image-20221011202159256

turtle世界

Logo 还有许多其他附加绘图命令,其中一些在下面给出。

  • Home
  • cleartextct
  • label
  • setxy

label命令将单个单词作为带引号的字符串(例如“a_string”)或 [ ] 括号中不带引号的单词列表(例如 [Programming]),并将它们打印在 turtle 所在位置的图形窗口上. 让我们考虑以下代码。

1
label "Programming repeat 3 [rt 90 label "Programming ] ht

image-20221011202750309

setxy命令采用两个参数,第一个参数作为横坐标(水平轴)的值和第二个参数为纵坐标(垂直轴)的值。它将 turtle 放置在这些坐标处,可能在到达这些坐标时留下墨迹。

示例1:

1
setxy 60 60

image-20221011203557341

示例2:

1
setxy 60 60 pu setxy -60 60

image-20221011203925009

cleartext命令,缩写为ct,用于清除命令窗口的文本区域。

尝试一下下面的命令

1
cs pu setxy -60 60 pd home rt 45 fd 85 lt 135 fd 120

image-20221011204450563

当您从左到右阅读这些命令时,请对其进行解释。尝试找出结果。 以下是命令摘要表。

命令名称 目的
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
2
3
4
5
6
7
8
9
10
make "val1 100
make "val2 200
print :val1
100
print : val2
has no value
print :val1 + :val2
300
print :val1 - :val2
-100

logo运算符

Logo 提供了常用的加、减、乘、除算术运算,用符号+、-、*、/表示。这些操作中的每一个都会产生一个结果。如果对结果不做任何处理,例如打印它,Logo 将显示错误。

使用打印命令,可以在命令窗口中使用和打印算术运算的结果。以下屏幕截图中给出的示例演示了相同的内容。

其他有用的命令是:

  • sqrt - 它接受一个非负参数并返回其平方根。
  • power - 它需要两个参数,称为“a”和“b”,并生成 a 的 b 次幂。
  • ln - 它接受一个参数并返回其自然对数。
  • exp - 它需要一个参数并计算 e 的那个幂,e 是自然数 2.718281828。
  • log10 - 取其一个参数的以 10 为底的对数。
1
2
3
4
5
6
7
8
9
10
print sqrt 16
4
print power 10 3
1000
print ln 2
0.693147180559945
print exp 2
7.38905609893065
print log10 1000
3

算术运算符的优先级决定了它们的计算顺序。

注意: 打印60 * sqrt 2和打印sqrt 2 * 60会产生不同的答案。这里*运算符优先于 sqrt 运算符。因此,如果有选择,*将在 sqrt 之前完成,就像在第二种情况下一样。

logo重复

让我们假设我们想画一个边长为 100 的正方形,我们可以使用以下程序来做到这一点:

1
2
3
4
5
6
7
8
9
10
fd 100
rt 90
fd 100
rt 90
fd 100
rt 90
fd 100
rt 90
# 你可以写成下面的形式
repeat 4[fd 100 rt 90]

logo随机化

有时,计算出不可预测的结果很有趣。Logo 提供了一个随机程序来生成一个随机数。它有一个参数并产生一个随机统一选择的整数值,该值大于或等于 0 且小于其参数的值。因此,如果您想要一个 0 到 359 度之间的随机角度,您可以使用命令random 360来生成它。请记住,除非您对结果执行某些操作(例如打印),否则 Logo 将显示错误。

示例1:

1
2
print random 360
231

示例2:

1
repeat 100[fd random 80 rt 90]

image-20221011211802488

示例3:

1
repeat 1000[fd 10 rt random 360]

image-20221011212013978

logo程序

过程提供了一种封装命令集合的方法。一旦创建了过程,就可以像使用内置命令一样使用它。一个过程的“意义”就是它的各个命令的意义。

没有参数的过程在第一行有单词to(保留字)和过程名称。(Logo 中的保留字不能作为变量使用,有明确的含义和用途。)它在最后一行有保留字end

子程序是供另一个程序执行的命名步骤序列。子程序的其他名称是过程和函数。在 Logo 中,你告诉计算机如何做某事——例如:

1
2
3
to square
repeat 4 [fd 100 rt 90]
end

一旦我们向 Logo 描述了我们的过程,我们就可以在命令行上输入它的名称,就像我们对任何内置的东西所做的一样。在这种情况下,我们将在命令行上输入square,Logo 会查找命令以制作一个正方形。

单击显示Edall(用于编辑全部)的按钮以调出 Logo 的内置编辑器。(如果您的徽标没有 Edall 按钮,请在命令行中输入edall)。以下代码块具有子程序所需的结构。

1
2
3
to procedurename
steps of your procedure here
end

过程或子程序必须以to这个词开头,后面跟着一个我们想到的名字。下一步是键入我们将在命令行上编写的所有相同步骤。该过程必须以end一词结尾。所有注释或备注行都应以分号 ;开头。

我们不希望每个方格的大小都一样——我们想要多样性。在 Logo 中,我们创建了变量,我们可以更改其值。在以下示例中,我们将使用相同的平方程序,但稍作改动。

1
2
3
to square :n
repeat 4 [fd :n rt 90]
end

我们在命令行上给 Logo 一个:n的替换值,如下所示。

1
2
3
square 40
square 50
square 70

image-20221011213810341

logo递归过程

在递归过程中,过程中会有一个过程的递归调用。让我们考虑以下代码

1
2
3
4
5
6
7
# 螺旋线, 图形中n=30
to spiral_recur :n
if :n < 1 [stop]
fd :n
rt 20
spiral_recur 0.95 * :n
end

image-20221011214339527

logo决策

决策和变量相辅相成。程序需要能够根据情况改变课程。例如,下面是绘制螺旋的框架。它有一个循环,是前面显示的重复的变体,循环的主体供我们填写。

1
2
3
4
5
6
7
to spiral
make "n 1
while [:n < 100] [
make "n :n + 5
fd :n rt 90
]
end

上面的代码展示了 MSW Logo 语法的几个新特性。我们通过键入make将一个变量设置为一个新值,然后变量的名称前面是双引号"而不是冒号: ,如下所示。

1
make "n 1

不过,我们使用了一个变量,在它的名称前有一个冒号:

1
while [:n < 100]

while [condition]后括号内的代码被执行,而条件为真。当它不再为真时,因为(在这种情况下):n的值增长大于 100,执行括号后面的代码。

image-20221011220420163

现在,我们将讨论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
2
3
4
5
6
7
8
to randomwalk
repeat 100[
make "r random 3
if :r = 0 [fd 20]
if :r = 1 [rt 90 fd 20]
if :r = 2 [lt 90 fd 20]
]
end

image-20221011221139685

logo字符串

任何字母数字字符序列,例如americaemp1234等,都是字符串的示例。计算字符数是所有字符串过程中最基本的。问题stringlength "abc12ef的答案由以下过程给出:

1
2
3
4
5
6
7
8
9
10
to stringlength :s
make "inputstring :s
make "count 0
while [not emptyp :s] [
make "count :count + 1
print first :s
make "s butfirst :s
]
print (sentence :inputstring "has :count "letters)
end

在上面的过程中s是包含输入字符串的变量。变量inputstring包含输入字符串的副本。变量计数初始化为 0。在 while 循环中,条件检查字符串是否为空。在每个循环计数中,一个变量增加 1 以保持长度计数。语句print first :s仅打印存储在s中的字符串的第一个字符。

语句make "s butfirst :s,检索不包括第一个字符的子字符串。退出while循环后,我们打印了输入字符串的字符数或长度。

logo颜色

计算机屏幕使用红色、绿色和蓝色的光成分,因此它们有时被称为RGB 屏幕。 在 Logo 的设置菜单上,我们可以设置三个屏幕元素的颜色:

  • turtle 的笔
  • turtle 的填充物(就像围栏的油漆桶)
  • 画面背景

image-20221011221830591

我们通过左右移动这三个滑块来设置颜色。请记住,黑色是所有颜色的缺失,而白色是所有颜色的结合。混合光不像混合油漆。例如,如果您将红色和绿色颜料混合,则会得到浑浊的颜色。由于这是一台计算机,因此每种颜色都有一个内部数字表示。

滑动刻度的左端为零 (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
2
setpensize [5 5]
setpencolor [255 0 0]

当您使用滑块找到您喜欢的颜色时,您可以询问 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。

image-20221011222542070

好了,到此结束,有点像python里的turtle库,或许就是,再见!!!