【发布时间】:2015-09-04 10:46:54
【问题描述】:
2048 合并函数
来自:Coursera 上的计算原理第 1 部分课程
我在我的 OWLTEST 上获得了-2 pts,它使用 Pylint 作为样式指南。错误状态:
分支过多 (17/12) 函数“合并”,第 7 行
这是什么意思?
我非常努力地完成了这个程序。我从头开始写这个。我还想知道是否有一些技术可以使这种更清洁和/或一些最佳实践改进?我知道可能有更好的方法来写这个,因为现在我的代码看起来很乱。
# -*- 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
【问题讨论】:
-
这不是更适合codereview.stackexchange.com吗?
-
哦,谢谢。甚至不知道它的存在。我把它贴在那里。
标签: python merge coding-style pylint pep8