• 【网易官方】极客战记(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)
     
     
  • 相关阅读:
    软件项目管理实践之日计划
    VB.NET版机房收费系统—数据库设计
    图的邻接矩阵存储结构
    Java多态特性:重载和覆写的比較
    《实体解析与信息质量》
    cocos2d-x lua 中使用protobuf并对http进行处理
    Memcached 笔记与总结(2)编译 php-memcache 扩展
    大数据的时代意义
    大数据的时代意义
    SPSS输出结果统计表与统计图的专业性编辑及三线表定制格式
  • 原文地址:https://www.cnblogs.com/codecombat/p/12411289.html
Copyright © 2020-2023  润新知