본문 바로가기

알고리즘/파이썬 문법

파이썬 문법 뽀개기 심화

728x90

파이썬 문법 뽀개기 심화

 

editor : Pycharm

파이썬 : Python 3.8 


튜플, 집합

 

📌 튜플(tuple)

리스트랑 똑같이 순서가 중요한 자료형이면서  불변형인 자료형

# 리스트는 값 바꾸는 가능
a = ['사과', '감', '배']
a[1] = '수박'

# 튜플은 오류 발생. 값 변경 불가능
b = ('사과', '감', '배')
b[1] = '수박'

 

아래와 같은 형태로 불변형 자료를 많이 사용

a_dict = [('bob','24'),('john','29'),('smith','30')]

 

📌 집합(set)

중복을 제거해주는 자료형

a = [1,2,3,5,6,8,9,1,8]

a_set = set(a)
print(a_set)
# 중복 제거 {1, 2, 3, 5, 6, 8, 9}

set을 활용해서 교집합, 합집합, 차집합을 구할 수 있습니다.

 

📌 교집합, 합집합

a = ['사과', '감', '배', '수박', '딸기']
b = ['배', '사과', '포도', '참외', '수박']

a_set = set(a)
b_set = set(b)

# 교집합
print(a_set & b_set)

# 합집합
print(a_set | b_set)

 

📌 차집합

student_a = ['물리2','국어','수학1','음악','화학1','화학2','체육']
student_b = ['물리1','수학1','미술','화학2','체육']

# 차집합
set_stuA = set(student_a)
set_stuB = set(student_b)

print(set_stuA - set_stuB)

f-string

scores = [
    {'name':'영수','score':70},
    {'name':'영희','score':65},
    {'name':'기찬','score':75},
    {'name':'희수','score':23},
    {'name':'서경','score':99},
    {'name':'미주','score':100},
    {'name':'병태','score':32}
]

for s in scores:
    name = s['name']
    score = s['score']
    print(name+'의 점수는 '+str(score)+ '점입니다.')

정수1 + 문자열 + 정수2

정수2는 정수이지만 문자열뒤에 오므로 문자열이라 인식된다. 그래서 형변환 해주지 않으면 오류 발생!!

정수1 + 문자열 + str(정수2) 와 같이 형변환해줘야 오류가 발생하지 않는다.

 

하지만, 데이터가 무수히 많다고 생각한다면 복잡하겠죠?

이럴 때 사용하는게 바로 f-string!!

for s in scores:
    name = s['name']
    score = s['score']
    print(f'{name}의 점수는 {score}점입니다.')

f-string을 사용해 중괄호{}로 변수로 넣어주면 되기 때문에 코드가 간결하고 깔끔합니다.


예외처리

 

📌 try-except문

people = [
    {'name': 'bob', 'age': 20},
    {'name': 'carry', 'age': 38},
    {'name': 'john', 'age': 7},
    {'name': 'smith', 'age': 17},
    {'name': 'ben', 'age': 27},
    {'name': 'bobby'},
    {'name': 'red', 'age': 32},
    {'name': 'queen', 'age': 25}
]

for person in people:
    try:
        if person['age'] > 20:
            print(person['name'])
    except:
        print('에러입니다')

try: 한번 실행해라

except: 에러가 발생했을 때 멈추지 말고 이 구문을 실행해라.

 

예외처리는 server에 call할 때, 주로 사용.

하지만 남용하면 안좋음!


파일 불러오기

 

📄 main_func.py

def say_hi():
    print('안녕!')

def say_hi_to(name):
    print(f'{name}님 안녕하세요.')

 

📄 main_test.py

from main_func import *

say_hi()
say_hi_to('영수')

main_func.py로 부터 모든 함수(*)를 불러와 사용할 수 있음.

 

이를 활용해 파일 분리를 깔끔하게 할 수 있음.


한줄의 마법

 

if문 삼항연산자

num = 3

if num % 2 == 0:
    result = '짝수'
