我写过一个剧本,但我不知道是否有可能获得总数。我的脚本会给我每个循环的总数,但我希望得到一切的总和。例如,如果我输入6,我希望结果为168.如果我输入5,我希望结果为105.
由于
我的脚本如下:
def multiples(n, high):
i = 0
res = 0
while i <= high:
res = res + (n+i)
i = i + 1
print res
return res
def p(high):
i = 1
while i <= high:
multiples(i, i)
i = i + 1
p(6) # Expected Output: 168
答案 0 :(得分:1)
一些事情,
首先,这是一种非常老式的循环。
i = 0
while i <= some_number:
do_something
i = i + 1
我使用的最后一种语言需要像Basic这样的模式。使用for
循环。一个标准的for
循环(注意:不是Python的,但我会在一分钟内得到它)看起来像for i=0; i<=some_number; i++ { do_something }
。那就是:
i
Python更加清晰。 for
遍历任何可迭代,所以:
for element in [1,3,5,7,9]:
...
在循环体中为您提供1
,然后3
,然后5
,然后7
,然后9
为element
。将此与range
内置结合使用以循环N
次。
for i in range(high):
# do something `high` number of times
天真的重写看起来像:
def multiples(k, n):
res = 0
for i in range(n):
res += (k+i)
print(res)
return res
def p(n):
for i in range(n):
multiples(i, i)
然而,这并不能真正给你你想要的东西。您想要的是将值multiples(i, i)
分配给某些东西。
def p(n):
total = 0
for i in range(n):
total += multiples(i, i)
return total
现在我们正在跟踪p
内的总计,并在之后返回。
result = p(6)
print(result) # does what you want
<小时/> 当然没有充分理由打破这两个功能。您可以轻松地写下:
def p(n):
total = 0
for i in range(n):
for j in range(i):
total += j+i
return total
答案 1 :(得分:0)
通过最小的更改,这将允许p(6)
返回168
:
def multiples(n, high):
i = 0
res = 0
while i <= high:
res = res + (n+i)
i = i + 1
print res
return res
def p(high):
i = 1
lumpSum = 0
while i <= high:
lumpSum += multiples(i, i)
i = i + 1
return lumpSum
print p(6)
或者,您可以缩短p
:
def p(high):
return sum([multiples(i, i) for i in range(1, high + 1)])
编辑:整个代码确实可以简化为:Adam Smith中指出his comment。
p = lambda n: sum(i+j for i in range(n) for j in range(i))