尝试查找素数 Python 时的奇怪输出

Art*_*lin 4 python primes boolean

好吧,我承认我是个菜鸟,我一直在学习关于 udemy 的编程课程。问题是要求编写一个函数来查找直到给定数字的所有素数。所以我开始编写以下代码来提取不偶数的数字,以及不能被 3 整除的数字,只是为了开始:

def count_primes(num):
    num_list5 = []
    for i in range(num + 1):
        print(i)
        if i % 2 != 0 or i % 3 != 0:
            num_list5.append(i)
    
    return num_list5
Run Code Online (Sandbox Code Playgroud)

当我用 100 的数字调用函数时,例如: count_primes(100) 在输出中,我得到num_list5显示范围内的所有数字,除了 6 和 6 的倍数:

[1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 13, 14 ...]

就像 if 语句在这里执行 AND 操作一样......因为 6 可以被 2 AND 3 整除。这是错误还是什么?或者我没有正确理解和/或操作?

奇怪的是,它曾经在某一时刻工作,在进行更改并恢复之后,它开始这样做......

我正在使用 VSCode 和 Jupyter 笔记本,并在 Ubuntu 20.04 上尝试了 Python 3.8.5 64 位和 3.9.4 64 位

小智 8

i % 2 != 0 or i % 3 != 0等于 not (i % 2 == 0 and i % 3 == 0)(德摩根定律)

它应该是 i % 2 != 0 and i % 3 != 0