嘿,欢迎访问!

这里是全球最大的Minecraft(我的世界)教育版中文论坛社区
覆盖100+国家,分享最新的资源和攻略

领取免费体验账户 购买教育版授权账户
  • 欢迎 游客 光临!为了营造一个安全、和谐的社区环境,请遵守平台规范,文明交流,友善互动!。
    ⚠️ 重要提示 ,警惕诈骗 本论坛未与任何其他团队或盈利单位合作,请认准唯一官方团队“基岩科技”。⚠️
  • 目前免费账户已经补充,可以正常领取啦

教程 Python编程进阶:循环与条件判断 - 让Agent更智能

主题 作者
版主
03
45
0
勋章
3
黄金
180.00🍪
白银
0🎵
Points
191
大家好,我是MCEE社区助手!

在前两篇教程中,我们学习了如何控制Agent进行基础移动和自动化建筑。今天我们要深入学习Python编程的核心概念:**循环和条件判断**。掌握这些知识后,你就能让Agent做出更智能的决策,执行更复杂的任务!

一、为什么需要循环和条件判断?

想象一下这些场景:
• 让Agent挖一条100格长的隧道——难道要写100行agent.move("forward")吗?
• 让Agent只在遇到石头时才挖掘——如何判断前方是什么方块?
• 让Agent自动收集掉落物品直到背包满——怎么知道什么时候停止?

这就是循环和条件判断的用武之地!它们让代码变得简洁、智能、强大。

二、条件判断:让Agent学会"思考"

2.1 if语句基础

条件判断就像是给Agent一个"如果...那么..."的指令。

代码:
python
# 基础语法
if 条件:
    执行的代码

# MC实例:检测前方是否有方块
if agent.detect("forward"):
    agent.destroy("forward")
    print("前方有方块,已清除!")

重要提示:
• 冒号:))不能忘记
• 缩进必须一致(通常是4个空格)
• 条件为True时才执行代码块

2.2 if-else:二选一

代码:
python
# 检测前方并做出不同反应
if agent.detect("forward"):
    agent.destroy("forward")
    print("清除障碍物")
else:
    agent.move("forward")
    print("前方畅通,继续前进")

2.3 if-elif-else:多条件判断

代码:
python
# 检测Agent前方方块类型并做出反应
block = agent.inspect("forward")

if block == "minecraft:diamond_ore":
    agent.destroy("forward")
    print("发现钻石矿!")
elif block == "minecraft:iron_ore":
    agent.destroy("forward")
    print("发现铁矿")
elif block == "minecraft:coal_ore":
    agent.destroy("forward")
    print("发现煤矿")
else:
    print("前方是普通方块")

三、循环:让Agent重复工作

3.1 for循环:固定次数重复

当你知道要重复多少次时,用for循环最合适。

代码:
python
# 让Agent向前移动10步
for i in range(10):
    agent.move("forward")

# range(10)生成0到9,共10个数字
# i是循环变量,每次循环会变化

实战案例:挖掘隧道

代码:
python
# 挖一条20格长、3格高的隧道
for step in range(20):
    # 清除前方3格高度
    agent.destroy("forward")
    agent.destroy("up")
    agent.move("up")
    agent.destroy("up")
    agent.move("down")
    
    # 前进一格
    agent.move("forward")
    
print("隧道挖掘完成!")

3.2 while循环:条件满足就继续

当你不知道要重复多少次,只知道什么时候停止时,用while循环。

代码:
python
# 基础语法
while 条件:
    执行的代码

# 实例:一直向前移动直到遇到障碍
while not agent.detect("forward"):
    agent.move("forward")
    
print("前方有障碍,停止移动")

⚠️ 警告:小心无限循环!

代码:
python
# 危险示例:这个循环永远不会停止!
while True:
    agent.move("forward")
    
# 正确做法:设置退出条件
steps = 0
while steps < 100:
    agent.move("forward")
    steps = steps + 1

四、循环与条件的组合:智能挖矿机器人

现在我们把循环和条件判断结合起来,创建一个智能挖矿Agent!

代码:
python
# 智能挖矿机器人
# 功能:向前探索,只挖掘矿石,遇到岩浆停止

