2016-04-14 84 views
2

我目前正在编写一个python代码,试图找出四位数的数字加起来到一个特定的值。我的代码如下:数字总和代码 - 返回0的数组

def findSum(): 
    target = 0; 
    checkno = 1000; 
    comboSum = []; 
    sumArray = []; 
    while target<=36 : 
    while checkno<10000 : 
     digitSum = int(str(checkno)[0]) + int(str(checkno)[1]) + int(str(checkno)[2]) + int(str(checkno)[3]); 
     if digitSum == target : 
      comboSum.append(checkno); 
     checkno = checkno + 1; 
    sumArray.append(len(comboSum)); 
    target = target + 1; 
    print (sumArray); 

findSum(); 

然而,当我把这种通过python解释,它返回36个“0”的数组。我不太清楚为什么会出现这种情况,每当我增加目标,然后循环播放。

有谁知道这是为什么?

谢谢!

+1

请不要用分号结束Python中的行。 – poke

回答

2

在您增加target和循环后,您不会将checkno重设为1000

目标所以第一次迭代中,你得到正确的答案0第二次迭代,其中target1,你checkno已经是10000,所以内循环将不会执行。

您需要将外部循环内的checknocomboSum的初始化。

+0

Oooh ...感谢您的帮助! – ForceFieldsForDoors

1

您可以通过for variable in range()取代你while循环,如:

def findSum(): 
    # target = 0 
    # checkno = 1000 
    # comboSum = [] 
    sumArray = [] 
    for target in range(36): 
     comboSum = [] 
     for checkno in range(1000, 10000): 
      digitSum = int(str(checkno)[0]) +\ 
         int(str(checkno)[1]) +\ 
         int(str(checkno)[2]) +\ 
         int(str(checkno)[3]) 
      if digitSum == target: 
       comboSum.append(checkno) 
      # checkno = checkno + 1 
     sumArray.append(len(comboSum)) 
     # target = target + 1 

    print(sumArray) 

findSum() 

这将是做一个更Python的方式。

由于强调了一些其他意见:

  • 永远不会结束用分号
  • 通常线试着坚持PEP8规则(空格和身边例如运营商)
+0

仍需重置'comboSum' – SpoonMeiser

+0

正确,编辑:) – filaton

0

如果你只是想找到有多少四位数字总和到你的目标的计数,你可以简单地使用divmod来获得数字和总是总和数字的总和等于你的目标数字:

def sum_digits(n, target): 
    n, sm = divmod(n, 10) 
    while n and sm <= target: 
     n, rem = divmod(n, 10) 
     sm += rem 
    return sm == target 



def find_sum(targ): 
    for n in range(1000, 10000): 
     yield sum_digits(n, targ) 


print(sum(findSum(36))) 

您是从0-target这是错误的根据您的描述检查,发现的,加起来就是一个特定的值你应该只检查目标数量四位数字编号。