【问题标题】:Why does the "or" operator in the if statement not work?为什么 if 语句中的“或”运算符不起作用?
【发布时间】:2021-07-28 06:28:09
【问题描述】:

为什么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

【问题讨论】:

  • 0, 1, 2 不会因为range(2, n-1)而进入循环。因此,对于这些数字,它将始终返回 True
  • 我投票结束这个问题,因为它没有证明语言或运行时有任何实际的不当行为。

标签: python for-loop if-statement or-operator


【解决方案1】:

这可能就是你要找的东西

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

【讨论】:

    【解决方案2】:

    玩一玩:

    • 从 0 到 49 循环
    • 迭代 0 -> isprim(0)
    • 从 2 到 -1 的循环 -> range(2, -1) 是一个空列表
    • 返回真
    • 迭代 1 -> isprim(1)
    • 从 2 到 0 的循环 -> range(2, 0) 是一个空列表
    • 返回真
    • 迭代 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
    

    【讨论】:

      【解决方案3】:

      n = 0n = 1n = 2时,函数不执行循环,因为循环的range从2开始,因此函数跳过循环并返回True

      【讨论】:

      • 但是我正在检查 n
      • 你在循环中检查了它,循环从 2 运行到 n-1。所以如果n小于2,则循环范围为空,循环不会运行
      • 知道了!谢谢你。我的错!
      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-06-28
        • 2020-03-13
        • 1970-01-01
        • 2014-01-17
        • 2020-08-14
        • 1970-01-01
        • 2017-12-04
        • 2021-04-14
        相关资源
        最近更新 更多