我编写了一个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
答案 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")
答案 2 :(得分:0)
它不起作用,因为嵌套的for
声明:
for i in range(2, 30):
for j in range(2, i-1):
使用range(2, i-1)
,直到i
为4
,range
才会返回值:
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
(不包括在内)。