zoukankan      html  css  js  c++  java
  • 【网易官方】极客战记(codecombat)攻略-森林-平常的一天-usual-day

    兽人,金币,布尔…… 看这么多次都腻了。最起码我们得把他们简化一点。

    简介

    使用 与 (AND) 操作符时,如果第一个条件 (在 AND 左边那个) 为假,第二个条件 (右边那个) 永远不会执行。

    你可以好好利用这点!

    这些代码有可能出错:

    enemy = hero.findNearestEnemy()
    # 如果 enemy 为 None,那么 AND 就是 False
    # 所以 enemy.type 不会执行,避开了错误。
    if enemy and enemy.type == "munchkin":
        hero.attack(enemy)

    下面带有与操作符的代码不会有这个问题:

    enemy = hero.findNearestEnemy()
    # 如果 enemy 为 None,获取 enemy.type 时会出错!
    if enemy.type == "munchkin":
        hero.attack(enemy)

    默认代码

    # 打败食人魔,收集金币。一切都那么平常。
    # 使用 与(AND) 在同一行检查存在性和类型。
    while True:
        enemy = hero.findNearestEnemy()
        # 有了与(AND),只在敌人存在时检查类型
        if enemy and enemy.type == "munchkin":
            hero.attack(enemy)
        # 寻找最近的物品

     

        # 如果有名为 “coin” (金币)的物品存在,那就快去收集它!

     

    概览

    与 (AND) 操作符具有短路求值 (short-circuit evaluation) 特性。

    这句话的意思是,如果在 and 前面的表达式为 假 (或者 null), 那么在操作符后面的表达式不执行或不求值。

    我们可以应用到对象属性的读取中,尤其是不确定对象是否存在的情况下。 比如,我们想读取敌人的类型,首先我们得确保那个敌人存在,否则会得到一个错误:

    enemy = hero.findNearestEnemy()
    if enemy:
        if enemy.type == "burl":
            ## 做点啥

    But we can make it shorter:

    enemy = hero.findNearestEnemy()
    if enemy and enemy.type == "burl":
            ## 做点啥

    我们不需要担心敌人不存在的引用错误 (reference error),因为这种情况下第二部分不会执行

    平常的一天 解法

    # 打败食人魔,收集金币。一切都那么平常。
    # 使用 与(AND) 在同一行检查存在性和类型。
    while True:
        enemy = hero.findNearestEnemy()
        # 有了与(AND),只在敌人存在时检查类型
        if enemy and enemy.type == "munchkin":
            hero.attack(enemy)
        # 寻找最近的物品
        item = hero.findNearestItem()
        # 如果有名为 “coin” (金币)的物品存在,那就快去收集它!
        if item and item.type == "coin":
            hero.moveXY(item.pos.x, item.pos.y)
     
     
  • 相关阅读:
    webservice测试工具
    Spring+CXF整合来管理webservice(服务器启动发布webservice)
    BAT常用命令
    【shell入门】Shell用法
    【shell】Shell命令合集(0)
    挨踢江湖之十二
    shell一些笔记
    在优化SQL语句中使用虚拟索引
    Jenkins Maven打包出错异常的解决方法
    [置顶] ios 360度旋转效果demo
  • 原文地址:https://www.cnblogs.com/codecombat/p/12411289.html
Copyright © 2011-2022 走看看