2016-04-14 12 views
2

現在、特定の値まで加算される4桁の数字の数を調べようとする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

checkno1000にリセットして、targetとループを増やした後でリセットしないでください。ターゲット上の

だから、最初の繰り返し、あなたはtarget1で正解0 2回目の反復を取得、あなたのchecknoはすでに10000なので、内側のループは実行されません。

checknocomboSumを外側のループの内側に移動する必要があります。

+0

おっと...助けてくれてありがとう! – ForceFieldsForDoors

1

あなたは次のように、for variable in range()してwhileループを置き換えることができます:それは行うには、よりPython的な方法だろう

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() 

。いくつかの他のコメントで強調されているよう

:PEP8ルールに固執しようとする通常

  • セミコロン
  • によってラインを決して終わらない

    • あなただけしたい場合は
    +0

    'comboSum'をリセットする必要があります – SpoonMeiser

    +0

    権利編集済:) – filaton

    0

    (空白は、インスタンスのための演算子をaroud)あなたのターゲットに合計した4桁の数字の数を見つけてください。単純にdivmodを使って数字を取得し、数字の合計があなたの目標数と等しい時を合計してください:

    あなたは間違ってあなたの説明に基づいています 0-targetからチェックしている
    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))) 
    

    は、あなただけのターゲット番号をチェックする必要があります特定の値まで追加4桁の数字の数を調べます。

    関連する問題