我正在编写一个简单的算法来检查整数的素性,但我在将Java代码翻译成Python:时遇到了问题
for (int i = 3; i < Math.sqrt(n); i += 2) {
if (n % i == 0)
return false;
}
所以,我一直在尝试使用这个,但我显然跳过了3:的除法
i = 3
while (i < int(math.sqrt(n))):
i += 2 # where do I put this?
if (n % i == 0):
return False
Python中唯一的for
-循环在技术上是"for each",因此您可以使用类似的东西
for i in xrange(3, int(math.sqrt(n)), 2): # use 'range' in Python 3
if n % i == 0:
return False
当然,Python可以做得更好:
all(n % i for i in xrange(3, int(math.sqrt(n)), 2))
也将是等效的(假设在Java循环的末尾有一个return true
)。事实上,后者将被认为是Python的方法
参考:
for
报表xrange
all
直接翻译为:
for i in range(3, int(math.sqrt(n)), 2):
if n % i == 0:
return False
在Java for循环中,步骤(示例中的i += 2
部分)发生在循环的末尾,就在它重复之前。翻译成一段时间后,你的for循环将相当于:
int i = 3;
while (i < Math.sqrt(n)) {
if (n % i == 0) {
return false;
}
i += 2;
}
Python中的哪个类似:
i = 3
while i < math.sqrt(n):
if n % i == 0:
return False
i += 2
但是,您可以使用Python的xrange
函数使其更"Python化",更易于阅读,该函数允许您指定step
参数:
for i in xrange(3, math.sqrt(n), 2):
if n % i == 0:
return False
使用基本的Python for i in range
循环:
for i in range(3, math.round(math.sqrt(x)), 2):
if (n % i == 0):
return false
我从AgileUML:的自动翻译中得到了这个答案
def op(self, n) :
result = False
i = 0
i = 3
while i < math.sqrt(n) :
if n % i == 0 :
return False
else :
pass
i = (i + 2)
return True
它在语义上似乎是正确的?