使用Python 3.4。试图在IF语句中调用函数prime / 2,它返回一个布尔值 - 总是为True或False。该功能运行起来很昂贵,所以我只想在我知道需要时调用它,因此在决策点内调用。被调用的函数不能可靠地返回True / False。有时返回为None,此时测试失败。我使用Python的IDLE及其调试器。我打电话给素数(2,5,[])并逐步完成代码。当prime / 2到达线elif n< = p而n = 5且p = 5时,调试器显示prime / 2返回True,应该如此,但是primes / 3 elif prime(m,2)中的行需要值为None。那时我的测试失败了。我的代码:
def primes(m, n, l): # the calling function
if m > n: # creates a list of primes from
print(l, end='\n') # m through n, inclusive
elif m < 2:
primes(2, n, l)
elif m == 2:
l.append(2)
primes(3, n, l)
elif m % 2 == 0:
primes(m + 1, n, l)
elif prime(m, 2): # calling the second function
l.append(m) # to test m for primality
primes(m + 2, n, l)
else:
primes(m + 2, n, l)
def prime(n, p): # the called function will return
if n < 2: # True if m is prime, False otherwise
return False
elif n < 4:
return True
elif n <= p:
return True
elif (n > 2) and (n % p == 0):
return False
elif p == 2:
prime(n, 3)
else:
prime(n, p + 2)
答案 0 :(得分:3)
错误在于如何递归调用prime()。您需要显式返回值。像这样:
def prime(n, p): # the called function will return
if n < 2: # True if m is prime, False otherwise
return False
elif n < 4:
return True
elif n <= p:
return True
elif (n > 2) and (n % p == 0):
return False
elif p == 2:
return prime(n, 3) # <--- RETURN VALUE
return prime(n, p + 2) # <--- & RETURN VALUE