for step in range(50):
    # 检测前方方块
    block = agent.inspect("forward")
    
    # 判断方块类型
    if block == "minecraft:lava":
        print("警告:前方是岩浆!停止挖掘")
        break  # 立即退出循环
    elif "ore" in block:
        agent.destroy("forward")
        print(f"发现矿石:{block}")
        agent.move("forward")
    elif agent.detect("forward"):
        agent.destroy("forward")
        agent.move("forward")
    else:
        agent.move("forward")
    
print("挖矿任务完成!")

代码解析:
• `break`:立即退出循环
• `"ore" in block`:检查方块名称中是否包含"ore"(矿石)
• `f"...{block}"`:格式化字符串,可以插入变量值

五、实战项目:自动农场收割机

让我们创建一个更复杂的项目:自动收割小麦并重新种植!

代码:
python
# 自动农场收割机
# 假设农田是10x10的正方形

# 外层循环:控制行数
for row in range(10):
    # 内层循环:控制每行的格子数
    for col in range(10):
        # 检测下方方块
        crop = agent.inspect("down")
        
        # 判断是否是成熟的小麦
        if crop == "minecraft:wheat" and agent.inspect_data("down")["growth"] == 7:
            agent.destroy("down")  # 收割
            agent.place("down")    # 重新种植
            print(f"收割位置:第{row+1}行,第{col+1}列")
        
        # 移动到下一格(除了每行最后一格)
        if col < 9:
            agent.move("forward")
    
    # 换行:向右移动一格,转向,前进一格,再转向
    if row < 9:
        agent.turn("right")
        agent.move("forward")
        agent.turn("right")

print("农场收割完成!")

六、常用循环技巧

6.1 嵌套循环

循环里面还可以有循环,用于处理二维或三维结构。

代码:
python
# 建造一个5x5的平台
for x in range(5):
    for z in range(5):
        agent.place("down")
        if z < 4:
            agent.move("forward")
    
    # 回到起始列,移动到下一行
    for back in range(4):
        agent.move("back")
    agent.turn("right")
    agent.move("forward")
    agent.turn("left")

6.2 continue:跳过本次循环

代码:
python
# 只破坏矿石,跳过普通石头
for step in range(20):
    block = agent.inspect("forward")
    
    if block == "minecraft:stone":
        agent.move("forward")
        continue  # 跳过后面的代码,进入下一次循环
    
    agent.destroy("forward")
    agent.move("forward")

七、练习挑战

试试这些练习,巩固你的知识:

初级挑战:
1. 让Agent建造一个10格高的柱子
2. 让Agent向前移动,遇到障碍物就转向

中级挑战:
3. 创建一个3x3x3的立方体
4. 让Agent在10x10区域内清除所有树木(检测原木方块)

高级挑战:
5. 创建一个自动楼梯建造器(每前进一格就向上放置一个方块)
6. 编写一个"寻宝机器人",在地下随机移动并收集所有矿石

八、常见错误与调试技巧

错误1:缩进错误
代码:
python
# 错误示例
if agent.detect("forward"):
agent.destroy("forward")  # 缩进不正确!

# 正确示例
if agent.detect("forward"):
    agent.destroy("forward")  # 必须缩进

错误2:忘记冒号
代码:
python
# 错误
if agent.detect("forward")
    agent.destroy("forward")

# 正确
if agent.detect("forward"):
    agent.destroy("forward")

错误3:无限循环
代码:
python
# 危险!
while True:
    agent.move("forward")

# 安全做法:添加计数器或退出条件
count = 0
while count < 100:
    agent.move("forward")
    count += 1

调试技巧:
• 使用`print()`输出变量值,了解程序运行状态
• 先用小数字测试循环(比如range(3)而不是range(100))
• 一次只添加一小段代码,确保每部分都能正常工作

九、总结

今天我们学习了:
✅ if/elif/else条件判断
✅ for循环(固定次数)
✅ while循环(条件控制)
✅ break和continue控制循环
✅ 嵌套循环处理复杂结构
✅ 循环与条件的组合应用

这些是Python编程的核心技能!掌握它们后,你就能让Agent执行几乎任何复杂任务。

下期预告
在下一篇教程中,我们将学习:
• 函数:如何把代码组织成可重用的模块
• 列表:如何存储和管理多个数据
• 更高级的Agent技巧

继续加油,编程之路越走越精彩!💪

---
有问题欢迎在评论区留言,我会尽快回复大家!
 

最新资源

顶部