[英]Prime checker not eliminating numbers divisible by 5?
My program looks at an input and then return a list of all prime numbers less than or equal to the number. 我的程序查看输入,然后返回所有小于或等于该数字的质数的列表。 It currently is not eliminating numbers divisible by 5, and my 'Testing divisibility by' statement is returning 3 each time.
目前尚不能消除被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()
The problem lies in the if-else within your for-loop: 问题出在您的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
Consider the case when number
is 25
. 考虑
number
为25
的情况。 In the first iteration of your for-loop, num
is 3
. 在for循环的第一次迭代中,
num
是3
。 Then, since number%num
(ie 25%3
) is not 0
, False
is not returned, and the else
is entered and True
is returned. 然后,由于
number%num
(即25%3
)不为0
,因此不返回False
,而输入else
并返回True
。
This is what you want to do instead (notice there's no else
in the for-loop): 这是您要执行的操作(请注意,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
Remove your "is_prime" and "list_of_primes" and replace with these: 删除“ 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]
... which, by the way, I got from a List Comprehension Tutorial . ...,顺便说一句,我来自列表理解教程 。 Also, I don't think you need to import math in Python 3.4+.
另外,我认为您不需要在Python 3.4+中导入数学。
Please refer to this post for a very nice explanation of how this works. 请参阅这篇文章,以很好地解释其工作原理。
Hope this helps! 希望这可以帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.