Python 如何根据计算结果检查范围内的所有数字?
所以我试着把所有的素数打印到100。以下是我目前的代码:Python 如何根据计算结果检查范围内的所有数字?,python,Python,所以我试着把所有的素数打印到100。以下是我目前的代码: primes = [] for num in range(100): if num > 1: for i in range(2, num): if num % i != 0: primes += [num] break else: break
primes = []
for num in range(100):
if num > 1:
for i in range(2, num):
if num % i != 0:
primes += [num]
break
else:
break
print(primes)
但是,当我运行代码时,它只对范围内的第一次迭代进行计算(如果num%i!=0
)(对于范围内的i(2,num)
)。对于像15这样的数字,这是一个问题,中范围内i的第一次迭代是2。15除以2不会得到一个整数,因此它运行primes+=[num]
。它已经进行了第一次迭代,没有运行其余的迭代。有办法运行该范围内的所有迭代吗?该函数可能正是您想要的 这是我的看法
def预充量(限值=100):
... 对于范围内的数字(限制):
... is_prime=all([number%除数!=0表示范围内的除数(2,number)])
... 如果是_素数:
... 产量
...
>>>列表(素数(10))
[0, 1, 2, 3, 5, 7]
>>>列表(素数(100))
[0, 1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
>>>
不完整,0和1不是素数。但是我想你明白了。你应该删除if语句中的分隔符。因为一旦条件为真,脚本就会中断。尝试以下操作:
primes = []
for num in range(100):
if num > 1:
for i in range(2, num):
if num % i == 0:
break
else:
primes.append(num)
print(primes)
只有当内部
for
循环耗尽时,代码才会执行else
块,即完成所有迭代而不中断。尝试适应您的方法,但我认为应该有更好的方法来解决此问题
>>> primes = []
>>> for num in range(2,100):
... p = True
... for i in range(2, num):
... if num % i == 0:
... p = False
... if p:
... primes += [num]
...
>>> primes
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
你的逻辑有点错误。这是你要怎么做的
primes = []
for num in range(2, 100): # 0 and 1 aren't primes
for i in range(2, num):
if num % i == 0:
break
else: # the else condition is for the for loop i.e. if it executes without break
primes.append(num)
print(primes)
如果num%i!=0:,您需要检查该数字对于该范围内的所有数字是否都是可除的(但您可以将其整除到sqrt(num)),否则程序的逻辑是错误的。