如何在python中获得1-2 + 3-4 + 5-6 + 7-8 + 9-10系列的总和?
我知道如何通过这种方式使用while循环来获得从1到特定数字的数字之和:
i = 1
sum = 0
while i<= 10:
sum = sum + i
i = i + 1
print(sum)
答案 0 :(得分:2)
鉴于您尝试替换该符号,您可以使用(-1)**n
也替换该符号的事实。但是,当n
即使您需要(-1)**(n-1)
:
>>> list(n*(-1)**(n-1) for n in range(1, 11))
[1, -2, 3, -4, 5, -6, 7, -8, 9, -10]
>>> sum(n*(-1)**(n-1) for n in range(1, 11))
-5
这可以转换为显式循环解决方案:
t = 0
for n in range(1, 11):
t += n*(-1)**(n-1)
print(t) # -5
答案 1 :(得分:1)
您的代码需要进行非常小的更改:
i = 1
sum = 0
sign = 1
while i<= 10:
sum = sum + sign * i
sign = sign * -1
i = i + 1
print(sum)
有更多的pythonic方法可以满足你的要求 - 但是他们需要更多的知识..
答案 2 :(得分:1)
你应该这样做:
i = 1
my_sum = 0
while i<= 10:
if i % 2: # True, if i is divisible by 2
my_sum -= i
else:
my_sum += i
i += 1 # same as i = i + 1
其他一些替代方法:
>>> sum((i if i % 2 else -i) for i in range(1, 11))
-5
>>> sum(map(lambda x: x if x %2 else -x, range(1, 11)))
-5
答案 3 :(得分:1)
它也可以被视为sum of odd
减去sum of even
sum(range(1, 11, 2)) - sum(range(2, 11, 2))
答案 4 :(得分:1)
将此扩展为更简单的线性解决方案,适用于任何n系列:
def sum_subtract(n):
return n // 2 * -1 + n % 2 * n
每对数字(1 - 2)+(3 - 4)+等等于-1,所以你只需要除以2并乘以-1。接下来如果最后有一个奇数(n%2),你可以添加它。
答案 5 :(得分:-3)
您可以使用像
这样的生成器表达式>>> sum(v if v%2 else -v for v in range(11))
-5
这里我们检查索引是偶数还是奇数并相应地添加数字。
另一种方法可以使用zip
内置,但这只适用于偶数范围。
>>> sum(x-y for x,y in zip(l[::2],l[1::2]))
-5
您可以使用iter
来避免切片并减少代码大小。 iter
创建一个迭代器,只要它被调用就会耗尽。
>>> i = iter(l)
>>> sum(x-y for x,y in zip(i,i))
-5