1

これが私の元のコードです:

x = input("Please input an integer: ")
x = int(x)
i = 1
sum = 0
while x >= i:
    sum = sum + i
    i += 1
print(sum)

2番目の部分は次のとおりです。

b)ループを別のループで囲んでプログラムを変更し、連続した合計を見つけられるようにします。たとえば、5を入力すると、連続する数字の合計が5つになり、次のようになります。

1 = 1
1 + 2 = 3
1 + 2 + 3 = 6
1 + 2 + 3 + 4 = 10
1 + 2 + 3 + 4 + 5 = 15

私はこれに3日間立ち往生していて、どうすればいいのか理解できません。私はこれを試しましたが、役に立ちませんでした。

while x >= i:
    sum_numbers = sum_numbers + i
    past_values = range(i)
    for ints in past_values:
        L = []
        L.append(ints)
        print(L, "+", i, "=", sum_numbers)
    i += 1

誰かが私を正しい方向に導くのを手伝ってくれる?ところで。Python3.3です

4

4 に答える 4

3

rangeを使用して番号を定義し、番号をループすることで、これを1つのループで行うことができsumます。

>>> x = input("Please input an integer: ")
Please input an integer: 5
>>> x = int(x)
>>>
>>> for i in range(1, x+1):
...     nums = range(1, i+1)
...     print(' + '.join(map(str, nums)), '=', sum(nums))
...
1 = 1
1 + 2 = 3
1 + 2 + 3 = 6
1 + 2 + 3 + 4 = 10
1 + 2 + 3 + 4 + 5 = 15

range(1, x+1)[1, 2, 3, 4, 5]これは、合計を出力する回数のコントローラーとして機能します。したがって、このforループはあなたの例では5回発生します。

nums = range(1, i+1)i代わりにここで使用していることに注意してください(range上記から取得)。これを使用して、シーケンスで現在の番号を定義しています。

' + '.join(map(str, nums))

  • map(str, nums)メソッドは文字列で満たされた反復可能オブジェクトを想定しているため、を使用してのすべての要素をnums文字列に変換するために使用されます。strjoin
  • ' + '.joinは、共通の文字列(この場合は'+')とともに要素を「結合」するために使用されます。要素が1つしかない場合は、joinその要素を返すだけです。

sum(nums)で定義されたすべての数値の合計を示していますrange(1, i+1)

  • nums = range(1, 2)sum(nums)=1の場合
  • nums = range(1, 3)sum(nums)=3の場合
  • 等...
于 2013-01-29T21:15:35.297 に答える
0
reduce(lambda x,y:x+y,range(x+1))
于 2013-01-29T20:54:41.223 に答える
0

whileループを使用する必要はありません。2forは、より自然な感覚でうまくトリックを実行します。

x = input("Please input an integer : ")
x = int(x)
item = range(1, x + 1)
for i in item:
    sum = 0
    for j in range(1, i + 1):
        sum = sum + j
    print(str(sum))
于 2013-01-29T20:54:44.323 に答える
0

Pythonでリスト内包表記を使用する:

x = input("Please input an integer: ")
x = int(x)
i = 1

sums = [(((1+y)*y)//2) for y in range(i, x+1)] # creates list of integers
print(sums) # prints list of sums on one line

また

[print(((1+y)*y)//2) for y in range(i, x+1)] # prints sums on separate line
于 2021-12-22T17:30:50.877 に答える