【发布时间】:2016-08-02 14:56:44
【问题描述】:
关于“xrange”函数——(Python3 中的“range”)当我在循环中进行否定检查时会发生什么?在这种情况下,可以将负数视为边缘情况,但始终返回 None。有什么见解吗?
【问题讨论】:
标签: python-3.x if-statement primes
关于“xrange”函数——(Python3 中的“range”)当我在循环中进行否定检查时会发生什么?在这种情况下,可以将负数视为边缘情况,但始终返回 None。有什么见解吗?
【问题讨论】:
标签: python-3.x if-statement primes
问题是您正在检查 for 循环内的数字是否为负数。例如,如果 x=-3,那么您正在尝试在 range(2,-1) 中运行一个 for 循环,该循环为无。所以 for 循环永远不会运行,因此返回 True。
def isprime(x):
if x<=0:
return(False)
for a in range(2,(x//2)+1):
if(x%a==0):
return(False)
return(True)
【讨论】:
根据小学的定义,素数仅定义为正数,因此您的函数应为每个负数返回False,例如:
def isprime(x):
if x <= 0:
return False
for a in range(2, (x//2)+1):
if x % a == 0:
return False
return True
话虽如此,可以扩展定义(就像在数学中的某些领域所做的那样),以包括负数(更多讨论参见here 和here)。在这种情况下,对于每个负数 -n,当 n 是素数时,-n 是素数。因此,您的代码可能类似于:
def isprime(x):
if x <= 0: # or use any |abs| method you'd like, like numpy's
x = -x
for a in range(2, (x//2)+1):
if x % a == 0:
return False
return True
【讨论】: