ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • python
    PYTHON 2022. 2. 25. 20:00

    '''
    * 함수 (function)

    - 함수는 지속적으로 사용되는 코드블록에 이름을 붙여놓은 형태입니다.

    - 함수는 한 번 정의해 두면 지정된 함수 이름을 통해
     언제든지 해당 코드 블록을 실행할 수 있습니다.

    - 함수를 정의할 때는 def라는 키워드를 사용합니다.

    - 정의해 놓은 함수를 사용하는 것을 호출(call) 이라고 부릅니다.

    - 파이썬에서는 함수를 호출하려면 반드시 호출문보다 상단부에
     함수를 먼저 정의해야 합니다.
    '''
    # 함수의 정의 (1~x까지의 누적합을 구하는 로직)
    def calc_sum(end):
        sum = 0
        for n in range(1, end + 1):
            sum += n
        return sum

    # 함수의 호출
    print('1~100까지의 누적합:',calc_sum(100))


    '''
    * 인수, 매개변수 (arguments)

    - 인수는 함수를 호출할 때 함수 실행에 필요한 값들을 전달하는
     매개체 역할을 하며, 그렇기 때문에 매개변수(parameter)라고도
     부릅니다.

    - 인수의 개수는 제한이 없어 많은 값을 함수에 전달할 수도 있고
     하나도 전달하지 않을 수 있습니다.

    - 파이썬의 경우에는 데이터 타입을 작성하지 않기 때문에
    이 함수를 처음 사용하는 사람도 인수 이름만 보고 무슨 값을
    전달해야 할 지 의미를 알기 쉽게 지정하는 것이 좋습니다.
    '''


    '''
    * 연습

    1. 인수를 정수형태로 시작값(start), 끝값(end)을 입력받아
     반복문으로 start부터 end까지의 누적 총합을 구하는 함수를 정의하세요.

    2. 함수 이름은 calc_rangesum으로 정의하세요.
    ex) calc_rangesum(3, 7) -> 3부터 7까지의 누적합을 구해와야 함.

    3. 출력예시: "x~y까지의 누적합: z"
    사용자에게 입력받은 값을 함수로 전달해서 값을 출력해 보세요.
    '''

    def calc_rangesum(start, end):
        if(start > end):
            start, end = end, start
        total = 0
        for n in range(start, end + 1):
            total += n
        return total

    print('-' * 40)
    n1 = int(input('정수1: '))
    n2 = int(input('정수2: '))
    print(f'{n1} ~ {n2}까지의 누적합: {calc_rangesum(n1, n2)}')


    '''
    * 반환값(return value)

    - 반환값이란 함수를 호출한 곳으로 함수의 최종 실행 결과를
    전달하는 값입니다.

    - 인수는 여러 개 존재할 수 있지만, 반환값은 언제나
     하나만 존재해야 합니다.

    - 모든 함수가 반환값이 있는 것은 아닙니다.
     함수 실행 후에 딱히 반환할 값이 없다면 return을 생략할 수 있습니다.
    '''
    def add(n1, n2):
        return n1 + n2

    result = add(10, 5)
    print(add(add(5,7), add(9,8))) # add(12, 17)

    # n = int(input('정수: ')) -> n = int('3')

    # 만약 여러 개의 값을 한번에 return해야 할 때는
    # 컬렉션 자료형을 사용합니다. (list, tuple, set)
    def operate_all(n1, n2):
        return n1 + n2, n1 - n2, n1 * n2, n1 / n2 # tuple
        # return n1 - n2
        # return n1 * n2

    print(type(operate_all(10, 5)))

    def multi(n1, n2):
        result = n1 * n2
        print(f'{n1} x {n2} = {result}')

    # abc = multi(9, 6) --> None
    # print(abc)




    '''
    * 내장함수 map
    - map()은 첫번째 인수로 자료형 함수를 지정하고, 두 번째 인수로
    리스트를 지정하면 해당 리스트 내부 요소값을 일괄적으로
    첫번째 인수로 지정한 타입으로 변경한 데이터를 반환합니다.
    '''

    # 3개의 숫자 중 최대값을 판별하여 리턴하는 함수를 정의
    from posixpath import split


    def max_of_three(n1, n2, n3):
        if n1 > n2:
            if n1 > n3:
                return n1
            else:
                return n3
        else:
            if n2 > n3:
                return n2
            else:
                return n3

    '''
    n1 = int(input('정수1: '))
    n2 = int(input('정수2: '))
    n3 = int(input('정수3: '))
    '''

    n1, n2, n3 = map(int, input('정수 3개를 공백으로 구분해서 입력하세요.').split())

    print('최대값:',max_of_three(n1,n2,n3))

    def multi_triple(number):
        return number ** 3

    li = [2, 4, 6, 8, 10]
    '''
    multi_triple(2)
    multi_triple(4)
    multi_triple(6)
    multi_triple(8)
    multi_triple(10)
    '''

    # map(함수, 리스트) -> 리스트 내부 요소를 함수로 전달.
    # 여러 개의 데이터를 한 번에 다른 형태로 변환하기 위해 사용.

    # li안에 있는 데이터들을 모두 multi_triple 함수로 전달해서
    # 값을 변환하기 위해 사용.
    # map 함수가 리턴하는 객체를 list로 변환해서 확인.
    result = list(map(multi_triple, li))
    print(result)






    '''
    * 인수의 기본값

    - 파이썬에서는 인수의 기본값을 설정하여 자주 바뀌지 않는
    매개값은 기본값으로 처리할 수 있도록 해 줍니다.
    '''
    def calc_stepsum(begin, end, step=1):
        sum = 0
        for n in range(begin, end + 1, step):
            sum += n
        return sum

    print(calc_stepsum(1, 10))
    print(calc_stepsum(1, 10, 2))

    # 기본값이 지정된 인수를 오른쪽으로 몰아주셔야 합니다.
    def calc_sum(end, begin=0, step=1):
        sum = 0
        for n in range(begin, end+1, step):
            sum += n
        return sum

    print(calc_sum(100))




    '''
    * 키워드 인수 (keyword argument)

    - 인수의 개수가 많아지면 인수의 순서를 파악하기 어렵고
     함수를 호출할 때 전달할 값의 위치를 헷갈릴 가능성이
     높아집니다.

    ex) def signup_user(id, pw, name, addr, email, phone, ....)

    - 파이썬에서는 순서와 무관하게 인수를 전달할 수 있는
    방법을 제공하여 인수의 이름을 직접 지정하여 값을 전달하는
    키워드 인수 방식을 제공합니다.
    '''
    from os import sep


    def calc_sum(begin, end, step):
        sum = 0
        for n in range(begin, end+1, step):
            sum += n
        return sum

    # 일반적인 함수 호출 (위치 인수 -> positional argument)
    calc_sum(3, 7, 1)

    # 키워드 인수 사용 (순서 상관 x)
    print(calc_sum(end=7, step=1, begin=3))
    print(calc_sum(step=1, begin=3, end=7))

    # 위치 인수와 키워드 인수의 혼합 사용 시에는
    # 무조건 위치 인수가 앞에 와야 합니다.
    print(calc_sum(3, step=1, end=7))
    # print(calc_sum(end=7, 3, 1)) (x)
    # print(calc_sum(3, 1, end=7)) (x)
    # print(calc_sum(3, end=7, 1)) (x)

    print(3, 6, 9, sep='->', end='!')
    # print(sep='->', end='!', 3, 6, 9) (x)


    from tkinter import N


    def add (n1, n2):
        return n1 + n2

    def add3 (n1, n2, n3):
        return n1 + n2 + n3

    def add (n1, n2, n3, n4):
        return n1 + n2 + n3 + n4

    '''
    * 위치 가변 인수

    - 함수를 호출할 때는 함수 정의시에 지정한 인수의 개수만큼
    값을 전달해야 합니다.

    - 하지만 가변 인수를 사용하면 하나의 인수로 여러개의 값을
    받아서 처리할 수 있습니다.

    - 위치 가변인수는 함수 정의부에서 인수를 선언할 때
    인수 앞에 * 기호를 붙여 선언하며, 이런 경우에 여러 개의
    데이터를 튜플로 묶어서 함수 내부로 전달합니다.
    '''

    def calc_total(*nums):
        # print(type(nums)) -> type: tuple
        total = 0
        for n in nums:
            total += n
        return total

    print(calc_total(5, 7, 9, 100, 122, 133, 233))

    def calc_points(*points, name):
        print(f'{name} 학생의 성적 계산:' )

        total = 0
        for p in points:
            total += p
        return total / len(points)

    # 가변인수와 일반 인수를 동시에 사용할 때는
    # 일반 인수를 반드시 키워드 인수 방식으로 전달해야 합니다.

    result = calc_points(97, 45, 78, 100, 88, '김철수')
    print(f'평균: {result}점')

    '''
    * 연습 - n개의 정수를 전달받아 가장 큰 숫자를 찾아서
     리턴하는 함수를 작성 하세요. (get_max)
     사용자에게 map()를 사용해서 여러 개의 값을 하나의 input()으로
     입력 받은 후 get_max()에게 전달해서 가장 큰 값을 리턴받으세요.
     입력받을 값은 5개로 하겠습니다.
    '''
    def get_max(*nums):
        max = nums[0]

        for n in nums:
            if n > max:
                max = n
       
        return max

        n1, n2, n3, n4, n5 = map(int, input('정수 5개: ').split())
       
        print('최대값: ', get_max(n1, n2, n3, n4, n5))

     

    '''
    * 지역 변수 (local variable)

    - 지역 변수란 함수 내부에 선언된 변수를 말합니다.

    - 지역 변수는 함수 내부에서만 사용할 수 있으며
    함수의 호출이 종료되는 순간 메모리에서 자동 소멸합니다.

    - 지역 변수의 사용을 함수 내부로 제한하는 이유는
    변수의 이름 충돌을 피하고, 메모리를 절약하기 위함입니다.
    '''
    def info():
        name = '안녕'
        print(name)

    info()
    # print(name) (x)
     
     
    '''
    * 전역 변수 (global variable)

    - 지역변수가 함수 내부에서만 사용하는 변수라면
    전역변수는 프로그램 전체에서 사용하는 공용 변수입니다.

    - 파이썬에서는 들여쓰기 없이 선언된 변수를 전역변수로
    취급하며, 전역변수는 함수 내부, 제어문 내부 등
    프로그램 어디에서나 사용이 가능합니다.
    '''

    sale_rate = 0.2 # 전역 변수

    def calc_price(price):
        print(f'오늘의 할인율: {sale_rate * 100}%')

        today_price = price - (price * sale_rate) #지역 변수
        print(f'오늘의 가격: {today_price:0.0f}원')
        print('-' * 40)

    t_price = calc_price(2000)
    print(t_price)
    # print(today_price) (x)

     


    a = 3
    b = a
    print(a, b)

    a = 5
    print(a, b)

    list1 = [1, 2, 3]
    list2 = list1
    print('list1:', list1)
    print('list2:', list2)

    list2[0] = 6
    list1[1] = 9
    print('list1:', list1)
    print('list2:', list2)
    print('list1의 주소값:', id(list1))
    print('list2의 주소값:', id(list2))

    print('-' * 40)

    list1 = [1,2,3]
    list2 = []
    list2 = list1.copy() # 리스트 내부 요소들을 복사하여 전달합니다.

    list2[0] = 6
    list1[1] = 9
    print('list1:', list1)
    print('list2:', list2)
    print('list1의 주소값:', id(list1))
    print('list2의 주소값:', id(list2))
     
     
    '''
    * 모듈 임포트

    - 모듈은 파이썬 코드를 작성해 놓은 스크립트 파일이며
     모듈 안에는 변수, 함수, 클래스 등이 정의되어 있습니다.

    - 파이썬에서는 주요 기능들을 표준 모듈로 구성하여
    표준 라이브러리로 제공하고 있습니다.

    - 표준 모듈이나 외부 모듈을 현재 모듈로 불러서 사용할 때는
    import라는 키워드를 사용합니다.
    '''
    import math

    # pi = 3.14
    print(5 * 5 * math.pi)
    print(math.sqrt(3))
    print(math.factorial(6))
    print(math.log10(2))
    print(math(pow(7,4)))
     

    # 모듈 내에 존재하는 변수, 함수, 클래스를 직접 임포트하는 방법
    from math import factorial, gcd

    print(factorial(6))
    print(factorial(5))

    print(gcd(12, 18))

    # 임포트할 모듈을 별칭을 지정해서 사용하기
    import statistics as st

    li = [45, 67, 78, 36, 68, 89]
    print('평균: ', st.mean(li))
    print('분산: ', st.variance(li))
    print('표준편차:', st.stdev(li))

    from math import factorial as fac
    print(fac(10))

    'PYTHON' 카테고리의 다른 글

    python  (0) 2022.03.04
    python  (0) 2022.03.01
    python  (0) 2022.02.25
    python  (0) 2022.02.23
    python  (0) 2022.02.23
Designed by Tistory.