我的程序查看输入,然后返回小于或等于该数字的所有素数的列表。它目前不是要删除可被5整除的数字,而且我的'测试可分性为'声明每次都返回3次。
import math
def is_prime(number):
if number % 2:
# equivalent to if number % 2 != 0 because if number is
# divisible by 2 it will return 0, evaluating as 'False'.
for num in range(3, int(math.sqrt(number)) + 1, 2):
print("Testing divisibility by {}".format(num))
if number % num == 0:
return False
else:
return True
else:
return False
def list_of_primes(number):
prime_list = []
for x in range(2, number + 1):
if is_prime(x):
prime_list.append(x)
return prime_list
def main():
while True:
usr_in = eval(input("Please enter a positive number"
" greater than 1: "))
if usr_in > 1: break
else:
print("Number not valid.")
prime_list = list_of_primes(usr_in)
for x in prime_list:
print(x)
if __name__ == '__main__':
main()
答案 0 :(得分:1)
问题在于你的for循环中的if-else:
def is_prime(number):
if number % 2:
for num in range(3, int(math.sqrt(number)) + 1, 2):
print("Testing divisibility by {}".format(num))
if number % num == 0:
return False
else:
return True
else:
return False
考虑number
为25
时的情况。在for循环的第一次迭代中,num
为3
。然后,由于number%num
(即25%3
)不是0
,因此不会返回False
,并输入else
并返回True
这是您想要做的事情(请注意for循环中没有else
):
import math
def is_prime(number):
if number % 2:
# equivalent to if number % 2 != 0 because if number is
# divisible by 2 it will return 0, evaluating as 'False'.
for num in range(3, int(math.sqrt(number)) + 1, 2):
print("Testing divisibility by {}".format(num))
if number % num == 0:
return False
return True
else:
return False
答案 1 :(得分:0)
删除你的" is_prime"和" list_of_primes"并替换为:
def list_of_nonprimes(number):
return [j for i in range(2, 8) for j in range(i*2, number, i)]
def list_of_primes(number):
noprimes = list_of_nonprimes(number)
return [x for x in range(2, number) if x not in noprimes]
...顺便说一下,我是从List Comprehension Tutorial获得的。另外,我认为你不需要在Python 3.4 +中导入数学。
请参阅此帖子了解very nice explanation如何运作。
希望这有帮助!