1

这是我的原始代码:

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

这是第二部分的内容:

b)通过将循环封闭在另一个循环中来修改您的程序,以便您可以找到连续的总和。例如,如果输入 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

任何人都可以帮助引导我朝着正确的方向前进吗?顺便提一句。它是python 3.3

4

4 回答 4

3

您可以在一个循环中执行此操作,方法是使用range定义您的数字,并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为字符串str,因为该join方法需要一个用字符串填充的可迭代对象。
  • ' + '.join用于将元素与公共字符串“连接”在一起,在本例中为“+”。在只有 1 个元素的情况下,join将只返回该元素。

sum(nums)给你定义的所有数字的总和range(1, i+1)

  • 当 nums = range(1, 2), sum(nums)= 1
  • 当 nums = range(1, 3), sum(nums)= 3
  • ETC...
于 2013-01-29T21:15:35.297 回答
0
reduce(lambda x,y:x+y,range(x+1))
于 2013-01-29T20:54:41.223 回答
0

您不必使用 while 循环,2 for 会很好地完成这个技巧并且感觉更自然。

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 回答