编写递归函数,验证整数的所有数字是否为质数并返回“True”
我需要写一个Python的递归函数,这个函数接收一个整数作为参数,如果这个整数的所有数字都是质数,就返回True
。比如:
allPrime(976)
False
allPrime(357)
True
这是我到目前为止做的事情
def allPrime(n):
h=str(n)
for i in range(len(h)):
if h[i] == isPrime(h):
return True
else:
return False
2 个回答
0
在编程中,有时候我们会遇到一些问题,尤其是在使用特定的工具或库时。比如,有人可能在使用某个库的时候,发现它的某些功能没有按照预期工作。这种情况就像你买了一台新机器,但它的某些功能却不太好用,让你感到困惑。
在这种情况下,很多人会去网上寻找解决方案,比如在StackOverflow上发帖求助。这里有很多热心的程序员会分享他们的经验和解决方法,帮助你找到问题的根源。
有时候,问题的原因可能是因为版本不兼容,或者是使用方法不对。就像你在使用手机应用时,可能需要更新到最新版本才能正常使用某些功能一样。
总之,遇到问题时,不要着急,先查查资料,看看有没有人遇到过类似的情况,或者直接问问社区里的朋友们,他们可能会给你很好的建议。
def allPrime(n):
if n==0:
return(True)
elif (n%10) in [2,3,5,7]:
return(allPrime(n//10))
else:
return(False)
0
要做到这一点,你只需要提取最后一个数字,检查它是否是质数,然后继续处理其他部分。
写递归的过程其实很简单,主要包括一个基础情况和递归部分。你需要把问题分解成一个更小的问题,直到你遇到一个基础情况。
所以,你需要做的是找到你的基础情况,也就是不需要再进行递归的情况,然后想想怎么实现这一点:
#separate the number (123) into a last Digit (3) and the rest (12)
lastDigit = n % 10
rest = int(n / 10)
如果我们遇到一个不是质数的数字,我们可以直接返回假值(False),就不再进行递归了:
if not isPrime(lastDigit):
return False
基础部分就是一个数字,因此非基础部分就是我们进行递归的部分:
if n > 10:
return allPrime(rest)
所以我们有一个情况是因为遇到非质数而停止,另外还有非基础情况。基础情况也不会进行递归,而且因为我们已经处理过非质数的情况,我们只需要:
return True
总结一下:
def isPrime(n):
if n < 2: return False
if n == 2: return True
if n & 1 == 0: return False
for x in range(3, int(n ** 0.5)+1, 2):
if n % x == 0:
return False
return True
def allPrime(n):
lastDigit = n % 10
rest = int(n / 10)
if not isPrime(lastDigit):
return False
if n > 10:
return allPrime(rest)
return True
print(allPrime(9777))
print(allPrime(773))