随着我们的农场越来越大,要处理的事情也越来越多:翻土、播种、浇水、收割、寻路……如果把所有指令都堆在一个文件里,代码会变得像面条一样又长又乱。
今天,我们要学习高级农场工程师的绝招:把常用的动作封装成“函数(工具)”,并把它们装进“模块(工具箱)”里!
🛠️ 一、 教无人机新本领:自定义函数 (def)
Python 允许我们自己创造新的指令!我们使用 def(Define,定义)这个关键字,把一长串动作打包成一个简单的名字。
1. 智能浇水小助手 (auto_water)
植物在湿润的土地上生长速度会提升 5 倍!但水资源很宝贵,不能瞎浇。我们要教无人机一个聪明的浇水逻辑:
条件 1: 兜里得有水罐(
num_items(Items.Water) > 0)。条件 2: 地面有点干了,水位低于 75% 才浇水(
get_water() < 0.75)。
👨💻 代码实现:
def auto_water():
# 智能浇水逻辑:保持地块湿润以获得5倍加速
if num_items(Items.Water) > 0:
if get_water() < 0.75:
use_item(Items.Water)
💡 教学提示:写完这段代码后,只要你在后面输入 auto_water(),无人机就会自动执行这套聪明的判断,再也不用每次都写一堆 if 了!
2. 农场 GPS 导航 (move_to)
有时候我们需要无人机飞到特定的坐标,比如 (3, 5)。如果用基础指令,你得自己算要往东走几步、往北走几步。太麻烦了!我们来写一个“GPS 导航函数”。
我们给函数加两个“参数”(就像输入导航的目的地):target_x(目标列)和 target_y(目标行)。
👨💻 代码实现:
def move_to(target_x, target_y):
# 如果当前位置在目标的左边,就一直向东(右)飞
while get_pos_x() < target_x:
move(East)
# 如果当前位置在目标的右边,就向西(左)飞
while get_pos_x() > target_x:
move(West)
# 如果当前位置在目标的下面,就向北(上)飞
while get_pos_y() < target_y:
move(North)
# 如果当前位置在目标的上面,就向南(下)飞
while get_pos_y() > target_y:
move(South)💡 教学提示:以后你想去左下角,只需输入 move_to(0, 0),无人机就会自动寻路过去!
3. 全自动推土机 (prepare_soil)
在种新庄稼前,我们通常需要扫荡整个农场,把熟了的作物收割,并顺便翻好土。我们把第二课学到的“嵌套循环”打包成一个函数。
*(注意:在嵌套循环中,为了防止无人机记错数字,外层循环用 i,内层循环一定要换一个字母,比如 j !) *
👨💻 代码实现:
def prepare_soil():
size = get_world_size()
for i in range(size):
for j in range(size): # 注意这里用 j,避免和外层的 i 冲突
if can_harvest(): # 如果有成熟的就收割
harvest()
till() # 顺手翻土
move(North) # 向上走
move(East) # 一列扫荡完,去下一列
📦 二、 整理工具箱:如何导入功能 (import)
现在我们有了三个强大的自定义功能:auto_water、move_to 和 prepare_soil。 为了让主程序保持干净,我们可以把它们分别存在不同的文件里,这就叫模块化。
步骤 1:新建文件并保存
在编程农场的代码界面,新建一个文件,命名为 my_tools.py(我的工具箱),把上面三个 def 开头的函数全写进去保存。
步骤 2:在主程序中召唤工具箱 (import)
回到你的主程序文件(比如叫 main.py),在代码的最开头写上:
import my_tools
这句话的意思是:“去把 my_tools 那个文件里的装备都给我拿过来!”
步骤 3:使用工具
当你需要用工具箱里的工具时,格式是:工具箱名字.工具名字()。
👨💻 终极实战:主程序代码