Skip to content

第 6 章:语法小结与常用工具

本章能学到什么

  • 列表:一次装下一组数据(为读多路传感器做铺垫)
  • def 定义自己的函数
  • import 与模块的概念

三大结构回顾

结构关键字一句话
顺序——从上往下,一行一行执行
判断if / elif / else看条件,决定走哪条路
循环for / while满足条件就重复执行

所有程序,无论多复杂,都是这三种结构拼出来的。

列表:一排带编号的盒子

变量一次只能装一个值,列表一次能装一排:

python
pins = [10, 11, 12, 13]     # 四个循迹探头的引脚号
readings = [0, 1, 0, 1]     # 四个探头读到的值

print(pins[0])              # 10(下标从 0 开始)
print(len(pins))            # 4(列表长度)

# 遍历:把列表里的每个元素挨个取出来
for p in pins:
    print(f"读取 GP{p}")

列表和 for 循环是绝配。第 12 章读四路循迹传感器时,会看到:

python
sensors = [Pin(p, Pin.IN) for p in [10, 11, 12, 13]]
for s in sensors:
    print(s.value())

一行顶四行,这就是列表的威力。

函数:把一段代码打包成积木

第一册里用过"函数"积木(子程序),代码里就是 def

python
def measure_distance():
    """测一次距离,返回厘米数"""
    # 触发超声波……
    return 18.5

d = measure_distance()   # 调用函数
print(f"距离:{d} cm")

带参数的函数更灵活:

python
def set_led(pin, on):
    """控制指定引脚的 LED"""
    print(f"GP{pin} -> {'亮' if on else '灭'}")

set_led(2, True)

函数的意义和第一册说的一样:避免重复编写,把复杂问题拆成小块

import:借用别人写好的工具箱

python
import time          # 导入 time 模块
time.sleep(1)        # 使用里面的 sleep 功能

from machine import Pin   # 只从 machine 里拿 Pin 这一个工具
  • import time:整个工具箱搬进来,用的时候要写 time.xxx
  • from machine import Pin:只拿一件工具,直接用 Pin

在 Pico 上最常用的三个模块:machine(硬件控制)、time(延时)、utime(精确计时)。

常见坑

  • 函数定义了不调用,什么也不会发生
  • def 行末的冒号和函数体的缩进,一个都不能少
  • 列表下标越界:[1,2,3][3] 报错,最大下标是长度减 1

想一想

函数和循环都能"避免重复",它们的区别是什么?什么时候用函数,什么时候用循环?

💡 查看答案
  • 循环:同一段代码在原地连续重复执行(比如连测 5 次距离)
  • 函数:把一段代码打包起个名字,在不同的地方随叫随到(比如 measure_distance() 在程序各处都能调用)

一句话:连续重复用循环,到处复用用函数

不积跬步,无以至千里;万里之行,始于当下。