supergravity

파이썬 - 재귀함수 return none 본문

개발중 기억해야 할만한 것들/파이썬

파이썬 - 재귀함수 return none

supergravity 2021. 8. 17. 12:48

https://stackoverflow.com/questions/17778372/why-does-my-recursive-function-return-none

 

Why does my recursive function return None?

I have this function that calls itself: def get_input(): my_var = input('Enter "a" or "b": ') if my_var != "a" and my_var != "b": print('You didn\'t type "a" or "b". Try again.') ...

stackoverflow.com

아래는 내가 작성한 코드이다.

여기서 결과적으로 return 값이 none이다. 

이유를 알아보고 수정해보자.

from collections import deque
def find_loction(location, i):
    if location == i:
        return True
    else:
        return False
def is_printe(q, count):
    print("start~!")
    print(q)

    if len(q) == 0:
        return count
         
    if q[0][0] >= max(q)[0]:
        print(max(q))
        count += 1
        if q[0][1]:
            print(q[0][1])
            print(count)
            return count
        q.popleft()
        is_printe(q, count)
    else:
        check = q.popleft()
        q.append(check)
        is_printe(q, count)
    
def solution(priorities, location):
    pri = [[prio, find_loction(location, idx)] for idx, prio in enumerate(priorities) ]
    que = deque(pri)
    answer = 0
    answer = is_printe(que, 0)
    return answer
print(solution([2, 1, 3, 2],1))

 

함수 안에서 다시 함수를 호출할 때 return 이란 키워드를 붙이지 않으면 none이라는 걸 암시한다고 한다.

그래서 none을 반환하는 것이다. 

 

is_printe(q, count) 앞에 return을 붙여주자.

 

from collections import deque
def find_loction(location, i):
    if location == i:
        return True
    else:
        return False
def is_printe(q, count):
    print("start~!")
    print(q)

    if len(q) == 0:
        return count
         
    if q[0][0] >= max(q)[0]:
        print(max(q))
        count += 1
        if q[0][1]:
            print(q[0][1])
            print(count)
            return count
        q.popleft()
        return is_printe(q, count)
    else:
        check = q.popleft()
        q.append(check)
        return is_printe(q, count)
    
def solution(priorities, location):
    pri = [[prio, find_loction(location, idx)] for idx, prio in enumerate(priorities) ]
    que = deque(pri)
    answer = 0
    answer = is_printe(que, 0)
    return answer
print(solution([2, 1, 3, 2],1))

 

그럼 잘된다.

Comments