[1주차] 파이썬 중급 1~3

이철민·2023년 2월 6일

오늘 배운 내용

[함수]

  • '함수'는 곧 '기능'
    • 함수는 파이썬 내장함수, 사용자가 직접 선언하는 사용자 함수로 나뉜다.
    • 내장함수: print, input, sort, reverse, clear등

함수는 def 키워드, 함수명, : , 들여쓰기를 통해 선언

  • 함수를 선언했으면 꼭 호출 해줘야 한다.
    • ex) add.cal()
  • 함수 내에서 또 다른 함수를 호출 할 수 있다.
    • pass를 이용해서 실행문을 생략할 수 있다.
실습: 구구단 출력 함수가 연쇄적으로 호출되도록 함수 선언!

def gugudan2():
    for i in range(1,10):
        print('2 * {}: {}'.format(2, 2 * i))
    gugudan3()

def gugudan3():
    for i in range(1,10):
        print('3 * {}: {}'.format(3, 3 * i))
    gugudan4()

def gugudan4():
    for i in range(1,10):
        print('4 * {}: {}'.format(4, 4 * i))

gugudan2()
  • 인수와 매개변수
    • 함수 호출 시 함수에 데이터 전달
    • 인수와 매개 변수의 개수는 일치해야 한다.

  • 매개변수의 개수가 정해지지 않은 경우 (*numbers)를 이용한다.
    • ex) def calculator(*numbers)
    • 이 경우, type(numbers) 는 <class 'tuple'>
  • 데이터 반환 : 함수 실행 결과를 호출부로 반환

return 키워드를 이용하면 함수 실행 결과를 호출부로 반환 할 수 있다!

  • 전역 변수와 지역 변수
    • 전역 변수: 함수 밖에 선언된 변수, 함수 안에서 수정 불가!
    • 지역 변수: 함수 안에서 선언된 변수, 함수 안에서만 사용 가능!
    • global 키워드: 함수 안에서도 전역변수 값 수정 가능
  • 중첩 함수: 함수 안에 또 다른 함수가 있는 형태
    • 내부 함수를 함수 밖으로 호출 할 수 없다.
  • Lambda 함수: 함수 선언을 보다 간단히
def calculator(n1, n2):
    return n1 + n2
    
-> calculator = lambda n1,n2: n1 + n2 
실습: 삼각형, 사각형, 원의 넓이를 구하는 lambda 함수를 만들어보자

triangle_area = lambda n1,n2 : n1 * n2 /2
sqaure_area = lambda n1,n2 : n1 * n2
circle_area = lambda r : r * r * 3.14

width = int(input('가로 길이 입력: '))
height = int(input('세로 길이 입력: '))
radius = int(input('반지름 길이 입력: '))

triangle_value = triangle_area(width,height)
sqaure_value = sqaure_area(width,height)
circle_value = circle_area(radius)

print(f'삼각형의 넓이: {triangle_value}')
print(f'사각형의 넓이: {sqaure_value}')
print(f'원의 넓이: {circle_value}')

[모듈]

  • 모듈: 함수가 선언되어 있는 파이썬 파일
    • 내부 모듈, 외부 모듈(ex.pandas), 사용자 모듈로 구분
    • random 모듈 중 난수 1개 발생 -> random.randint
    • random 모듈 중 난수 n개 발생 -> random.sample
  • 모듈 제작
    • import calculator.py -> import.calculator 모듈 사용 가능
    • 같은 directory 내에서만 사용 가능
  • import , from, as
    • import 키워드를 이요해서 모듈 임포트
    • as 키워드 이용해 모듈 이름 단축
      • import calculator as cal
    • from ~ as 키워드로 모듈 특정 기능 사용
      • from calculator import add
* __name__ 전역변수 *

-> __name__에는 모듈 이름이 저장되거나 '__main__'이 저장된다. 

-> __main__이 저장되어 있으면 프로그램의 시작 파일. 
실습: 단위 환산 모듈을 만들고 cm을 mm, inch, m, ft로 변환해보자 

사용자 모듈: unit_conversion 

def cm_to_mm(n):
    return round(n * 10, 3)

def cm_to_inch(n):
    return round(n * 0.393, 3)

def cm_to_m(n):
    return round(n * 0.01, 3)

def cm_to_ft(n):
    return round(n * 0.032, 3)

if __name__ == '__main__':
    print(f'10cm: {cm_to_mm(10)}mm')
    print(f'10cm: {cm_to_inch(10)}inch')
    print(f'10cm: {cm_to_m(10)}m')
    print(f'10cm: {cm_to_ft(10)}ft')
    
---------------------------------------------
   
import unit_conversion as uc

if __name__ == '__main__':
    input_number = int(input('길이(cm) 입력: '))

    return_value = uc.cm_to_mm(input_number)
    print(f'return_value: {return_value}mm')

    return_value = uc.cm_to_inch(input_number)
    print(f'return_value: {return_value}inch')

    return_value = uc.cm_to_m(input_number)
    print(f'return_value: {return_value}m')

    return_value = uc.cm_to_ft(input_number)
    print(f'return_value: {return_value}ft')
  • 패키지: 패키지를 이용하면 관련 있는 모듈을 그룹으로 관리할 수 있다.
    • CalculagtorForInt -> addCal.py, subCal.py 등등
  • site - packages
    • site - packages에 있는 모듈은 어디서나 사용할 수 있다.
실습: site-packages에 약수와 소수를 리스트로 반환하는 모듈을 만들어보자. 

사용자 모듈: divisor_mod

def divisor(inputNumber): 
    result = []
    for number in rnagne(1, (inputNumber + 1)):
        if inputNumber % number == 0:
           result.append(number)
           
    return result
    
def prime_number(inputNumber):
    result = []
    for number in range(2, (inputNumber + 1)):
        flag = True
        for n in range(2, number):
            if number % n == 0:
                flag = False
                break
         
        if (flag):
            result.append(number)
            
    return result
    
 --------------------------------------------------------
 from divisor_pac import divisor_mod as dm
 
 print(f'10의 약수: {dm.divisor(10)}')
 print(f'50까지의 소수: {dm.prime_number(50)}') 

어려웠던 부분

return 함수 이해가 너무 어려워서 애를 먹었다. 구글에도 찾아봤는데, 사실 지금도 완전히 이해한 건지 모르겠다.. ㅎ

오늘의 소감

산 넘어 산이라고, 파이썬 기초도 어려웠는데, 파이썬 중급은 훨씬 더 어렵다. 방법은 계속 하는 거 밖에 없고, 앞으로도 그렇게 할 거지만, 뒤에 나올 내용들이 이보다 더 어렵다면, 주어진 시간 내에 정말 다 이해할 수 있을까..? 라는 걱정이 되긴 한다.. :)

profile
늘 온 마음을 다해 :)

0개의 댓글