-2

整数を引数として取り、Trueそのすべての桁が素数である場合に返す Python 再帰関数を作成する必要があります。例えば

    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
4

2 に答える 2

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

些細な部分は1桁しかないため、重要な部分はこれです。ここで再帰に入ります。

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))
于 2013-03-03T17:28:47.630 に答える
0
def allPrime(n):
    if n==0:
        return(True)
    elif (n%10) in [2,3,5,7]:
        return(allPrime(n//10))
    else:
        return(False)
于 2013-03-03T17:25:24.403 に答える