CodeCombat 排除法逻辑

不等于运算符 (`!=`) 系列(27-31关)

第 27 关

穿越 (The Crossing)

战术思路分析:尊重习俗

友善的兽人部落有两条规矩:**只能拿他们给的宝石**,不能碰他们的食物。你需要用 `!=` 来判断物品是否是宝石。

核心概念:不等于 (`!=`)

- `item.type == "gem"`: 物品是宝石吗?(等于)
- `item.type != "gem"`: 物品**不是**宝石吗?(不等于)
如果物品不是宝石(是食物),英雄就不能去拿,而是跟着宠物走。只有当条件为 False(即是宝石)时,`else` 语句才会执行移动去拿宝石。

IF type != "gem": MovePet()
ELSE: MoveItem()

Python 程序解法

1
while True:
2
item = hero.findNearestItem()
寻找最近的物品
3
if item:
如果物品存在
4
# 如果item.type不等于 "gem"
5
if item.type != "gem":
判断:如果物品**不是**宝石
6
# 然后跟随你的宠物。
7
hero.moveXY(pet.pos.x, pet.pos.y)
移动到宠物位置(不拿食物)
8
# 否则:
9
else:
否则(即物品是宝石)
10
# 移动到宝石的坐标。
11
hero.moveXY(item.pos.x, item.pos.y)
移动去拿宝石
第 28 关

有用的对手 (Helpful Opponents)

战术思路分析:双重排除

战场上有两类“坏东西”需要避开:**毒药 (`"poison"`)** 和 **差役 (`"peon"`)**(它们只会偷金币,不打你)。

排除差役:

我们只攻击**非差役**的敌人:`if enemy.type != "peon"`

排除毒药:

我们只收集**非毒药**的物品:`if item.type != "poison"`

(Enemy != Peon)
AND
(Item != Poison)

Python 程序解法

1
while True:
2
enemy = hero.findNearestEnemy()
寻找最近的敌人
3
if enemy:
如果敌人存在
4
# 只在敌人类型不是 "peon" 的时候攻击。
5
if enemy.type != "peon":
排除差役(只偷东西)
6
hero.attack(enemy)
攻击其他类型的敌人
7
item = hero.findNearestItem()
寻找最近的物品
8
if item:
如果物品存在
9
# 只在物品的类型不是 "poison" 的时候捡起。
10
if item.type != "poison":
排除毒药
11
hero.moveXY(item.pos.x, item.pos.y)
收集其他物品
第 29 关

奇境 (The Wonderglade)

战术思路分析:唯一的禁忌

奇境中有很多有用的物品,但树精保护着宝石 (`"gem"`)。拿走宝石会激怒树精。因此,你只需确保不拿宝石即可。

`!=` 的优势

如果你不知道所有可收集的物品类型(硬币、药水、蘑菇...),使用 `!= "gem"` 是最安全和最简洁的方法。你无需列举所有“可以”做的事情,只需列举“不可以”做的事情。

IF type != "gem": Collect()

Python 程序解法

1
while True:
2
# 找到最近的物品。
3
item = hero.findNearestItem()
4
# 如果那儿有一个物品:
5
if item:
如果物品存在
6
# 如果item.type不等于"gem":
7
if item.type != "gem":
如果物品不是宝石
8
# 移动到物品的位置。
9
hero.moveXY(item.pos.x, item.pos.y)
移动去收集
第 30 关

被诅咒的梦境 (Cursed Glade)

战术思路分析:攻防兼备的排除法

这个梦境有两个禁忌:不能拿**宝石**,不能攻击**树精** (`"burl"`)。我们需要将这两个排除逻辑同时应用于代码。

分离的逻辑块

我们使用两个独立的 `if` 块处理:
1. 物品:如果存在且 **不是** 宝石,则收集。
2. 敌人:如果存在且 **不是** 树精,则攻击。
这种结构保证了两个决策互不干扰。

IF Item != "gem": Collect()
IF Enemy != "burl": Attack()

Python 程序解法

1
while True:
2
item = hero.findNearestItem()
寻找物品
3
if item:
如果物品存在
4
if item.type != 'gem':
如果物品不是宝石
5
hero.moveXY(item.pos.x, item.pos.y)
移动去收集
6
enemy = hero.findNearestEnemy()
寻找敌人
7
if enemy:
如果敌人存在
8
if enemy.type != 'burl':
如果敌人不是树精
9
hero.attack(enemy)
攻击敌人
第 31 关

概念挑战. 狂野联盟 (Wild Alliance)

战术思路分析:只排除树精

树精 (`"burl"`) 是这里的盟友,不能攻击它。你需要使用最简洁的 `!=` 语句来筛选掉树精。

只关注例外

只需一个简单的嵌套 `if`:如果找到目标,且 `enemy.type != "burl"`,就攻击。

IF type != "burl": Attack()

Python 程序解法

1
while True:
2
enemy = hero.findNearestEnemy()
寻找敌人
3
if enemy:
如果敌人存在
4
if enemy.type != "burl":
如果敌人不是树精
5
hero.attack(enemy)
攻击其他所有敌人