목록Coding/Python (22)
exestudiary
재귀함수 사용 O def fibonacci(n, a=0, b=1, fib_list=[]): if a >= n: return fib_list else: fib_list.append(a) a, b = b, a+b return fibonacci(n, a, b, fib_list) print(fibonacci(2000)) 재귀함수 사용 X def fibonacci(n, a=0, b=1, fib_list=[]): for i in range(n): if a >= n: return fib_list else: fib_list.append(a) a,b = b, a+b fibonacci(2000)
함수 안에서 함수 자기자신을 호출하는 방식을 재귀호출이라고 함. 재귀호출은 일반적인 상황에서는 잘 사용하지 않지만 고급 알고리즘을 구현할 때 유용하다고 함. 보통 알고리즘에 따라서 반복문으로 구현한 코드보다 재귀호출로 구현한 코드가 좀 더 직관적이고 이해하기 쉬운 경우가 많음.(많은 내공이 필요하다고 함.) 파이썬에서는 최대 재귀 깊이가 1000으로 정해져 있어 그 이상 호출 시 RecursionError가 발생 재귀호출을 사용하려면 반드시 종료 조건을 만들어줘야함. 예시1 def say_hello(depth): if depth == 0: return else: print("안녕하세요!", depth) depth -= 1 say_hello(depth) #재귀호출 say_hello(5) 예시2 def fa..
모듈 : 함수, 변수, 클래스를 모아 놓은 파일. 즉, 다른 python 프로그램에서 호출하여 사용할 수 있게끔 만든 파이썬 파일. 1. from 2. import 모듈 만들기 %%writefile test_module.py # file name : test_module.py def add(a, b): return a + b def sub(a, b): return a - b def mul(a, b): return a * b def div(a, b): return a / b 모듈 불러오기 import test_module 모듈 안에 있는 함수만 불러오고 싶을 때 from test_module import add from test_module import sub from test_module import m..
일반적으로 함수에 이렇게 매개변수를 지정해서 함수를 호출할 때 매개변수 칸에 자신이 원하는 숫자를 넣으면 결과가 바르게 나온다. def func_01(x, y, z = 0): return x + y + z s = func_01(10,20) print(s) 그런데 매개변수를 정해놓지 않는 방법이 있는데 이건 가변 인수(Arbitrary Argument)방식이라고 한다. 이건 예를 들어, 리스트, 딕셔너리, 세트 등을 매개변수로 사용할 경우 전달 개수를 미리 알 수 없을 경우 자주 사용한다. def func_01(*args): print(args) return sum(args[0]) result = func_01([x for x in range(1,11)]) # list argument print(f"fun..
lambda는 함수를 생성할 때 사용하는 def와 동일한 역할 add = lambda a, b : a+b result = add(10, 20) print(result) def add(a,b): return a+b result = add(10, 20) print(result) # 모두 같은 결과가 나옴. lambda 사용 items = [ ("food1", 100), ("food2", 90), ("food3", 70) ] # 익명 함수로 item list 내 3개 튜플 쌍 원소 중 두 번째(숫자) 원소로 정렬하는 방법 items.sort(key = lambda item: item[1], reverse = True) print(items) # Map scores = list(map(lambda item: i..
간단하게 푼 코드 scores = \ [[80, 80, 81], [84, 92, 63], [63, 73, 97], [69, 93, 85], [83, 84, 93]] for student_num, ave in enumerate(scores): print(f"{student_num + 1} : {round(sum(ave)/len(ave))}") 더 복잡하게 푼 코드 print("[국, 영, 수]") print("-"*32) for row in range(len(scores)): s = 0 for column in range(len(scores[row])): s += scores[row][column] print(f"{scores[row]} 합: {s} 평균: {round(s/len(scores[row]), ..
print(say.center(10)) # 숫자만큼 자릿수를 잡은 후, 문자열을 가운데 배치 print(say.center(10, "#")) # 숫자만큼 자릿수를 잡은 후, 문자열을 가운데 배치 # 문자열을 제외한 다른 자리에는 #으로 채우기 print(say.ljust(10)) # 숫자만큼 자릿수를 잡은 후, 왼쪽에 붙여 출력 print(say.rjust(10)) # 숫자만큼 자릿수를 잡은 후, 오른쪽에 붙여 출력 print(say.zfill(10)) # 오른쪽으로 붙여쓰고 왼쪽 빈 공간은 0으로 채움. set 자료형 > 중복 허용 X > 입력된 순서는 중요하지 않음. > set( ) 생성자 함수를 통해 만듦. > { } 를 이용해서 만들 수 있음. (딕셔너리와 같은 중괄호 사용, 구분 유의) > ad..
a_list = ["A", "B", "C", "D", "E"] a_list = list("ABCDE") # 둘 다 똑같은 리스트 n_list = [65, 66, 67, 68, 69, 70] n_list = [ascii for ascii in range(65,71)] # 이 방법 중요 z_list = list(zip(a_list, n_list)) print(z_list) # zip함수 : 동일한 개수로 이루어진 자료형을 튜플로 묶어줌. ## 결과: [('A', 65), ('B', 66), ('C', 67), ('D', 68), ('E', 69)] enumerate 사용 X x_list = [54, 50, 71, 58, 59] index = 0 for item in x_list: print(f"[{index..
# 비트 논리곱(&) 연산자 # A B A&B # 0 0 0 # 0 1 0 # 1 0 0 # 1 1 1 >>> 0011 => 3 / 0101 => 5 5 & 3 ##결과 : 1 # 비트 논리합(|) 연산자 # A B A&B # 0 0 0 # 0 1 1 # 1 0 1 # 1 1 1 3 | 5 ## 7 # 비트 배타적 논리합(^) 연산자 # A B A&B # 0 0 0 # 0 1 1 # 1 0 1 # 1 1 0 >>> 두 값이 같으면 0, 다르면 1 5 ^ 3 ## 6 # 왼쪽 시프트() 연산자 # 00011010 = 26 # 00000110 = 6 앞의 두 비트는 부호 비트(0)으로 채우고 뒤의 두 비트는 사라짐. # 오른쪽으로 시프트할 때마다 2^n으로 나눈 효과 # 시프트 연산은 정수만 연산하므로 몫만..
def f_01(x, y, z = 0): # 기본값 설정은 항상 기본값이 설정되지 않은 매개변수 뒤에 와야함. (위반 시 오류 발생) return x + y + z s = f_01(20, 30) print("func_01(10,20) 호출 후 반환 값:", s) #이러면 50이 출력됨. s = func_01(20, 30, 50) print("func_01(10, 20, 30) 호출 후 반환 값:", s) #이러면 100이 출력됨. 함수 선언 시 매개변수의 기본값을 설정해두면, 함수 사용 시 해당 매개변수 생략 가능 기본값이 정해져 있지 않은 매개변수는 반드시 값을 전달해줘야 함.
