Python 圆中晶格点的数目
我试图确定一个圆中晶格点的数量,也就是说,基本上我试图找到对的数量(m,n),这样m^2+n^2正如你已经注意到的,问题是你在计算圆的一个象限中的晶格点。扩大范围以解决这一问题是一种方法;另一个解决办法是采取Python 圆中晶格点的数目,python,Python,我试图确定一个圆中晶格点的数量,也就是说,基本上我试图找到对的数量(m,n),这样m^2+n^2正如你已经注意到的,问题是你在计算圆的一个象限中的晶格点。扩大范围以解决这一问题是一种方法;另一个解决办法是采取 lattice points = 4 * (lattice points in a single quadrant) - 3 我们必须减去3,因为第一项计算原点四次 既然您已经发现了这个bug,下面是一些关于改进代码的其他方法的快速评论: range()最多可以使用三个参数:开始、结
lattice points = 4 * (lattice points in a single quadrant) - 3
我们必须减去3,因为第一项计算原点四次
既然您已经发现了这个bug,下面是一些关于改进代码的其他方法的快速评论:
最多可以使用三个参数:开始、结束和步骤:range()
- 如果只提供了两个参数,则默认步骤为1
- 如果只提供了一个参数,则默认为start为0,step为1
在固定版本中,你会写:for m in range(int(N)):
for m in range(-int(N), int(N)):
- 因为您的示例提供了N作为整数,所以我不确定为什么要连续转换为int()。最好在函数开始时对int()执行一次强制转换,然后删除其余的强制转换。这将减少视觉噪音
- 提供的函数抛出一个NameError。它计算变量
中的晶格点,但返回尚未定义的num
。快速修复方法是整理返回报表;最好使用更具描述性的变量名,如number
还请注意,您可以将lattice\u count
替换为num=num+1
num+=1
- 如果
或m>sqrt(N)
,很明显晶格点(m,N)将落在半径N的圆之外。因此,只需查看N>sqrt(N)
-sqrt(N)即可加速循环
for m in range(int(N)):
for m in range(-int(N), int(N)):