🗺️ 计算机科学 4
Loading...
🌀

嵌套循环

Nested Loops

像俄罗斯套娃一样:
循环里面 再套 循环

#19 捡闪亮东西的人 #20 掠夺者

🤔 结构是什么样的?

Outer Loop (外层): 像一天的时间(早到晚)。

Inner Loop (内层): 像这一天里吃的每一顿饭。


  • 外层条件满足时,进入内部。
  • 内层全部跑完,外层才算跑完一圈。
while 外层条件:
    # 🌞 比如:游戏的主循环
    ...
    while 内层条件:
        # 🔄 比如:遍历这一波的怪物
        ...
    ...

🔍 步骤一:用手指一个个指 (遍历)

我们用 coinIndex 像手指一样,从 0 开始,一个一个检查列表里的硬币。

len(coins) 是队伍的长度。

while True:
    coins = hero.findItems()
    coinIndex = 0
    
    # 👇 内层循环:遍历硬币列表
    while coinIndex < len(coins):
        coin = coins[coinIndex]
        
        # ... 检查硬币的代码写在这里 ...
        
        coinIndex += 1  # 👈 手指移向下一个

💎 步骤二:只挑值钱的 (过滤)

coin = coins[coinIndex]

# 🏷️ 检查:价值等于 3 吗?
if coin.value == 3:
    # 是金币!走过去捡起来!
    hero.moveXY(coin.pos.x, coin.pos.y)

# 铜币(1) 和 银币(2) 会被忽略

Property 属性

coin.value 就像贴在硬币上的价格标签。

Filter (过滤) 思维:
老师说:“把所有作业本拿出来(遍历),但只把100分的(条件) 放在讲台上。”

🔄 模式 A:只要还在就一直捡

适用于:不知道有多少个,反正捡完为止。

coin = hero.findNearestItem()

# 当 coin 存在 (不是 None)
while coin:
    hero.moveXY(coin.pos.x, coin.pos.y)
    
    # ⚠️ 关键:必须重新找下一个!
    # 如果不更新 coin,hero 会以为还在原来的位置
    coin = hero.findNearest(hero.findItems())
🧸

娃娃机战术

While (娃娃机里还有娃娃):
1. 抓一个。
2. 看看里面还有没有。

⚔️ 模式 B:死磕到底

适用于:打怪。只要它还有一口气,就不要停。

🥊

拳击手战术

While (对手还没倒下):
1. 出拳攻击。
2. (攻击会导致血量下降)

enemy = hero.findNearest(hero.findEnemies())

if enemy:
    # 只要血量大于 0,就一直打
    while enemy.health > 0:
        hero.attack(enemy)
        
        # 每次攻击,enemy.health 都会变小
        # 直到变成 0,循环自动停止

📝 课程总结

遍历循环 (Index)

while i < len(items): ...

逐个检查,配合 if 进行过滤。

条件循环 (While)

while enemy.health > 0: ...

盯着一个目标,直到状态改变(消失或死亡)。

记得:嵌套循环次数 = 外层 × 内层