为什么 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 = 0
、n = 1
或n = 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
为什么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 = 0
、n = 1
或n = 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