为什么 if 语句中的 "or" 运算符不起作用?

Why does the "or" operator in the if statement not work?

为什么for循环中的if语句不能正常工作? "0,1" 虽然小于 2,但仍然返回为 True。代码有点草率,抱歉。

def isprim(n):
    for i in range(2,n-1):
        if n % i == 0 or n < 2:
            return False
    return True

for i in range(50):
    if isprim(i):
        print(i)

输出为:

0 1个 2个 3个 5个 7 11 13 17 19 23 29 31 37 41 43 47

n = 0n = 1n = 2时,函数不执行循环,因为循环的range是从2开始的,所以函数跳过循环和 returns True.

永远不会进入 isprim(n) 中的 for 循环,因为 range(2, n-1) 的 2 大于 0 和 1。因此,return True 对于这些情况总是执行。

游戏结束:

  • 从 0 循环到 49
  • 迭代 0 -> isprim(0)
  • 从 2 到 -1 循环 -> range(2, -1) 是一个空列表
  • return 正确
  • 迭代 1 -> isprim(1)
  • 从 2 到 0 循环 -> range(2, 0) 是一个空列表
  • return 正确
  • 迭代 2 -> isprim(2)
  • 从这里开始,n 总是大于或等于 2。

所以你的问题是for i in range(2, n-1)。在 REPL 中:

>>> len(range(2, -1))
0
>>> len(range(2, 0))
0
>>> len(range(2, 1))
0
>>> len(range(2, 2))
0
>>> len(range(2, 3))
1

对于前几个素数,最好进行显式测试:

def is_prime(n: int) -> bool:
    if n not in [1,2]:
        for i in range(2, n-1):
            return False
    return True

这可能就是您要找的东西

def isprim(n):
   for i in range(2,n):
        if n % i == 0 or n < 2:
            return False
        else:
            return True

    # Special case for 2
    if n==2:
        return True