首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >2048勾股合并函数

2048勾股合并函数
EN

Code Review用户
提问于 2015-09-13 05:14:18
回答 1查看 508关注 0票数 5

这篇文章讲述了我如何更新我的2048合并函数代码,从意大利面代码到更具可读性。

意大利面旧代码

我从你的建议中吸收了一些技巧!我意识到在我的代码中有很多逻辑错误和冗余,比如为什么在没有必要的情况下一次又一次地追加0's,因为最后我回过头来解释丢失的数字,然后添加0(s)代替它们。

新代码与旧代码的

改进(

)

  1. 清单理解的使用
  2. 使用Python内置的真实性
  3. 最小分支(较少的if(s),else(s)等)
  4. 将新的和有用的方法(如extend )注入我的代码中
  5. 通过增强可读性改进代码样式
  6. 消除冗余和逻辑缺陷
代码语言:javascript
复制
def merge(nums):
    '''
    Takes a list as input
    returns merged pairs with
    non zero values shifted to the left.
    fancy interactive doc test below, no output means no problems.
    >>> merge([2, 0, 2, 4])
    [4, 4, 0, 0]
    >>> merge([0, 0, 2, 2])
    [4, 0, 0, 0]
    >>> merge([2, 2, 0, 0])
    [4, 0, 0, 0]
    >>> merge([2, 2, 2, 2, 2])
    [4, 4, 2, 0, 0]
    >>> merge([8, 16, 16, 8])
    [8, 32, 8, 0]
    '''
    slide = [num for num in nums if num]
    pairs = []
    for idx, num in enumerate(slide):
        if idx == len(slide)-1:
            pairs.append(num)
            break
        elif num == slide[idx+1]:
            pairs.append(num*2)
            slide[idx+1] = None
        else:
            pairs.append(num)  # Even if not pair you must append
    slide = [pair for pair in pairs if pair] 
    slide.extend([0] * (len(nums) - len(slide)))
    return slide

if __name__ == '__main__':
    import doctest
    doctest.testmod()

皮林特对我大喊大叫,因为我用i而不是idx

EN

回答 1

Code Review用户

发布于 2015-09-13 07:45:05

我没有查看或看到您的旧代码时,它是张贴,但这是明显的改进。不过,我仍可以提出一些建议:

  • numnums不是很好的变量名。字符很便宜,只需完整地写出单词number。我还建议给numbers一个稍微不同的/更长的名称,以便更容易地阅读定义slide的行。同样,我认为pair/pairs可能会更容易阅读。
  • 在不同的分支上发表一些评论来解释你为什么以一种特定的方式行事是有用的--对于那些不熟悉2048年规则的人来说,它的行为方式可能并不是立即就清楚了。
  • doctest的描述不属于函数docstring,它可能属于main()函数的注释。如果我将您的函数导入另一个文件,然后检查merge.__doc__,那么提到doctest“下面”可能会让人感到困惑。
  • “没有输出”意味着成功可能是个问题,因为我无法区分成功和没有运行的测试。应该完全清楚您的测试是通过了,还是失败了,还是没有运行。其他任何事情都能掩盖问题。
票数 2
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/104551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档