2016-11-14 2 views
1

私はユーザが入力した数字の10のシード内のすべての数字の合計を返さなければならないという質問に固執しています。数が1だった場合、例えば、それは次のようになり1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 = 45これまでのところ私は:整数の合計を返すループ

def temp(n1): 

    seed = n1 
    counter = 0 
    while counter < 9: 
     n1 += 1 
     counter+= 1 
return n1 

私はのような任意の説明を理解するであろうなぜ私のコードがうまくいかず、自分のコードを修正するのに役立ちます。

あなたは、1を毎回追加する(あなたは毎回よりもインクリメントされなければならないので)あなたはカウンタープラス1を追加すべき場所、あなたのコードで
+0

python 2.7私は – Jessica

+0

と考えています。実際の問題をはっきりと説明してください。エラーが表示されたり、プログラムが間違った結果を出していますか? – thefourtheye

答えて

2

、:

def temp(n1): 
    n1 -= 1      <-- HERE 
    counter = 0 

    while counter < 9: 
     n1 += counter + 1   <-- HERE 
     counter += 1 

    return n1 

また、あなたが必要とします最初にn1から1を引いて、0回目の繰り返しで0を加えなければならないという事実を補う。

変数には変数seedは必要ありませんが、これはアルゴリズムの以前の設計によるものとみなします。

これは、あなたが期待するよう正しい結果を生成します。

>>> temp(1) 
45 

代替方法がforrangeを使用することです。 forrangeを使用して、「他のすべての番号」問題の解決策はここに表示されます:@ Majora320の

def temp(n1): 
    n1 -= 1 

    for counter in range(1, 11, 2): # We use 11 instead of 9 because we want to *stop* on 11 (9 is inclusive) 
     n1 += counter 

    return n1 
+0

これは、ありがとう!あなたは "n1 + = counter + 1"行のビットを明確にすることができますか?私は両方の側が+を持っていたところをコードする必要はなかったし、それは私を混乱させると思う。 – Jessica

+0

@Jessica第2の '+'が最初に評価されているので、 'n1 + =(counter + 1)'に出てきます。ここで 'counter + 1'が' n1'に追加されています。 – Majora320

+0

ありがとう!最後の質問ですが、私は他のすべての数字の合計を取得する必要があった場合、コードがどのように変化するかを書くことができますか? – Jessica

2

回答が正しいとあなたのコードが動作しない理由を説明します。しかしliitleより簡潔な解決策は、基本的には1から始まる連続番号を追加するmathemetical式種子*(種-1)/ 2の前進を取る

def temp(n): 
    seed = 10 
    return ((seed * (seed-1))/2) + (n-1) 

print temp(1) 
print temp(10) 
print temp(11) 
print temp(12) 

OP

45 
54 
55 
56 

あろうけれどもあなたの基数は1よりも大きいことができるので、そのオフセットを調整するために(n-1)を加えました。

関連する問題