2024-07-02 11:18:09 发布
网友
我创建了一个函数,希望它能创建一个五边形和正方形的数字列表。你知道吗
以下是我目前掌握的情况:
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
但当它超过前两个数字时,它似乎需要一段时间才能做到。。。你知道吗
您有两个问题:第一个问题是n==0和n==1的特殊大小写没有减少n,因此它进入了一个无限循环。这种特殊的套管其实并不需要,可以放下。你知道吗
n==0
n==1
n
第二个,也是更重要的一个,是在测试i*i == (i*(3*i-1)//2)中,假设平方数和五边形数的索引i相同。但是这种情况只会发生在i==0和i==1上,所以您不会找到超过该值的值。你知道吗
i*i == (i*(3*i-1)//2)
i
i==0
i==1
我建议:
int(sqrt(x))**2 == x
多亏了@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
解释如下:
您有两个问题:第一个问题是
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
数字时停止。你知道吗多亏了@interjay的建议,我想出了一个完美的答案:
解释如下:
相关问题 更多 >
编程相关推荐