使用for循环和break的python中的素数

时间:2017-06-01 09:52:09

标签: python primes

我编写了一个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

3 个答案:

答案 0 :(得分:2)

您的代码逻辑错误。 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子句。

答案 1 :(得分:1)

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链接对您有很大帮助。快乐编码

答案 2 :(得分:0)

它不起作用,因为嵌套的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(不包括在内)。