-2

파이썬 사용하기 3.4. IF 문에서 항상 부울 (True 또는 False)을 반환하는 함수 prime/2를 호출하려고 시도했습니다. 이 기능은 실행하는 데 비용이 많이 든다. 그래서 나는 그것이 필요할 때만 호출하기를 원한다. 따라서 의사 결정 지점에서 호출한다. 호출 된 함수는 True/False를 안정적으로 반환하지 않습니다. 때로는 반환이 없음 인 경우 테스트가 실패합니다. Python의 IDLE과 디버거를 사용합니다. 나는 소수 (2, 5, [])를 호출하고 코드를 단계별로 설명한다. 프라임/2가 라인 엘프 n < = p에 도달하고 n = 5 및 p = 5 인 경우 디버거는 프라임/2가 True를 리턴하지만 소수/3 엘프 프라임 (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) 
+5

코드를 보여 주시기 바랍니다 그래서 우리는 당신이에 대한 – MattDMo

+2

_ "참조 수동 구문 내가 IF 내에서 할 노력하고있어 허용하지 않습니다"_ 무슨 말을하는지 알고있다. 'if myFunctionCall() :'이 작동하지 않는다고 말하는 겁니까? 그것은 완벽하게 유효한 문법입니다. – Kevin

+2

파이썬 불리언 표현 밖으로 단락. 코드없이 정확하게 말할 수는 없지만 need_time_consuming_func 및 False이면 time_consuming_func()를 호출하지 않습니다. – Iguananaut

답변

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 
+0

예,이 방법이 작동하는지 확인했습니다. 정말 고맙습니다. – dogwood

+0

문제 없습니다. 이 질문을 해결할 수 있다고 생각되면 stackoverflow 프로시 저는이를 답변으로 표시하는 것입니다. – user590028

관련 문제