【发布时间】:2013-12-03 10:34:20
【问题描述】:
我的情况是,我收到的发票电子表格包含跨越多个月的单行,其中一个数量列包含所有月份的数量总和。
为了逐月运行分析,我们需要将总量分成 n 行的相等(ish)数量,其中 n 是跨越的月数。
这些数字可以相差一到两个,但每个元素之间的差异越小越好。
我在 python 中做了一个粗略的模型,但我觉得有更好的方法可以做到这一点。注意:请原谅...一切:
from __future__ import division
import math
def evenDivide(num, div):
splits = []
sNum = str(num/div)
remainder = float(sNum[sNum.index('.'):])
#print "Remainder is " + str(remainder)
integer = math.floor(num/div)
#print "Integer is " + str(integer)
totRemainder = round(remainder * div, 2)
#print "Total Remainder is " + str(totRemainder)
for index in range(div):
if (totRemainder > 0):
totRemainder -= 1 if (index%2 == 0) else 0
if (index % 2 == 0):
splits.append(int(integer + 1))
else:
splits.append(int(integer))
else:
splits.append(int(integer))
for index in range(div):
if(totRemainder > 0):
if (index % 2 == 1):
splits[index] += 1
totRemainder -= 1
return splits
def EvalSolution(splits):
total = 0
for index in range(len(splits)):
total += splits[index]
return total
def testEvenDivide():
for index in range(20000):
for jndex in range(3, 200):
if (EvalSolution(evenDivide(index, jndex)) != index):
print "Error for " + str(index) + ", " + str(jndex)
【问题讨论】:
-
到底是什么问题?你的代码做你想做的事吗?在这种情况下,您应该在codereview.stackexchange.com 上发帖
-
你能举出输入/输出的例子吗?
标签: python algorithm math division