Python中的等价于Java标准for循环的是什么?

14

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

1
for (a; b; c) { _ } -> a; while(b) { _; c; } - 除了作用域问题和必须处理 continue 之外。for-each 结构的最后一个组件在每次循环体的评估之后进行评估。 - user2246674
1
你可能想要查看http://blog.startifact.com/posts/older/what-is-pythonic.html,以了解将Java(或其他语言)翻译为Python时的Pythonic编程风格 - 别忘了保持Pythonic! - Singular1ty
5个回答

23

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,则其与后者等效,后者被认为是Pythonic的方式。


参考资料:


Python有while循环...或者我误解了你回答的部分? - mipadi
4
我认为他的意思是Python没有类似C语言的for循环,那种将初始化、停止条件和步长合并在一起的循环。也就是说,在Python中唯一的for循环是foreach循环。 - millimoose
的确,我澄清了那个声明。 - arshajii

4
一种直接的翻译是:
for i in range(3, int(math.sqrt(n)), 2):
    if n % i == 0:
        return False

3
在Java的for循环中,步骤(在你的示例中的i += 2部分)发生在循环结尾,就在重复之前。翻译成while后,您的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函数使其更加“Pythonic”和易于阅读,该函数允许您指定一个step参数:

for i in xrange(3, math.sqrt(n), 2):
    if n % i == 0:
        return False

1
使用基本的Python for i in range 循环:
for i in range(3, math.round(math.sqrt(x)), 2):
    if (n % i == 0):
        return false

0

我从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

看起来语义上是正确的吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接