2016-05-04 7 views
-3

sum_of_nは整数nをとり、長さabs(n)+ 1のリストを返します。 リスト/配列には、0からnまでの連続する整数の合計をとることによって生成された算術級数の数値が含まれます。プログラムで負の整数のリストを返すには?

5 - > 0、1、3、6、10、15]

-5 - > [0、-1、-3、-6、-10、-15 ]

7 - > [0、1、3、6、10、15、21、28]

def sum_n(n): 
    a=n+1 
    x=0 
    b=0 
    list1=[] 
    for x in range(0,a): 
     b=(x*(x+1)*0.5) 
     list1.append(int(b)) 
    return list1 

print sum_n(5) 
print sum_n(-5) 

----出力------

[0、 1,3,2,10,15]

[]

私は整数のリストを返すことができますどのように私に説明してください?

+0

なぜ、list1 = [範囲(a)のxに対して(x + 1)// 2]ではないのですか? –

+0

それは動作しません –

+0

申し訳ありません、それはforループの代わりに、 "どのように私は負の数を与えるために範囲を取得する"ではありませんでした。 Python 3では正の値でうまく動作します。 Python 2では、//ではなく/が必要です。負の値の場合、以下のいくつかの答えが必要です。 –

答えて

1

負の整数の場合は、range()で否定的な手順を使用する必要があります。だから、:

if a < 0: 
    step = -1 
else: 
    step = 1 
for x in range(0, a, step): 

さて、bのあなたの計算では、あなたはx1を追加しています。負の数値を入力するときは、これも-1に変更する必要があります。だからstep1のところに投げることができます。

また、負数を扱うときに0.5を掛けて2で割ることには違いがあり、後者を求めている結果を得るには違いがあります。だから、bのあなたの計算は、今のようになります。(それは傷つけることはありませんが)後でint(b)を必要としないので、

b = x * (x + step) // 2 

はボーナスとして、これは常に、整数になります。

+0

また、 'x *(x + step)// 2'として' b'を計算する必要があります。 –

+0

正しい。更新しました。 – kindall

1

私はそれがリターンの問題ではないと思いますが、あなたのリストは実際には空です。それをaに代入する前にnの絶対値をとることを意味しましたか?

ループ内にprintステートメントを追加して、何が処理されているかを確認できます。

0
#if a < 0: 
a = -5 #just defined the variable for easy explanation 
y = 0 
list1 = [0] 
for x in range (1,abs(a)+1): 
    for h in range(x+1): 
     y -= h #<---- here 
    list1.append(y) 
    y = 0 
print (list1) 

出力

>>> 
[0, -1, -3, -6, -10, -15] 
>>> 

だけminest代わりの合計。

+0

def sum_of_n(n): return [(nが0以外の場合は-1)*範囲内のiの合計(範囲(i + 1))(abs(n)+1)] –

関連する問題