Python - 素数练习

问题描述:

请注意,这不是我的家庭作业!我只是想在同一时间理解Python(和数学,可悲)。我知道这个程序的最终目标是获得1到20范围内的素数列表,但是,一旦它达到“for x in range ...”行,我就会迷失方向,而教程不会没有详细解释它。Python - 素数练习

可否请你用简单的英语一步一步解释该行for x in range (2,n),是什么nfor x in range (2,n)

二)明确具体

一)什么是X?底部是否是“n”?

c)n, x, n // x是什么意思。请澄清//

感谢如果你能帮助

def isprime(n): 
    if n == 1: 
     print("1 is special") 
     return False 
    for x in range(2, n): 
     if n % x == 0: 
      print("{} equals {} x {}".format(n, x, n // x)) 
      return False 
    else: 
     print(n, "is a prime number") 
     return True 

for n in range(1, 20): 
    isprime(n) 
+4

值得指出的是,这是一个非常低效的算法。更好地将范围行更改为'范围内的x(3,int(math.sqrt(n))+ 1,2)'。您需要'导入数学'并在2上添加另一个特例。这大大减少了必须完成的检查次数。检查过去的sqrt + 1是没有意义的,因为在那里你只能找到逆矩阵(例如5×2而不是2×5)。特殊外壳2将检查次数减半。例如检查611953,减少检查数量780倍。 – 2011-04-06 13:20:49

一)

for x in range (2,n) 

是同样喜欢

for (x = 2; x < n; x++) 
在其他一些语言

:一个循环,x被包括2和n-1之间的整数值。

B)

for x in range (2,n): 

n来自第一def isprime(n),是什么这个功能以后调用。在这种情况下,从底部始终是相同的n

C)

print("{} equals {} x {}".format(n, x, n // x)) 

此写入以下文本:A equals B x C其中AnBxCn/x四舍五入到最接近的较小整数。它是所谓的整数除法(如9 // 2 = 4

一个)X取值为从2n-1(因为range不包括上限)

b)否,它是相同的n如在方法定义(即方法参数)

C)整数除法

一)在提示符下试试这个:

help(range) 

它会告诉你该范围(A,B)返回一个列表atarting作为,结束在b-1,所以

range(2,10) 

[2, 3, 4, 5, 6, 7, 8, 9] 

在提示符处播放,输入range(2,2)range(2,-1),range(2,3)并查看显示结果。你会看到n == 1并不是唯一的特例。

现在,像for x in y这样的东西遍历y的元素,在你的情况下,它是一个列表。你还可以在提示进行验证:

for x in range(2,10) : 
    print x 

b)中开始def isprime(n)块是一个函数,用参数n。你可以把它叫做任何n:isprime(100)。在代码的底部,您正在迭代range(1,20)(如果有疑问,请将其输入到提示符中)并针对每个值(即1,2,3,4,...,19)调用isprime。

请注意,在此示例中,不需要创建并返回列表range,您可以使用xrange,这是一个生成器。在提示符中输入help(xrange)...

+0

谢谢,我对Python很陌生。你能解释提示是什么以及如何使用它? – Leahcim 2011-04-06 13:30:50

+0

@Michael认真吗?只需输入'python'。 – 2011-04-06 13:44:12

+0

@Michael在Linux,Unix,MacOSX上你只需键入python。不知道你在Windows上做什么,但我怀疑谷歌会知道。现在,除了编码方面的事情之外,您可能需要考虑针对此问题的更高效的算法,例如,请参阅http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes – juanchopanza 2011-04-06 13:51:00