Python

(파이썬 다시 보기)파이썬, python: 3. 제어문과 함수

하방주인장 2023. 5. 3. 12:00

목차

     

    1. if 문

    1-1. membership 연산자 in, not in

    - 리스트, 튜플, 문자열 사용 가능

    - in: 안에 있으면 True 반환, not in: 안에 없으면 True 반환

    fruits = ['apple', 'banana', 'orange']
    
    if 'apple' in fruits:
        print("사과 있음")
    else:
        print('사과 없음')
    >>> '사과 있음'
    
    if 'apple' not in fruits:
        print("사과 알러지가 있어도 먹을 수 있는 과일")
    else:
        print('사과 알라지 때문에 먹을 수 없음')
    >>> '사과 알라지 때문에 먹을 수 없음'

     

    1-2. pass: 조건문에서 아무 일도 하지 않게 설정하기

    pocket = ['paper', 'money', 'cellphone']
    if 'money' in pocket:
        pass 
    else:
        print("카드를 꺼내라")
    >>>

    => pocket 리스트 안에 money 문자열이 있기 때문에 if문 다음 문장인 pass가 수행되고 아무 결괏값도 보여 주지 않는다.

     

    1-3. 조건부 표현식

    변수 = 조건문이_참인_경우의_값 if 조건문 else 조건문이_거짓인_경우의_값

    Score = 77
    
    if Score == 100: Grade = 'A'
    elif Score > 70: Grade = 'B'
    else           : Grade = 'C'
    
    print(Grade)
    >>> B
    
    Grade = 'A' if Score == 100 else 'B' if Score > 70 else 'C'
    print(Grade)
    >>> B

     

    2. while 문

    2-1: while 활용 - input

    # exit이나 quit이란 입력할 때까지 계속 입력을 받는 기능
    text = ''
    while text != 'exit' and text != 'quit':
        text = input('값을 입력하세요: ')
        
    print('프로그램 종료')
    >>> 값을 입력하세요: exit
    >>> 프로그램 종료

     

    2-2: while 활용 - 리스트 자료형 활용

    numbers 리스트가 비워지면 False가 되어 반복문이 종료되므로, 리스트에서 pop을 사용해 하나씩 원소를 빼가면서 비교한다. 

    bool([])
    >>> False
    
    # 리스트 원소 중 가장 큰 값 찾기
    numbers = [3, 7, 2, 9, 4, 1]
    max_value = 0
    
    while numbers:
        value = numbers.pop()
        if value > max_value:
            max_value = value
    
    print(max_value)
    >>> 9
    
    max(numbers)
    >>> 9

     

    3. for 문

    3-1. continue

    - for 문을 활용하여 양수만 출력

    my_list = [5, -2, 0, 10, -3, 8, -1]
    for i in my_list:
        if i <= 0:
            continue
        else:
            print(i)
    >>> 5
        10
        8
        
    for i in my_list:
        if i > 0:
            print(i)
    >>> 5
        10
        8

     

    3-2. break

    - 1부터 숫자를 더하는데 100 보다 작은 수 중에 가장 큰 수 구하기

    max_sum = 0
    for num in range(1, 100):
        if max_sum + num >= 100:
            break
        max_sum = max_sum + num
    
    print(max_sum)
    >>> 91

     

    3-3. for 문 안에 for 문

    my_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    
    for row in my_list:
        for element in row:
            print(element)
    >>> 1
        2
        3
        4
        5
        6
        7
        8
        9

     

    4. 내장 함수

    # abs: 절댓값 리턴 함수
    abs(3 - 7)
    >>> 4
    
    # all: 모두 참이면 T
    all([True, True])
    >>> True
    
    # any: 하나라도 참이면 T
    any([True, False])
    >>> True
    
    # chr: 유니코드 숫자값을 해당 문자로 리턴
    chr(97)
    >>> 'a'
    
    # ord: chr의 반대
    ord('a')
    >>> 97
    
    # dir: 객체가 지닌 변수나 함수를 보여 주는 함수
    'pop' in dir([]) # 리스트형에 pop이 있는지
    >>> True
    
    dir([1, 2, 3])
    >>> ['append', 'count', 'extend', 'index', 'insert', 'pop',...]
    
    # filter(함수명, 데이터): 데이터의 각 원소를 함수에 대입했을 때, 참인 원소만 추출
    list(filter(lambda x: x > 0, [1, -3, 2, 0, -5, 6]))
    >>> [1, 2, 6]
    
    # divmod: 몫과 나머지를 튜플 형태로 반환
    divmod(10, 3)
    >>> (3, 1)
    
    # enumerate: 데이터(리스트, 튜플, 문자열)를 입력으로 받아 인덱스 값을 포함하는 enumerate 객체를 리턴
    fruits = ['apple', 'banana', 'cherry']
    for num, fruit in enumerate(fruits):
        print(f'제 {num+1}순위 과일은 {fruit}입니다.')
    >>> 제 1순위 과일은 apple입니다.
        제 2순위 과일은 banana입니다.
        제 3순위 과일은 cherry입니다.
        
    list(enumerate(fruits))
    >>> [(0, 'apple'), (1, 'banana'), (2, 'cherry')]
    
    # eval: 문자열로 구성된 표현식을 입력으로 받아 해당 문자열을 실행한 결괏값을 리턴
    eval('1+2+3')
    >>> 6
    
    # isinstance(x1, x2): x1의 데이터타입이 x2와 동일하면 True
    isinstance('문자열', str)
    >>> True
    
    # len: 입력값의 길이(요소의 전체 개수)를 리턴(공백 포함)
    len([1, 2, 3])
    >>> 3
    
    # list: 리스트 생성
    list('da ta')
    >>> ['d', 'a', ' ', 't', 'a']
    
    # map(f, iterable)은 함수(f)와 반복 가능한 데이터를 입력으로 받아 입력받은 데이터의 각 요소에 함수 f를 적용한 결과를 리턴
    list(map(lambda x: x * 2, [1, 2, 3]))
    >>> [2, 4, 6]
    
    # max, min: 최댓값, 최솟값 반환 (문자열도 사용 가능)
    max([2, 10, 3])
    >>> 10
    
    max(['z', 'AAA', 'zz'], key=len)
    >>> 'AAA'
    
    # pow: pow(x, y)는 x의 y 제곱한 결괏값을 리턴하는 함수
    pow(2, 10) # 2의 10승
    >>> 1024
    
    # round: 반올림, 반내림
    round(5.1234567, 2)
    >>> 5.12
    
    # sorted: 데이터 정렬
    a_list = [5, 1, 2, 7]
    sorted(a_list) #저장되진 않고 그냥 확인
    >>> [1, 2, 5, 7]
    
     # str: 문자열 변환
     str([1, 2, 3])
     >>> '[1, 2, 3]'
     
     # sum: 합을 반환 (문자열은 불가)
    sum([1, 2, 3])
    >>> 6
    
    # tuple: 튜플 생성
    tuple('hello')
    >>> ('h', 'e', 'l', 'l', 'o')
    
    # type: 입력값의 자료형이 무엇인지 알려 주는 함수
    type(0)
    
    # zip: 동일한 개수로 이루어진 데이터들을 묶어서 리턴하는 함수이다.
    list(zip([1, 2, 3], [4, 5, 6]))
    >>> [(1, 4), (2, 5), (3, 6)]
    
    # range: 입력받은 숫자에 해당하는 범위 값을 반복 가능한 객체로 만들어 리턴
    list(range(5))
    >>> [0, 1, 2, 3, 4]

     

    5. 함수

    5-1. 전역변수와 로컬변수

    # 전역변수와 지역변수의 관계
    num1 = 1
    
    def test():
        num1 = 0
        print('함수 안: ', num1)
    
    test()
    print('함수 실행 이후: ', num1)
    >>> 함수 안:  0
        함수 실행 이후:  1
        
    # global
    cnt = 0
    
    def increment_cnt():
        global cnt 
        cnt += 1
        
    increment_cnt()
    print(cnt)
    >>> 1
    
    # 권장 방법: 함수 return => 전역변수에 대입
    num1 = 1
    
    def test():
        num1 = 0
        return num1
    
    num1 = test()
    print(num1)
    >>> 0

     

    5-2. 매개변수의 개수를 미리 알 수 없을 때

    # argument
    # *매개변수: 여러 개의 입력값을 받아 튜플로 만들어 줌
    def print_args(*args):
        print('type: ', type(args))
        print('args: ', args)
        print('리스트 사용 가능: ', args[0])
    
        for arg in args:
            print('arg: ', arg)
     
     print_args('a', 'b', 'c')
     >>> type:  <class 'tuple'>
        args:  ('a', 'b', 'c')
        리스트 사용 가능:  a
        args:  a
        args:  b
        args:  c
    
    # 키워드 매개변수 kwargs
    # **매개변수: 매개변수는 빅셔너리가 된다.
    def print_kwargs(**kwargs):
        print('type: ', type(kwargs))
        print('print_kwargs: ', kwargs)
        
    print_kwargs(first= 'a', second='b')
    >>> type:  <class 'dict'>
        args:  {'first': 'a', 'second': 'b'}