我创建了一个函数,希望能够创建一个五边形和方形的数字列表。
这是我到目前为止所得到的:
def sqpent(n):
i = 0
list = []
while n >= 0:
if n == 0:
list.append(0)
elif n == 1:
list.append(1)
elif (i*i == (i*(3*i-1)//2)):
list.append(i)
n -= 1
i += 1
但是当它超过前两个数字时,似乎需要一段时间才能这样做......
答案 0 :(得分:2)
您有两个问题:第一个问题是n==0
和n==1
的特殊大小不会减少n
,因此会进入无限循环。特殊外壳并不是真正需要的,可以放弃。
第二个也是更重要的一个是,在测试i*i == (i*(3*i-1)//2)
中,您假设索引i
对于正方形和五边形数字是相同的。但这只会发生在i==0
和i==1
上,因此您无法在此之后找到值。
我建议:
i
而不是n
,以简化操作。i
五角形数字并检查它是否为方形数字(例如int(sqrt(x))**2 == x
)。n
个号码时停止。答案 1 :(得分:0)
感谢@ interjay的建议,我想出了这个完美无缺的答案:
import math
def sqpent(n):
counter = 0
i = 0
l = []
while counter < n:
x = (i*(3*i-1)//2)
#print(x)
if(int(math.sqrt(x))**2 == x):
#print("APPENDED: " + str(x))
l.append(x)
counter += 1
i += 1
return l
有关解释: