11주차 금 1103 (딕셔너리, 불리언, 집합, 반복문) :: newb

ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 11주차 금 1103 (딕셔너리, 불리언, 집합, 반복문)
    광주인력개발원 일일포스팅(메모장) 2023. 11. 3. 14:53
    728x90
    반응형

     

     

    변수 이름에는 키워드를 적으면 안된다.

     

    _가 앞에 붙으면 클래스 내부에서만 사용하는 변수라는 의미이다.

    숫자가 앞에 오면 안된다.

    공백x 예약어x

     

    파이썬의 공식적인 네이밍 설계서

    python pep8

     

    변수이름을 정할때 pep8 형식으로 만들어 주는 연습을 하면 좋다.

     

    실무에서 어떻게 사용할 지 모르지만 대부분 파이썬을 다룬다면 pep8형식을 따른다고 한다.

    ★복습

    1) 리스트

    친구들[2][-1] = '010-1111-1111'

             0          1            2

    0  [['김길동', 10, '010-1234-1234'],
    1  ['고길동', 34, '010-9874-9874'],
    2  ['청길동', 10, '010-1111-1111']]

     

    리스트와 리스트는 더할수있고

    리스트와 숫자를 곱할수 있다

    나머지는 에러..

     

    많이 쓰는 리스트 함수

    len                 : 리스트 길이 반환

    append          : 맨 마지막 요소에 추가

    insert             : 특정 위치에 요소 삽입

    remove, pop  : 요소 삭제

     

    2) 레인지

    반복문

    list(range(1, 10))

    [1, 2, 3, 4, 5, 6, 7, 8, 9]

    list(range(0, 10, 2))

    [0, 2, 4, 6, 8]

     

    직접 리스를 변환해줘야한다

    print(type(range(0,10)))

    <class 'range'>

    print(type(list(range(0,10))))

    .<class 'list'>

     

    ★학습

    1. 딕셔너리

    여러개의 값을 리스트처럼 지정할 수 있는데 엘리먼트에 이름을 붙인게 딕셔너리

    dic2 = {
        'name' : '홍길동',
        'age' : 30,
        'hp' : '010-1234-1234'
    }
    dic2

    {'name': '홍길동', 'age': 30, 'hp': '010-1234-1234'}

     

    딕셔너리는 명세서가 필요가없다. 자체적으로 표현이 되어있으니까

    그렇다고 리스트가 필요없는건 아니다. 적재적소에 사용!

    dic = {
        'name' : ['merry', 'john'],
        'num' : [1, 2, 3, 4],
        'birth' : ['jan', 'frb', 'nov']
    }
    dic

    {'name': ['merry', 'john'],
     'num': [1, 2, 3, 4],
     'birth': ['jan', 'frb', 'nov']}

    dic['birth'][-3]

    'jan'

    dic['country'] = 'korea'

    {'name': ['merry', 'john'],
     'num': [1, 2, 3, 4],
     'birth': ['jan', 'frb', 'nov'],
     'country': 'korea'}

    dic['age'] = [20, 30, 40, 50]

    {'name': ['merry', 'john'],
     'num': [1, 2, 3, 4],
     'birth': ['jan', 'frb', 'nov'],
     'country': 'korea',
     'age': [20, 30, 40, 50]}

    dic['age'][3] = 55

    {'name': ['merry', 'john'],
     'num': [1, 2, 3, 4],
     'birth': ['jan', 'frb', 'nov'],
     'country': 'korea',
     'age': [20, 30, 40, 55]}

    del(dic["age"])

    {'name': ['merry', 'john'],
     'num': [1, 2, 3, 4],
     'birth': ['jan', 'frb', 'nov'],
     'country': 'korea'}

     

    #딕셔너리 함수

    • keys() : 키들을 반환
    • values() : 값들을 반환
    • items() : 키와 값을 튜플로 반환
    • get(‘원하는 키값’) : 키값에 대응하는 값을 반환
    • zip : (팩한다, 언팩한다) 튜플/ 리스트 두개를 하나의 딕셔너리로 변환
    a, b =(1, 2)
    #1,2가 a,b로 언팩된다.
    dic.keys()

    dict_keys(['name', 'num', 'birth'])

                          0          1       2       

    type(dic.keys())

    리턴 타입은 dict_keys ,  형태는 리스트로 가져온다.

    a = list(dic.keys())
    type(a)

    list

    dic.values()

    dict_values([['merry', 'john'], [1, 2, 3, 4], ['jan', 'frb', 'nov']])

                                  0                      1                       2              

     

    dic.items()

    dict_items([('name', ['merry', 'john']), ('num', [1, 2, 3, 4]), ('birth', ['jan', 'frb', 'nov'])])

    a, b = ('name', ['merry', 'john'])
    print(a, b)

    name ['merry', 'john']

    #%%
    for k, v in dic.items() :
        print('키 : ', k)
        print('값 : ', v)

    키 :  name
    값 :  ['merry', 'john']
    키 :  num
    값 :  [1, 2, 3, 4]
    키 :  birth
    값 :  ['jan', 'frb', 'nov']

    dic.get('name'), dic['name']

    (['merry', 'john'], ['merry', 'john'])

    keys = ('a', 'b')
    values = (1, 2)
    zip(keys, values)

    <zip at 0x215fd120680>

    #집으로 묶어주는 형태는 오브젝트라<zip at 0x215fd120680> 이런형식으로 나온다.
    keys = ('a', 'b')
    values = (1, 2)
    dict(zip(keys, values))

    {'a': 1, 'b': 2}

    #키랑 벨류랑 len가 같아야 zip형태가 된다.
    keys = ('a', 'b')
    values = (1, 2)
    dict(zip(keys, values))
    result = dict(zip(keys, values))
    print(result)

    {'a': 1, 'b': 2}

    친구들 = [
        {'이름' : '홍길동', '나이' : 30, 'hp' : '010-1234-1234'},
        {'이름' : '고길동', '나이' : 40, 'hp' : '010-4567-4567'},
        {'이름' : '박길동', '나이' : 50, 'hp' : '010-7899-7899'}
    ]

    [{'이름': '홍길동', '나이': 30, 'hp': '010-1234-1234'},
     {'이름': '고길동', '나이': 40, 'hp': '010-4567-4567'},
     {'이름': '박길동', '나이': 50, 'hp': '010-7899-7899'}]

    친구들[0]['이름']

    '홍길동'

    불리언

    • 참 또는 거짓을 나타내는 자료형
    • True, False (꼭! 첫 글자는 대문자)
    • True인것들, False인것들
    a = 3
    b = 1

     

    (a == b) and (a >= b)
    #단축실행으로 왼쪽이 False가 나오면 오른족쪽은 실행하지 않고 False가 나온다.

    False

    (a >= b) and (a <= b)
    # True         False 라서 False가 나온다.

    False

    (a >= b) or (a <= b)
    # 앞에가 True이면 뒤는 안보고 True가 된다.

    True

     

    a = [1, 2, 3]
    1 in a 

    True

    4 in a

    False

     

    반대

    1 not in a

    False

    4 not in a

    True

     

    값 변수 : 기본타입 
    참조 변수 : 기본타입 이외의 것들(복합형의 변수들)
    a = 1
    b = a
    b = 2
    print(a, b)

    1 2

    a = [1, 2, 3]
    b = a
    b[0] = 3
    print(a, b)

    [3, 2, 3] [3, 2, 3]

     

    a는 c라는 주소를 가지고있고

    b는 a를 따라 c라는 주소를 가지게 되었다.

    b의 [0]자리에 3을 넣음으로써 c주소의 [0]을 3으로 변경하게 됨

    b와 a는 c라는 주소를 같이 공유하고있기에 a에게도 영향이 감

    a = 1
    b = a
    b = 2
    print(a, b)
    print(id(a),id(b))

    140730424529704 140730424529736

    a = [1, 2, 3]
    b = a
    b[0] = 3
    print(a, b)
    print(id(a),id(b))

    3287672270592 3287672270592

    a = [1, 2, 3, 4]
    b = a.copy()
    b[0] = 5
    print(a, b)
    print(id(a), id(b))

    [1, 2, 3, 4] [5, 2, 3, 4]

    3287671836032 3287650051712

     

    copy()를 쓰게되면 값을 복사 주소는 서로 다른 주소를 가지게 됨

     

     

    집합 (set)

    • 순서가 없고 중복도 없다.
    • set([]) 이런식으로 선언
    • 요소에 접근할 때 lisr()로 변환해서 인덱스로 접근한다.

     

    {'name' : '손', 'name' : '박'}

    {'name': '박'}

    s1 = set([1, 2, 3, 4, 5])
    s2 = set("Hello")
    s3 = set([1, 2, 3, 4, 5, 5, 3])
    s4 = set([1, 2, 2, 3])
    print(s1, type(s1))
    print(s2, type(s2))
    print(s3, type(s3))
    print(s4, type(s4))

    {1, 2, 3, 4, 5} <class 'set'>
    {'e', 'H', 'o', 'l'} <class 'set'>
    {1, 2, 3, 4, 5} <class 'set'>
    {1, 2, 3} <class 'set'>

     

    set타입이라 리스트로 변환후 사용

    list(s1)[0]

    1

    집합에 사용되는 연산

    • 교집합 : intersection (&)
    • 차집합 : difference (-)
    • 합집합 : union (|)
    s1 = set([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
    s2 = set([5, 6 , 7, 8, 9, 10, 11, 12])
    
    #교집합
    print(s1 & s2)
    print(s1.intersection(s2))

    {5, 6, 7, 8, 9, 10}

    {5, 6, 7, 8, 9, 10}

    #차집합
    print(s1 - s2)
    print(s1.difference((s2)))
    print(s2 - s1)
    print(s2.difference((s1)))

    {1, 2, 3, 4}
    {1, 2, 3, 4}
    {11, 12}
    {11, 12}

    차집합은 s1 이냐 s2냐에 따라 값이 다름

    #합집합
    print(s1 | s2)
    print(s1.union(s2))

    {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}
    {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}

    s1.add(11)
    print(s1)

    {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}

    s1.remove(5)
    print(s1)

    {1, 2, 3, 4, 6, 7, 8, 9, 10, 11}

    print(type(s1))

    <class 'set'>

     

    set은 인덱스가 없기에 값을 지정해서 사용

     

     

    파이썬에서 if

    • 조건의 참, 거짓에 따라 동작을 수횅
    if 조건 : 
        실행문1   (if 실행문)
        실행문2   (if 실행문)
    실행문3       (if 실행문이 아님)
    
    if 조건 :
        실행문
    elif 조건 :
        실행문
    else :
        실행문
    x = 3
    if x == 3:
        print('3입니다')

    3입니다

    if x == 4:
        print('3입니다.')
    else:
        print('3이 아닙니다.')

    3이 아닙니다.

    x = -1
    if x >= 0:
        print('양수입니다.')
    elif x < 0:
        print('음수입니다.')
    else:
        print('숫자가 아닙니다.')

    음수입니다.

    b = 3
    if b == 3 :
        pass
    print(b)
    #조건만 우선 생각하고 로직은 나중에 만들때 pass를 이용해서 건너뛸 수 있다.

    3

    b = 3
    if b >= 0:
        pass
    else:
        print('음수')
    a = -1
    b = 2
    # a > b
    # b < a 
    # a == b
    # a != b
    if  a and b:
        print('참')
    
    not a
    
    # -1은 True , 0은 False

    False

    a = 0
    not a

    True

    반복문 - while

    • 조건이 참일동안 무한히 반복…
    jajang = 0
    while jajang < 10:
        jajang += 1
        print(f'짜장면을 {jajang}그릇 먹었다.')
        if jajang == 10:
            print('무료 쿠폰 지급')

    짜장면을 1그릇 먹었다.
    짜장면을 2그릇 먹었다.
    짜장면을 3그릇 먹었다.
    짜장면을 4그릇 먹었다.
    짜장면을 5그릇 먹었다.
    짜장면을 6그릇 먹었다.
    짜장면을 7그릇 먹었다.
    짜장면을 8그릇 먹었다.
    짜장면을 9그릇 먹었다.
    짜장면을 10그릇 먹었다.
    무료 쿠폰 지급

    jajang = 0
    while True:
        jajang += 1
        print(f'짜장면을 {jajang}그릇 먹었다.')
        if jajang == 10:
            print('무료 쿠폰 지급')
            break

    짜장면을 1그릇 먹었다.
    짜장면을 2그릇 먹었다.
    짜장면을 3그릇 먹었다.
    짜장면을 4그릇 먹었다.
    짜장면을 5그릇 먹었다.
    짜장면을 6그릇 먹었다.
    짜장면을 7그릇 먹었다.
    짜장면을 8그릇 먹었다.
    짜장면을 9그릇 먹었다.
    짜장면을 10그릇 먹었다.
    무료 쿠폰 지급

    a = 0
    while a < 10:
        a += 1
        if a % 2 == 0:
            #2의 배수이면 건너뛰고
            continue
        print(a)

    1

    3

    5

    7

    9

     

    728x90
    반응형
Designed by Tistory.