else:
    result = '홀수'

print(f'{num}은 {result}입니다.')

 

if문을 한줄로 쓸 수 있음

num = 3

result = ('짝수' if num % 2 == 0 else '홀수')

print(f'{num}은 {result}입니다.')

for문 한방에 써버리기

a_list = [1,3,2,5,1,2]

b_list = []

for a in a_list:
    b_list.append(a*2)

print(b_list)

 

아래와 같이 한줄로 반복문을 쓸 수 있음!

a_list = [1,3,2,5,1,2]

b_list = []

b_list = [a*2 for a in a_list]

print(b_list)

map, filter, lamda 식

 

조금 어려울 수 있으니, 나중에 복습 필수!!

 

📌 map

people = [
    {'name': 'bob', 'age': 20},
    {'name': 'carry', 'age': 38},
    {'name': 'john', 'age': 7},
    {'name': 'smith', 'age': 17},
    {'name': 'ben', 'age': 27},
    {'name': 'bobby', 'age': 57},
    {'name': 'red', 'age': 32},
    {'name': 'queen', 'age': 25}
]

def check_adult(person):
    if person['age'] > 20:
        return '성인'
    else:
        return '청소년'

result = map(check_adult, people)
print(list(result))

map은 people을 하나하나씩 돌면서 check_adult 함수 실행한 값을 넣어줌.

 

앞에서 배운 if문 삼항연산자 활용해서 다시 쓰면, 다음과 같다.

def check_adult(person):
    return '성인' if person['age'] > 20 else '청소년'

result = map(check_adult, people)
print(list(result))

📌 lamda

result = map(lambda person:('성인' if person['age'] > 20 else '청소년'), people)
print(list(result))

people을 한줄 씩 돌면서 person에 넣는다. 

만약 person의 age가 20을 초과하면 map에 '성인'을 넣어주고

그렇지 않으면, '청소년'을 넣어준다.

 

한줄짜리 함수는 lamda로 구현 가능하다.

 


📌 filter

map과 유사한데, True인 것들만 뽑기!

result = filter(lambda x: x['age'] > 20, people)
print(list(result))

people을 한줄씩 뽑아 x에다 넣고 그 x의 age값이 20 초과하는 수만 result에 넣는다.


함수 심화

라이브러리를 가져다가 쓰거나 코드를 볼 때 유용.

코드 이해를 위해 배우는 내용

 

def cal(a, b=2):
    return a+2*b

result = cal(1,3)
print(result)

기본값(b=2)이 있을지라도 넣어준 값을 사용해 함수 계산.

만약 cal(1)만 넣어주면 result는 기본값 사용해 계산(1+2*2)

 

def cal(*args):
    for name in args:
        print(f'{name} 밥 먹어라~')

cal('영수', '철수', '영희')

*args를 이용하면 인자를 여러개 받을 수 있음.

 

def cal(**kwargs):
    print(kwargs)

cal(name = 'bob', age=30, height=180)

**kwargs를 이용하면 인자들을 지정해서 넣어줄 수 있음.


클래스

언제 사용하는지 아는게 중요!

class Monster():
    hp = 100
    alive = True

    def damage(self, attack):
        self.hp = self.hp - attack
        if self.hp < 0:
            self.alive = False

    def status_check(self):
        if self.alive == True:
            print('살았다')
        else:
            print('죽었다!!!')


# m1, m2는 인스턴스
# 자체적으로 status 관리하는게 더 효율적일 때 사용
m1 = Monster()
m1.damage(150)
m1.status_check()

m2 = Monster()
m2.damage(90)
m2.status_check()

m1, m2는 인스턴스라고 하는데, 지금 이해 단계에서는 몬스터 1마리, 2마리 정도로 이해하는게 편함.

'알고리즘 > 파이썬 문법' 카테고리의 다른 글

입출력  (0) 2023.02.22
파이썬 문법 뽀개기 기초  (0) 2022.11.21