TOP SECRET: LEVEL 26-30
🕵️‍♀️

嵌套选择结构

CodeCombat 侦探档案

🪆 层层剥茧
🧠 精密推理
🪆

什么是嵌套选择?

01/10

想象你在玩一个超级侦探游戏,要做层层推理:

  1. 第一层:有没有敌人?
  2. 第二层:如果有,距离够近吗?
  3. 第三层:如果够近,大招好了吗?
"嵌套选择就像俄罗斯套娃,一层套一层!只有打开外面的,才能看到里面的。"
外层
中层
核心
🧅

洋葱剥皮法

02/10

代码也是这样一层层缩进的:

if 外层条件成立:
    if 内层条件成立:
        # 执行核心精细动作
        attack()
    else:
        # 内层不成立
else:
    # 外层都不成立
外层:有敌人?
内层:距离近?
👊 攻击!
🔭

两层侦察系统

03/10
enemy = hero.findNearestEnemy()

if enemy: # 第1层
    dist = hero.distanceTo(enemy)
    if dist < 15: # 第2层
        hero.attack(enemy)
else:
    hero.moveXY(40, 34)
第一步: 确认有人影 (enemy 存在)
⬇️
第二步: 确认在射程内 (< 15m)
⚔️

三层智能战斗

04/10

更高级的 AI 需要三层判断!

if enemy:
  if dist < 10:
    if isReady("cleave"):
      hero.cleave(enemy) # 大招!
    else:
      hero.attack(enemy) # 普攻
  else:
    hero.say(dist) # 太远
1. 有敌人
2. 很近
3. 技能好
💥
⚖️

嵌套 vs 多分支

05/10
多分支 (if-elif-else)
像做选择题 (A/B/C/D)。
处于同一层级,非此即彼。
嵌套选择
判断题 + 选择题
先判断大方向,再进入内部做细致选择。
🍱 vs 🧅
便当格子 vs 洋葱层
🧹

为什么用嵌套?

06/10

避免重复检查,逻辑更清晰!

# ❌ 啰嗦写法
if enemy:
  d = dist(enemy)
if enemy and d < 10: # 又查一遍!
  ...
# ✅ 嵌套写法
if enemy:
  d = dist(enemy)
  if d < 10: # 直接用上一层结果
    ...
🧠
聪明的大脑不走回头路
🥘

晚餐吃什么?

07/10
if 妈妈在家:
  if 冰箱有菜:
    if 妈妈不累:
      妈妈做饭() # 幸福!
    else:
      点外卖() # 累了
  else:
    去买菜()
else:
  自己泡面() # 悲催...
👩‍🍳 🍕 🍜
🔒

重要概念:作用域

08/10

内层代码可以访问外层变量!

就像你在客厅(外层)拿了一个苹果,带进卧室(内层)依然可以吃。

if enemy: # 外层确认了enemy
  dist = distanceTo(enemy)
  if dist < 10:
    attack(enemy) # 内层直接用!
客厅 🍎
卧室 (我有🍎了!)
🎓

侦探结案口诀

09/10

"嵌套选择像套娃,
一层一层往里查,
缩进对齐不能差!"

"先判存在再测距,
技能就绪最后查!"

📂
TOP SECRET