파이썬 문법 뽀개기 심화
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 |