본문 바로가기
Appz Knowledge/Python

Python 혼공노트 - 기초 함수 몇 가지...

by 스쳐가는인연 2023. 1. 30.

Python 혼공노트
- 혼자 공부하는 파이썬(개정판) 청강하며... (그외 파이썬 강의도 …)

알아두면 쓸데 있는 파이썬으로 구현된 함수들:

삼각형의넓이
1 / 2 * base * hight

pi = 3.141592
원의둘레: 
length = 2 * pi * radius

원의넓이:
square = pi * radius * radius
square = pi * (diameter / 2) (diameter / 2)

호의길이
length = 2 * pi * radius * 중심각(x) / 360

부채꼴의넓이
square = pi * radius * radius * 중심각(x) / 360



피타고라스의 정리 (밑변: a , 높이: b , 빗변: c / c ** 2 = a ** 2 + b ** 2 )
a = ( c ** 2 - b ** 2 ) ** ( 1 / 2 )
b = ( c ** 2 - a ** 2 ) ** ( 1 / 2 )
c = ( a ** 2 + b ** 2 ) ** ( 1 / 2 )


등차로 증가하는 1번째 부터 10번째까지 포함된 리스트:
등차수열 
a = [None] # Array index와 값의 정렬을 위해 첫 항을 의미없는 것으로 채움
for n in range(1, 10+1):
    a_n = 2 * n - 1
    a.append(a_n)
print(a)


점화식: 이전 항을 기반으로 다음항을 얻음
a = [None] # Array index와 값의 정렬을 위해 첫 항을 의미없는 것으로 채움
for n in range(1, 10+1):
    if n == 1:
        a_n = 1
    else:
        a_n = a[n-1] + 2 
    a.append(a_n)
print(a)

Note. append()는 처리에 부하를 주어 처리량이 많을 수록 효율이 낮다.
    list 초기 생성 시, 최대치를 지정하여 생성하면 일부 개선할 수 있다.

N = 10
a = [None] * (N+1) # None 으로 채워진 list 생성.  참고로, 첫 항을 None으로 남겨두기 위해 필요 수+1을 함.
for n in range(1, N+1):
    if n == 1:
        a[1] = 1
    else:
        a[n] = a[n-1] + 2 
print(a)


피보나치수열 : 
N = 10
a = [None] * (N+1) # None 으로 채워진 list 생성.  참고로, 첫 항을 None으로 남겨두기 위해 필요 수+1을 함.
for n in range(1, N+1):
    if n == 1 or n == 2:
        a[n] = 1
    else:
        a[n] = a[n-1] + a[n-2] 
print(a)

재귀함수:
cal_result = {1: 1, 2: 1}
def f(n):
    if n in cal_result:
        return cal_result[n]
    temp_cal = f(n - 1) + f(n - 2)
    cal_result[n] = temp_cal
    return cal_result
    # return cal_result[n] := f(n - 1) + f(n - 2) # else 구문을 최신 python에서 축약할 수 있음


팩토리얼 연산: n! = n * (n-1) * (n-2) * ... * 1
반복문:
def factorial(n):
    output = 1
    for i in range(1, n+1):
        output *= i
    return output

재귀함수: 수열의 점화식 이용(이웃한 항의 관계를 통해 수열을 나타내는 것)
팩토리얼 점화식
1! = 1
(n이 2 이상의 수일때) n! = n * (n-1)!

def factorial(n):
    if n == 1:
        return 1
    elif n >= 2:
        return n * factorial(n - 1)


bmi = 몸무게 / ( 키 / 100 ) ** 2


하노이탑(Tower of Hanoi)
- 한 번에 한 개의 원판만 움직일 수 있음
- 큰 원판이 작은 원판 위에 있을 수 없음

카운터 = 0

def 하노이탑(원판수, 시작기둥, 대상기둥, 보조기둥):
    global 카운터
    if 원판수 == 1:
        print(시작기둥, "->", 대상기둥)
        카운터 += 1
    else:
        하노이탑(원판수 - 1, 시작기둥, 보조기둥, 대상기둥)
        print(시작기둥, "->", 대상기둥)
        카운터 += 1
        하노이탑(원판수 - 1, 보조기둥, 대상기둥, 시작기둥)

원판수 = int(input("원판 수: "))
하노이탑(원판개수, "A", "B", "C")
print(카운터)


# 하노이탑은 ( 2 ** n ) - 1 횟수 이동이 필요함
# print((2 ** 원판수) - 1)

반응형