Python相当于Java的标准for-loop是什么?



我正在编写一个简单的算法来检查整数的素性,但我在将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

它在语义上似乎是正确的?

最新更新