Python - 素数练习
请注意,这不是我的家庭作业!我只是想在同一时间理解Python(和数学,可悲)。我知道这个程序的最终目标是获得1到20范围内的素数列表,但是,一旦它达到“for x in range ...”行,我就会迷失方向,而教程不会没有详细解释它。Python - 素数练习
可否请你用简单的英语一步一步解释该行for x in range (2,n),
是什么n
行for 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)
一)
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
其中A
是n
,B
是x
和C
是n/x
四舍五入到最接近的较小整数。它是所谓的整数除法(如9 // 2 = 4
)
一个)X取值为从2
到n-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)...
谢谢,我对Python很陌生。你能解释提示是什么以及如何使用它? – Leahcim 2011-04-06 13:30:50
@Michael认真吗?只需输入'python'。 – 2011-04-06 13:44:12
@Michael在Linux,Unix,MacOSX上你只需键入python。不知道你在Windows上做什么,但我怀疑谷歌会知道。现在,除了编码方面的事情之外,您可能需要考虑针对此问题的更高效的算法,例如,请参阅http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes – juanchopanza 2011-04-06 13:51:00
值得指出的是,这是一个非常低效的算法。更好地将范围行更改为'范围内的x(3,int(math.sqrt(n))+ 1,2)'。您需要'导入数学'并在2上添加另一个特例。这大大减少了必须完成的检查次数。检查过去的sqrt + 1是没有意义的,因为在那里你只能找到逆矩阵(例如5×2而不是2×5)。特殊外壳2将检查次数减半。例如检查611953,减少检查数量780倍。 – 2011-04-06 13:20:49