我在python中写了这个来计算给定值下的素数。我执行代码时打印“0”。谁能告诉我为什么我的代码出错了?
def is_prime(x):
if x<2:
return False
else:
for value in range(2, x):
if x%value == 0:
return False
else:
return True
def primes_in(x):
primes = [ ]
for value in range(2, x+1):
if is_prime(value):
primes.append(1)
elif not is_prime(value):
primes.append(0)
else:
primes.append(0)
return sum(primes)
print primes_in(25)
答案 0 :(得分:0)
请参阅range function
range(start, stop[, step])
for value in range(2, x+1):
if x%value == 0:
return False
这意味着价值从2
到x
包括。这意味着必然会有x%value == 0
。所以你的函数总是返回False,然后primes是0
的列表。
您应该使用for value in range(2, x)
。
答案 1 :(得分:0)
问题在于你的is_prime函数,你从2循环到x
,包括两者,所以x%x总是0,因此它总是返回False。
你只需要循环到数字的sqrt。
示例代码 -
def is_prime(x):
if x<2:
return False
else:
for value in range(2, int(x**(1/2))+1):
if x%value == 0:
return False
else:
return True
另外,在另一个功能中你应该开始
答案 2 :(得分:0)
def is_prime(x):
if x<2:
return False
else:
if x == 2:
return True
for value in range(2, int(x**(0.5)) + 1):
if x%value == 0:
return False
return True
def primes_in(x):
primes = []
for value in range(2, x+1):
if is_prime(value) == True:
primes.append(1)
elif is_prime(value) == False:
primes.append(0)
else:
primes.append(0)
return sum(primes)
print primes_in(25)