使用 Linkbot 学习 Python 3 / 谁在那里?
Lesson Information **To Be Added** Vocabulary: Necessary Materials and Resources: Computer Science Teachers Association Standards: 5.3.A.CD.4: Compare various forms of input and output. Common Core Math Content Standards: Common Core Math Practice Standards: Common Core English Language Arts Standards:
现在,您已准备好创建更复杂的程序。在您的 Python 编辑器中输入以下内容:
print("Halt!")
user_input = input("Who goes there?")
print("You may pass,", user_input)
运行您的程序,确保它显示以下内容:
Halt! Who goes there? Linkbot You may pass, Linkbot
注意:在通过按键盘上的 F5 运行代码后,Python Shell 仅会输出
Halt! Who goes there?
在 Python Shell 中输入您的姓名并按回车键以获得剩余的输出。
您的程序将由于 input()
语句而有所不同。请注意,在运行程序时,您必须输入您的姓名并按“Enter”键。程序将通过显示包含您姓名的文本进行响应。这是一个关于 _输入_ 的示例。程序到达某个点后,会等待用户输入更多数据以便程序将其包含在内。
程序包含的用户数据存储在一个 _变量_ 中。在前面的程序中,user_input
是一个 _变量_。变量就像一个可以存储数据片段的盒子。该程序演示了变量的使用
(有用的简短说明,Aaron,“这可能现在没有太大意义,但在您阅读关于变量的段落时,请参考它。”)
a = 123.4
b23 = 'Barobo'
first_name = "Linkbot"
b = 432
c = a + b
print("a + b is",c)
print("first_name is",first_name)
print("The Linkbot was created by ",b23)
这是输出
a + b is 555.4 first_name is Linkbot The Linkbot was created by Barobo
变量存储数据,例如数字、单词、短语或您选择让它存储的任何内容。上面程序中的变量是 a
、b23
、first_name
、b
和 c
。两种基本类型的变量是 _数字_ 和 _字符串_。_数字_ 只是一个数学上的数值,例如 7 或 89 或 -3.14。_ 在上面的示例中,a
、b
,甚至 c
都是数字变量。c
被认为是数字变量,因为结果是一个数字。_字符串_ 是字母、数字和其他字符的序列。_ 在此示例中,b23
和 first_name
是存储字符串的变量。Barobo
、Linkbot
、a + b is
、first_name is
和 The Linkbot was created by
是此程序中的字符串。这些字符用 "
或 '
括起来。程序中使用的其他符号是表示数字的变量。请记住,变量用于存储值,它们不使用标点符号("
和 '
)。如果您想使用实际的 _值_,则 _必须_ 使用这些标点符号。请参阅下一个示例。
value1 == Pim
value2 == "Pim"
这两行代码乍一看似乎相同,但它们是不同的。在第一个代码中,Python 检查存储在变量 value1
中的值是否与存储在 _变量_ Pim
中的值相同。在第二个代码中,Python 检查字符串(实际的字母 P
、i
和 m
)是否与 value2
中的字符串相同(关于字符串和 ==
的更多解释将在稍后给出)。
回顾一下,有一些称为变量的盒子,数据会进入这些盒子。回想一下前面的示例。计算机看到一行代码,例如 first_name = "Linkbot"
,它会将其解读为“将字符串 Linkbot
放入盒子或变量 first_name
中”。然后,计算机看到语句 c = a + b
,它会将其解读为“将 a + b
或 123.4 + 432
(等于 555.4
)的总和放入 c
中”。语句 a + b
的右侧被 _计算_,这意味着这两个项相等,结果存储在左侧的变量 c
中。换句话说,语句的一侧被 _分配_ 给另一侧。这个过程称为 _赋值_。
代码中的单个等号使该行代码成为一个语法语句。例如,apple = banana
表示“apple 等于 banana”。通过以这种方式编写代码,apple 被分配给 banana,并且在程序中它们被认为相等。您实际上是在告诉程序这两个项相等,即使实际上并非如此。
两个等号放在一起使该行代码成为一个计算机将回答的问题。例如,apple == banana
表示“apple 等于 banana 吗?”当然,答案应该是“否”,除非您之前错误地将 apple 分配给了 banana。
(有用的简短说明,Aaron,“请注意您使用的 =
的数量,因为这会彻底改变您的程序!”)
这是另一个变量使用示例
a = 1
print(a)
a = a + 1
print(a)
a = a * 2
print(a)
这是输出
1 2 4
即使同一个变量出现在等号的两侧(例如,spam = spam),计算机仍然将其解读为“首先找出要存储的数据,然后找出数据的存储位置”。
尝试另一个程序
number = float(input("Type in a number: "))
integer = int(input("Type in an integer: "))
text = input("Type in a string: ")
print("number =", number)
print("number is a", type(number))
print("number * 2 =", number * 2)
print("integer =", integer)
print("integer is a", type(integer))
print("integer * 2 =", integer * 2)
print("text =", text)
print("text is a", type(text))
print("text * 2 =", text * 2)
输出应为
Type in a number: 12.34 Type in an integer: -3 Type in a string: Hello number = 12.34 number is a <class 'float'> number * 2 = 24.68 integer = -3 integer is a <class 'int'> integer * 2 = -6 text = Hello text is a <class 'str'> text * 2 = HelloHello
请注意,number
是用 float(input())
创建的,而 text
是用 input()
创建的。input()
返回一个字符串,而函数 float
从字符串返回一个数字。int
返回一个整数,即没有小数点的数字。当您希望用户输入小数时,请使用 float(input())
;如果您希望用户输入整数,请使用 int(input())
;但如果您希望用户输入字符串,请使用 input()
。
程序的后半部分使用 type()
函数来识别变量的类型。数字的类型为 int
或 float
,分别代表 _整数_ 和 _浮点数_(主要用于小数)。文本字符串的类型为 str
,代表 _字符串_。整数和浮点数可以由数学函数进行运算,字符串则不能。请注意,当 Python 将数字乘以整数时,会发生预期的事情。但是,当字符串乘以整数时,结果是生成字符串的多个副本(即,text * 2 = HelloHello
)。
字符串操作与数字操作不同。此外,某些操作只适用于数字(整数和浮点数),如果使用字符串,则会引发错误。以下是一些交互模式示例,说明这一点。
>>> print("This" + " " + "is" + " joined.") This is joined. >>> print("Ha, " * 5) Ha, Ha, Ha, Ha, Ha, >>> print("Ha, " * 5 + "ha!") Ha, Ha, Ha, Ha, Ha, ha! >>> print(3 - 1) 2 >>> print("3" - "1") Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for -: 'str' and 'str' >>>
以下是部分字符串操作的列表
操作 | 符号 | 示例 |
---|---|---|
重复 | *
|
"i" * 5 == "iiiii"
|
连接 | +
|
"Hello, " + "World!" == "Hello, World!"
|
每个 Linkbot 都有两个关节,它可以移动这些关节来执行各种任务。有时,关节上可能连接有轮子,这样 Linkbot 就可以像一辆双轮车一样四处行驶。或者,关节上可能连接着一个夹钳,这将允许 Linkbot 抓取物体。
Linkbot 上的每个关节都印有数字。从“顶向下”的角度直接观察 Linkbot,关节 1 在左侧,关节 2 朝向您,关节 3 在右侧。Linkbot-L 只有关节 1 和 2,而 Linkbot-I 只有关节 1 和 3。让我们学习如何移动 Linkbot 上的关节!
moveMotor.py
# This program moves Joint 1 on a Linkbot by an amount
# specified by the user
import barobo
myDongle = barobo.Dongle()
myDongle.connect()
robotID = input('Enter Linkbot ID: ')
myLinkbot = myDongle.getLinkbot(robotID)
degrees = float(input("Degrees to rotate Joint 1: "))
myLinkbot.moveJoint(1, degrees)
当您运行此示例时,您应该会注意到关节 1 移动。如果您输入“90”,您应该会看到关节逆时针旋转 90 度。如果您输入“-90”,您应该会看到关节顺时针旋转 90 度。在运行此程序时,请注意输入非常大的数字,否则您可能需要等待一段时间才能使关节停止移动。
Rate_times.py
# This program calculates rate and distance problems
print("Input a rate and a distance")
rate= float(input("rate: "))
distance = float(input("Distance: "))
print("Time:", (distance / rate))
示例运行
Input a rate and a distance Rate: 5 Distance: 10 Time: 2.0
Input a rate and a distance Rate: 3.52 Distance: 45.6 Time: 12.9545454545
Area.py
# This program calculates the perimeter and area of a rectangle
print("Calculate information about a rectangle")
length = float(input("Length: "))
width = float(input("Width: "))
print("Area:", length * width)
print("Perimeter:", 2 * length + 2 * width)
示例运行
Calculate information about a rectangle Length: 4 Width: 3 Area: 12.0 Perimeter: 14.0
Calculate information about a rectangle Length: 2.53 Width: 5.2 Area: 13.156 Perimeter: 15.46
Temperature.py
# This program converts Fahrenheit to Celsius
fahr_temp = float(input("Fahrenheit temperature: "))
print("Celsius temperature:", (fahr_temp - 32.0) * 5.0 / 9.0)
示例运行
Fahrenheit temperature: 32 Celsius temperature: 0.0
Fahrenheit temperature: -40 Celsius temperature: -40.0
Fahrenheit temperature: 212 Celsius temperature: 100.0
Fahrenheit temperature: 98.6 Celsius temperature: 37.0
编写一个程序,从用户那里获取两个字符串变量和两个数字变量,将它们连接在一起(不留空格)并显示字符串,然后在新行上将两个数字相乘。
编写一个程序,从用户那里获取两个字符串变量和两个数字变量,将它们连接在一起(不留空格)并显示字符串,然后在新行上将两个数字相乘。
string1 = input('String 1: ')
string2 = input('String 2: ')
float1 = float(input('Number 1: '))
float2 = float(input('Number 2: '))
print(string1 + string2)
print(float1 * float2)
编写一个程序,从用户那里获取两个数字变量;每个变量都是以度为单位的角度。程序获取这两个数字后,它使 Linkbot 的关节 1 旋转第一个数字指定的量,然后使关节 3(或者如果你是 Linkbot-L 则为关节 2)旋转第二个数字指定的量。
# This program moves Joints 1 and 3 on a Linkbot by an amount
# specified by the user
import barobo
myDongle = barobo.Dongle()
myDongle.connect()
robotID = input('Enter Linkbot ID: ')
myLinkbot = myDongle.getLinkbot(robotID)
degrees1 = float(input("Degrees to rotate Joint 1: "))
degrees3 = float(input("Degrees to rotate Joint 3: "))
myLinkbot.moveJoint(1, degrees1)
myLinkbot.moveJoint(3, degrees3)