变量#
介绍#
变量存储数据,并允许您在整个程序中重用和操作数据。Python 是一种动态类型语言,这意味着您无需显式声明变量的类型。相反,它会根据赋值自动推断变量的类型。例如:
angle = 90 # angle is an integer
dist = "Distance: " # dist is a string
steps = 2.5 # steps is a float
Python 也是强类型的,这意味着如果不显式转换,就无法对不兼容的类型执行操作。例如:
controller = 1 # controller is an integer
modules = "3" # modules is a string
result = controller + modules # Creates a TypeError
要解决此类问题,您必须明确转换类型(如果适用):
controller = 1 # controller is an integer
modules = "3" # modules is a string
# Convert modules to an integer before adding.
result = int(modules) + controller
本 API 讲解了 Python 中常见的变量类型。虽然列表并不详尽,但涵盖了您在实际工作中最可能使用的类型。
局部变量 – 在函数内部声明并仅在该范围内使用;最适合临时或孤立的值。
全局变量 – 在任何函数外部声明并在整个项目中使用;适合在函数之间共享数据。
整数 – 用于计数、距离或任何没有小数的整数。
浮点数 – 带有小数点的数字,适用于精确测量或计算。
字符串 – 文本值,用于消息、标签或显示可读输出。
Boolean –
True
orFalse
values for logic and decision-making.NoneType – 表示“尚无值”,通常用作占位符。
范围 – 自动生成数字序列,最常用于循环。
列表 – 可变的项目集合;适用于存储对象或传感器读数等值组。
2D 列表 – 列表的列表;非常适合表示行、网格或类似表格的数据。
元组 – 不可更改的固定值序列;适用于分组的、不变的数据。
声明和分配变量#
To create a variable, simply assign a value to a name using the =
operator:
distance = 100
命名变量时,必须遵守以下规则:
名称不能包含特殊字符(例如感叹号)。
名称不能以数字开头。
名称中不能使用空格。
该名称不能是 VEXcode 中的保留字(例如 Drivetrain)。
Local Variables#
局部变量是在函数或代码块内部定义的。它们只能在该函数或代码块的范围内访问,在其外部不可见。
def show_local():
# This variable only exists inside this function.
message = "I'm local!"
controller.screen.print(message)
show_local()
局部变量通常用于存储仅与特定函数或程序部分相关的临时值。
Global Variables#
全局变量 定义在任何函数或块的外部。它们可以在程序的任何地方访问和读取,包括函数内部。
注意:全局变量可以在程序的任何位置访问,这使得它们可以方便地跨函数共享数据。然而,过度依赖全局变量可能会导致意想不到的副作用,因为在程序的某个部分对变量的更改可能会对其他部分产生不可预测的影响。因此,如果可能的话,通常优先使用局部变量,因为它们将变量的作用域限制在其定义的特定函数内。这可以降低冲突的可能性,并使调试更容易。
# The variable is defined outside a function.
message = "I'm global!"
def show_global():
# You can access 'message' inside a function.
controller.screen.print(message)
controller.screen.next_row()
show_global()
# And you can access 'message' outside a function.
controller.screen.print(message)
By default, assigning a value to a variable inside a function creates a local variable. To modify a global variable inside a function, you must explicitly declare it using the global
keyword.
# Define the global variable.
count = 0
def increase_count():
# Use the global keyword to let you modify the
# global variable.
global count
count = count + 1
controller.screen.print(f"Count: {count}")
controller.screen.next_row()
increase_count()
increase_count()
数据类型#
Python 变量可以存储各种类型的数据,每种类型都适用于不同的用例。以下是最常用的类型:
Integer#
整数是一个整数。
distance = 50
drone.take_off(climb_to=500)
# Move the robot forward for the variable value in mm.
drone.climb_for(direction=DOWN, distance=distance, velocity=50, units=MM)
wait(2, SECONDS)
# Add to the variable and move forward the new value,
# for 100mm total.
distance = distance + 50
drone.climb_for(direction=UP, distance=distance, velocity=50, units=MM)
wait(2, SECONDS)
drone.land()
Float#
浮点数 是小数。
# Store a value with decimal points.
raw_value = 0.88
# Print the decimal value as a percentage.
controller.screen.print(raw_value * 100, "%")
String#
字符串是字符序列,通常用于文本。
# Set the variable to a string then print the string.
message = "Ready!"
controller.screen.print(message)
Note: A string must always be enclosed within matching quotation marks, either single ( ’
) or double ( ”
). You can use either style, but the opening and closing marks must match.
Boolean#
A Boolean represents True
or False
values.
# Set the state of the variable.
delivered = False
# Print different messages depending on the Boolean.
if delivered:
controller.screen.print("Package delivered!")
else:
controller.screen.print("Delivering...")
布尔值可以在项目的任何时候改变。
# Print the value of the delivered variable
delivered = True
controller.screen.print(delivered)
wait(2,SECONDS)
# Clear the screen and print the value of the variable again
controller.screen.clear_screen(color=GREEN)
delivered = False
controller.screen.print(delivered)
NoneType#
NoneType 表示 Python 中不存在某个值。
# Write what the controller's task should be as a string
current_task = None
# Check if a task is assigned
if current_task is None:
controller.screen.print("No task!")
else:
controller.screen.print(f"Task: {current_task}")
Range#
范围 是一个数字序列,通常用于循环中生成数字序列。其格式如下:
range(start, stop, step)
start 值包含起始值(序列从此处开始)。默认值为 0。
stop 值是独占的(序列在此数字之前停止)。
步长 决定每个数字增加(或减少)的幅度。默认值为 1。
# Move back and forth four times then land.
drone.take_off(climb_to=500)
for i in range(4):
drone.move_for(direction=0, distance=500, velocity=50, units=MM)
wait(1, SECONDS)
drone.move_for(direction=180, distance=500, velocity=50, units=MM)
wait(1, SECONDS)
drone.land()
# Count by 2 starting at 1 and ending before 12.
for index in range(1, 12, 2):
# Print the values on the screen with each loop.
controller.screen.print(index)
controller.screen.next_row()
List#
列表 是一种多功能结构,可以在单个变量中存储多个值。它的内容可以轻松修改、访问或迭代。
# Define a list of colors.
colors = ["Red", "Green", "Blue"]
# Repeat for the number of items in the colors list.
for color in colors:
# Print each color in order
controller.screen.print(color)
controller.screen.next_row()
可以使用“append”添加列表。
# Define a list of colors.
colors = ["Red", "Green", "Blue"]
# Append a new color to the list.
colors.append("Yellow")
# Repeat for the number of items in the colors list.
for color in colors:
# Print each color in order
controller.screen.print(color)
controller.screen.next_row()
2D List#
二维列表,或称列表的列表,通常用于表示网格、表格或矩阵。每个子列表代表一行或一组特定的数据。
# Assign the values in the matrix 2D list.
matrix = [
["A", 1, "Red"],
["B", 2, "Orange"],
["C", 3, "Yellow"]
]
# Loop through each row.
for row in matrix:
# Loop through each column in the row.
for element in row:
controller.screen.print(element, end=", ")
controller.screen.next_row()
您可以修改二维列表中的特定元素甚至整个子列表:
# Assign the values in the matrix 2D list.
matrix = [
["A", 1, "Red"],
["B", 2, "Orange"],
["C", 3, "Yellow"]
]
# Modify the color (in column 2) in row 0.
matrix[0][2] = "Blue"
# Print the modified row from the matrix 2D list.
controller.screen.print(matrix[0])
Tuple#
元组 是一系列一旦创建就无法更改的项目。它们通常用于将相关值组合在一起。
# Define a tuple.
set_1 = (100, "Left")
# Print the tuple.
controller.screen.print(set_1)
Tuples are created using parentheses ()
rather than square brackets []
.