【问题标题】:prime numbers in python using for loop and breakpython中的素数使用for循环和break
【发布时间】:2017-11-02 09:48:28
【问题描述】:

我编写了一个 python 代码来查找 2 到 30 之间的素数。但我的代码没有计算 2 和 3。谁能告诉我这段代码有什么问题?

for i in range(2, 30):
    for j in range(2, i-1):
        if ((i % j) == 0):
            print(i, "is not a prime number")
            break
        else:
            print(i, "is a prime number")
        break

【问题讨论】:

  • 如果i为2或3,则不会进入下一个for循环

标签: python primes


【解决方案1】:

您的代码逻辑错误。 else 子句应该附加到内部 for 循环中,因此只有在循环耗尽而没有找到除数的情况下才会执行。

for i in range(2, 30):
    for j in range(2, i-1):
        if ((i % j) == 0):
            print(i, "is not a prime number")
            break
    else:
        print(i, "is a prime number")

还请注意,外部循环最多只能运行 29 个,因为上边界不包含在范围内。内部循环不包括i - 1,但这完全可以,因为任何非平凡除数都小于i - 1

2 和 3 根本不会进入内部循环,因为在这些情况下范围将为空。这也很好,因为 else 子句会被立即输入。

【讨论】:

  • 好的。知道了!我认为 else 只能附加到 if 语句。谢谢。
  • @Laxman 有关for 循环上的else 子句的更多信息,请参阅stackoverflow.com/q/9979970/279627
【解决方案2】:
for i in range(2, 30):
    prime = True
    for j in range(2, i-1):
        if ((i % j) == 0):
            prime = False
            # print(i, "is not a prime number")
            break
        # else:
        #  print(i, "is a prime number")
        # break
    if prime:
        print(i, "is a prime number")
    else :
        print(i, "is not a prime number")

有很多在线链接可以解决质数问题。为了提高自己搜索自己并了解。希望thisthis 链接对您有很大帮助。快乐编码

【讨论】:

    【解决方案3】:

    它不起作用,因为嵌套的 for 声明:

    for i in range(2, 30):
        for j in range(2, i-1):
    

    使用range(2, i-1),直到i4range 不返回任何值:

    i = 2 --> range(2, 1) # No value
    i = 3 --> range(2, 2) # No value
    i = 4 --> range(2, 3) # 2
    

    这是因为range 函数将值从first parameter(包括)返回到second parameter(不包括)。

    【讨论】:

      猜你喜欢
      • 2017-06-09
      • 2017-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-10
      • 1970-01-01
      相关资源
      最近更新 更多