【发布时间】:2021-04-20 18:36:23
【问题描述】:
好吧,我承认我是个菜鸟,而且我一直在学习关于 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
当我调用 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 位
【问题讨论】:
-
你的目标是让这个输出的素数小于或等于num吗?
-
你的代码正在做它应该做的事情。您同时添加所有不能被 2 和 3 整除的数字,即 6 (2*3) 和 6 的所有倍数。它应该是 AND 而不是 OR。 6%2 != 0 是假的,6%3 != 0 也是假的,这就是为什么它们没有附加到列表中。
-
嗯,这有点像是在做 AND。请记住,(NOT A OR NOT B) 等于 NOT(A AND B)。如果既能被 2 整除又能被 3 整除,则省略一个数字。