我无法通过搜索找到答案,而且我已经在这方面工作了两天而且很难过。我想我只是对数学感到困惑。我正在尝试编写一个找到前n个三角形数字的函数。
def formula(n):
i = 1
while i <= n:
print i, '\t', n * (n + 1)/ 2
i += 1
print
因此,例如,如果我输入公式(5),它将如下所示:
1 1
2 3
3 6
4 10
5 15
我知道如何制作一张表从1到我选择的任何数字n ..但是我无法弄清楚如何使第二部分等于我输入的公式n *(n + 1)/ 2。通过这个的逻辑是什么?每次我输入公式(5)时,例如循环从1-5开始,但在右手栏中一直返回相同的确切答案,这将是15。我无法在它开始的地方进行在右手边的1,3,6等处。
答案 0 :(得分:1)
观察到您正在计算n * (n + 1) / 2
而不是i * (i + 1) / 2
的评论是正确的。您还可以通过观察第i个三角形数字只是从1到i的整数之和来摆脱必须在每一步进行乘法和除法,因此在每一步中您只需将i添加到上一步三角数。代码如下:
def formula(n):
ith_sum = 0
for i in xrange(1, n+1):
ith_sum += i
print i, '\t', ith_sum
答案 1 :(得分:0)
我完全忘记了三角形数字,谢谢你的问题!我很高兴您现在知道正确的解决方案。我很好奇是否可以采用不同的方式:
def triangular(number):
return number + triangular(number-1) if number else 0
print triangular(5)
如果您喜欢挑战,可以尝试解决这个问题。这里和那里的打印声明将帮助您发现正在发生的事情。
答案 2 :(得分:0)
这是一个对我有用的简单解决方案
def print_triangular_numbers(n):
for i in range(n+1):
print(i, int(i * (i + 1)/ 2))
print_triangular_numbers(5)