l = f.readlines() x, y, z = map(lambda a, b, c : [a, b, c], l[0].split(), l[1]. split(), l[2].split())먼저, 파일에서 라인 단위로 분리하여 얻은 리스트를 l에다가 저장한 다음 각 값을 공백 분리해서 얻은 리스트를 매핑 시켰다. 매핑을 시키고 나면 튜플이 나오므로 튜플 내에 들어 있는 리스트를 x, y, z 에 언패킹 해서 대입시켰다.
7번 문제는 팩토리알 함수를 재귀적으로 만드는 문제이다. 이거는 파이썬 글 중에서 [쉬어가기]에 한번 언급해본 적이 있다.
def fact(n) : if n == 0 or n == 1 : return 1 elif n < 0 : return 0 return n * fact(n-1) n = int(input('Number : '))이와 같이 코딩해볼 수 있다. 다만 재귀적 함수의 단점은 함수를 계속 메모리에 저장하는 만큼 횟수가 증폭할 수록 속도가 느려진다는 점이다. 또한 파이썬에서는 재귀함수의 수가 제한 되어 있는데, 내가 해본 바로는 989 번 까지 가능하다는 점이다.
팩토리얼 함수의 경우 재귀함수 대신 반복문을 써서 해결할 수도 있지만 재귀함수가 아니고서는 코딩이 복잡해지는 경우도 있다. 이런 경우에는 재귀함수를 쓰는 것이 매우 효과적이다. 이런 경우의 예로 8번 문제가 될 수 있다.
8번은 반복문으로만 풀기에는 복잡하다. 그러나 재귀함수를 쓰면 매우 간단하게 풀 수가 있다.
def list_value_change(old_value, new_value, l) : for k in range(len(l)) : if type(l[k]) == type([]) : list_value_change(old_value, new_value, l[k]) else : if l[k] == old_value : l[k] = new_value리스트 내의 값이 리스트일 경우 함수를 한번 더 불러서 반복하면 된다. 이때 리스트에 들어 있는 값은 레퍼런스이므로 그 값을 그대로 넘기기만 해도 모든 값들을 변경할 수가 있다.
댓글 없음:
댓글 쓰기