Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 圆中晶格点的数目_Python - Fatal编程技术网

Python 圆中晶格点的数目

Python 圆中晶格点的数目,python,Python,我试图确定一个圆中晶格点的数量,也就是说,基本上我试图找到对的数量(m,n),这样m^2+n^2正如你已经注意到的,问题是你在计算圆的一个象限中的晶格点。扩大范围以解决这一问题是一种方法;另一个解决办法是采取 lattice points = 4 * (lattice points in a single quadrant) - 3 我们必须减去3,因为第一项计算原点四次 既然您已经发现了这个bug,下面是一些关于改进代码的其他方法的快速评论: range()最多可以使用三个参数:开始、结

我试图确定一个圆中晶格点的数量,也就是说,基本上我试图找到对的数量(m,n),这样m^2+n^2正如你已经注意到的,问题是你在计算圆的一个象限中的晶格点。扩大范围以解决这一问题是一种方法;另一个解决办法是采取

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)
    N>sqrt(N)
    ,很明显晶格点(m,N)将落在半径N的圆之外。因此,只需查看
    -sqrt(N)即可加速循环
    
    for m in range(int(N)):
    
    for m in range(-int(N), int(N)):