【问题标题】:What is Python's equivalent of Java's standard for-loop?Python 相当于 Java 的标准 for 循环是什么?
【发布时间】:2013-06-29 04:58:38
【问题描述】:

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

【问题讨论】:

  • for (a; b; c) { _ } -> a; while(b) { _; c; } - 除非范围界定问题并且必须处理 continue。 for-each 构造的最后一个组件在循环体的每次评估之后进行评估。
  • 您可能想看看blog.startifact.com/posts/older/what-is-pythonic.html 以将java(或其他语言)翻译成python - 不要忘记成为pythonic!

标签: java python loops for-loop translate


【解决方案1】:

Python 中唯一的 for-loop 在技术上是“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 我认为他的意思是 Python 没有类似 C 的 for 循环来合并初始化程序、停止条件和步骤语句。即:Python 中唯一的forforeach
  • 确实,我澄清了那个说法。
【解决方案2】:

直接翻译是:

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

【讨论】:

    【解决方案3】:

    在 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 函数使其更“Pythonic”并且更易于阅读,该函数允许您指定 step 参数:

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

    【讨论】:

      【解决方案4】:

      使用基本的 Python for i in range 循环:

      for i in range(3, math.round(math.sqrt(x)), 2):
          if (n % i == 0):
              return false
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-08
        • 1970-01-01
        • 2011-06-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-20
        • 1970-01-01
        相关资源
        最近更新 更多