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

2048合并函数
EN

Stack Overflow用户
提问于 2015-09-04 10:46:54
回答 1查看 940关注 0票数 0

2048合并函数

来自:计算原理第一部分课程课程

我在我的OWLTEST上得到了-2脚本,它使用Pylint作为样式指南。错误声明:

太多分支(17/12)函数“合并”,第7行

那是什么意思?

我非常努力地让这个项目发挥作用。我是白手起家写的。我还想知道是否有一些技术可以使这个过程变得更干净和/或一些最佳实践的改进?我知道可能有更好的方法来编写这些代码,因为现在我的代码看起来非常混乱。

代码语言:javascript
复制
  # -*- coding: utf-8 -*-
    """
    Created on Thu Sep  3 17:55:56 2015
    2048_merge_attempt1.py
    @author: Rafeh
    """
    def merge(nums):
        '''
        Takes a list as input 
        returns merged pairs with
        non zero values shifted to the left.
        [2, 0, 2, 4] should return [4, 4, 0, 0]
        [0, 0, 2, 2] should return [4, 0, 0, 0]
        [2, 2, 0, 0] should return [4, 0, 0, 0]
        [2, 2, 2, 2, 2] should return [4, 4, 2, 0, 0]
        [8, 16, 16, 8] should return [8, 32, 8, 0]
        '''
        slide = []  # Append non-zeroes first
        for num in nums:
            if num != 0:
                slide.append(num)
        for num in nums:
            if num == 0:
                slide.append(num)
        pairs = []
        for idx, num in enumerate(slide):
            if idx == len(slide)-1:
                pairs.append(num)
                if len(pairs) != len(nums):
                    pairs.append(0)
                break
            if num == slide[idx+1]:
                if num != 0:
                    pairs.append(num*2)
                    slide[idx+1] -= slide[idx+1]
                    # slide[idx+1], slide[idx+2] = slide[idx+2], slide[idx+1]
                else:
                    pairs.append(num)
            else:
                    pairs.append(num)  # Even if they don't match you must append
        slide = []  # Append non-zeroes first
        for num in pairs:
            if num != 0:
                slide.append(num)
        for num in nums:
            if num == 0:
                slide.append(num)
        for _ in range(len(nums) - len(slide)):
            if len(nums) != len(slide):
                slide.append(0)
        return slide
EN

回答 1

Stack Overflow用户

发布于 2015-09-04 10:53:00

“分支”是程序控制流中的一个位置,其中控件可以以一种以上的方式“分支”,即执行不同的语句集。一个很好的例子是“if”语句,它总是有两个分支。例如。

代码语言:javascript
复制
a()
if e:
  b()
c()

如果您忽略了异常或sys.exit()调用之类的可能性,则有两个分支:a(); b(); c() (万一e为真)。或者a(); c();,以防e是假的。

在您的例子中,有许多可以替换的if语句。例如,而不是

代码语言:javascript
复制
for num in nums:
    if num != 0:
        slide.append(num)

你可以写

代码语言:javascript
复制
slide += [num in nums if num != 0]

现在,这个循环在整个地方都重复了。所以我建议只做一次,在最上面,然后

代码语言:javascript
复制
nonZeroNums = [num in nums if num != 0]

然后再用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32396185

复制
相关文章

相似问题

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