我遇到了一个问题,我必须返回用户输入的数字的10个种子内的所有数字的总和(包括)。例如,如果数字为1,则为1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 = 45.到目前为止,我有:
def temp(n1):
seed = n1
counter = 0
while counter < 9:
n1 += 1
counter+= 1
return n1
对于为什么我的代码不起作用并帮助修复我的代码,我将不胜感激。
答案 0 :(得分:2)
在你的代码中,每次添加1,你应该添加计数器加1(因为每次你应该增加一个 more ):
def temp(n1):
n1 -= 1 <-- HERE
counter = 0
while counter < 9:
n1 += counter + 1 <-- HERE
counter += 1
return n1
另外,你需要从n1中减去一个,以弥补我们应该在第0次迭代时加0的事实。
另一方面,您不需要变量seed
,我认为这是来自以前的算法设计。
这会产生正确的结果:
>>> temp(1)
45
另一种方法是使用for
和range
。使用for
和range
的“每隔一个数字”问题的解决方案出现在此处:
def temp(n1):
n1 -= 1
for counter in range(1, 11, 2): # We use 11 instead of 9 because we want to *stop* on 11 (9 is inclusive)
n1 += counter
return n1
答案 1 :(得分:2)
@ Majora320的答案是正确的,并解释了为什么你的代码不起作用。但是,更简洁的解决方案将是
def temp(n):
seed = 10
return ((seed * (seed-1))/2) + (n-1)
print temp(1)
print temp(10)
print temp(11)
print temp(12)
<强> OP 强>
45
54
55
56
基本上,它需要提前数学方程种子*(种子-1)/ 2来从1开始添加连续数。但是因为你的基数no可以大于1我已经添加(n-1)来调整该偏移量。