2016-09-12 17 views
0

私は、正の整数からなるすべての非減少シーケンスが7になる単純なPythonスクリプトを書こうとしています。私のコードは、私が何を試しても問題ないと思われるので動作しないようです。ここで私はあなたがそれがないと思う何をしません非減少シーケンス

components = [1,2,3,4,5,6,7] 

ans = [] 

def sumSeq(seq): 
    sumA = 0 
    for i in seq: 
     sumA += i 
    return sumA 

def findSeq(seq): 
    for x in components: 
     if (x < seq[-1]): 
      continue 

     newSeq = seq 
     newSeq.append(x) 
     sumA = sumSeq(newSeq) 

     if (sumA > 7): 
      continue 

     if (sumA == 7): 
      ans.append(newSeq) 

     findSeq(newSeq) 

findSeq([0]) 

print ans 

答えて

2

を使用すると、次の代入行うと:

newSeq = seq 

をあなたが実際に同じオブジェクト(配列)に別の名前(newSeq)を結合し、あなたは同様の値を持つ新しいオブジェクトを作成しないでください。したがって、newSeqの内容を変更すると、seqの内容も変更されます。これは、両方ともメモリに格納された同じオブジェクトの別名であるためです。 Pythonドキュメントが言うように:Pythonで

代入文は、彼らがターゲットと物体との間のバインディングを作成し、オブジェクトをコピーしないでください。変更可能なアイテムや変更可能なアイテムを含むコレクションの場合、コピーを変更することなく1つのコピーを変更できるようにコピーが必要な場合があります。

だからあなたがこのコード行を変更する必要があります。

newSeq = seq.copy() 
2
newSeq = seq 

このラインを持っているものです。具体的には、ではなく、新しいリストを作成します。既存のリストを参照する新しい名前を作成するだけです。試してみてください:

newSeq = seq[:] 
+0

本当にありがとうございました!! – Antoine

関連する問題