(点击图片进入关卡)
通过使用嵌套 if 语句停留在中间。
简介
将每个 if/else 考虑成一个容器,其中又可以容纳另一个 if/else 结构!参见:
enemy = hero.findNearestEnemy() if enemy: if enemy.type == "munchkin": hero.say("我看到一个矮人!") else: hero.say("我看见其他类型的敌人!") else: hero.say("我没有看见任何敌人...")
缩进 一定要小心。
默认代码
# 你可以将一个if语句放到另一个if语句当中。 # 你必须注意这些if语句是如何互相影响的。 # 请确保代码缩进正确! # 从外层if/else结构开始会有帮助 # 使用注释为内层if/else占位预留空间: while True: enemy = hero.findNearestEnemy() # 如果有敌人出现,那么就... if enemy: # 使用distanceTo创建一个距离变量 # 如果敌人与你的距离小于5米,那么就攻击它 # 否则(这名敌人还离得很远),就使用shield pass # 否则(没有敌人)... else: # …那么,回到X位置。 hero.moveXY(40, 34)
概览
在这一关中,为了不让猎头者看见你,你必需停留在中间的区域!
你将会使用 嵌套 if 语句。
在写嵌套 if 语句时,你需要仔细注意如何设置程序的流程。
如果你的 if 语句很复杂,你可以一步步来,先用注释写下想法,然后再修改成代码。 比如在这一关,我们可以先开始写以下内容:
#如果敌人出现,然后.... # 做些什么 # 否则 (没有敌人的话)... # 就移回到X
下一步,修改注释并把想法转成 if/else 语句和移动函数的代码:
if enemy: # 做些什么 else: hero.moveXY(40, 34)
现在可以再细化 "做些什么" 那句,添加更多详细的想法
if enemy: # 如果敌人在5米内,那么就攻击他 # 否则 (敌人在远处外), 使用shield()函数防御 else: hero.moveXY(40, 34)
最后,把 if/else 语句中的注释转化成代码,并且确保缩进正确:
if enemy: if hero.distanceTo(enemy) < 5: hero.attack(enemy) else: hero.shield() else: hero.moveXY(40, 34)
还有,在 while true 循环这样的循环语句下,if 和 else 等语句也要缩进:
while True: enemy = hero.findNearestEnemy() if enemy: if hero.distanceTo(enemy) < 5: hero.attack(enemy) else: hero.shield() else: hero.moveXY(40, 34)
小贴士: 你可以选中一块代码,然后按 Tab 增加缩进,或者按 Shift+Tab 减少缩进。
以静制动 解法
# 你可以将一个if语句放到另一个if语句当中。 # 你必须注意这些if语句是如何互相影响的。 # 请确保代码缩进正确! # 从外层if/else结构开始会有帮助 # 使用注释为内层if/else占位预留空间: while True: enemy = hero.findNearestEnemy() # 如果有敌人出现,那么就... if enemy: # 使用distanceTo创建一个距离变量 distance = hero.distanceTo(enemy) # 如果敌人与你的距离小于5米,那么就攻击它 if distance < 5: hero.attack(enemy) # 否则(这名敌人还离得很远),就使用shield else: hero.shield() # 否则(没有敌人)... else: # …那么,回到X位置。 hero.moveXY(40, 34)
本攻略发于极客战记官方教学栏目,原文地址为:
来源:oschina
链接:https://my.oschina.net/u/4441837/blog/4284418