Python기초(2)

Kng_db·2022년 11월 9일
0

Python 문법 기초

튜플,집합

튜플 (tuple)

리스트와 비슷하지만 불변인 자료형이며 순서가 존재

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

안의 요소는 변하지 않음!! (밖에서 변경시키려 하면 오류발생)
딕셔너리 대신 리스트와 튜플로 딕셔너리 '비슷하게' 만들어 사용
ex)

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

집합 (set)

집합을 구현, 중복 제거

a = [1,2,3,4,5,3,4,2,1,2,4,2,3,1,4,1,5,1]
a_set = set(a)
print(a_set)	// {1, 2, 3, 4, 5} 출력

교집합 / 합집합 / 차집합

a = ['사과','감','수박','참외','딸기']
b = ['사과','멜론','청포도','토마토','참외']

print(a & b)  # 교집합	// {사과, 참외} 출력
print(a | b)  # 합집합	// {사과, 감, 수박, 참외, 딸기, 멜론, 청포도, 토마토} 출력
print(a - b)  # 차집합	// {감, 수박, 딸기} 출력

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 = str(s['score'])
    print(name+'는 '+score+'점 입니다')

이렇게 f-string으로 간결하게 표현가능!!

for s in scores:
    name = s['name']
    score = str(s['score'])
    print(f'{name}은 {score}점입니다')

예외처리

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:
    if person['age'] > 20:
        print (person['name'])	// bobby로 인해 오류 출력

오류난 부분만 제외하고 출력하는 방법

for person in people:
    try:
        if person['age'] > 20:
            print (person['name'])
    except:
        name = person['name']
        print(f'{name} - 에러입니다')	// bobby부분만 에러입니다 출력, 나머지 정상 출력

파일 불러오기

여러개 파일로 분리

main_func.py // 파일 생성

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

함수를 정리한 파일(main_func.py)을 main_test.py에 적용

main_test.py // 파일 생성

from main_func import *
say_hi()

한줄의 마법

if문 - 삼항연산자

조건에 따라 다른 값을 변수에 저장

num = 3
if num%2 == 0:
    result = "짝수"
else:
    result = "홀수"
print(f"{num}은 {result}입니다.")

한 줄에 적는 것이 파이썬의 유일한 삼항연산자인 조건식

num = 3
result = "짝수" if num%2 == 0 else "홀수"	//(참일 때 값) if (조건) else (거짓일 때 값)으로 항이 3개라 삼항 연산자
print(f"{num}은 {result}입니다.")

for문 - 한방에 써버리기

ex) 각 요소에 2를 곱한 새로운 리스트 만들기

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 = [a*2 for a in a_list]
print(b_list)

이렇게 표현가능함!

map, filter, lambda식

map - 리스트의 모든 원소를 조작

ex)

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}
]

1차 조작

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

2차 조작

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

3차 조작

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

filter - 리스트의 모든 원소 중 특별한 것만 뽑기

map과 아주 유사! True인 것들만 뽑기!

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

함수 심화

매개변수에 어떤 값을 넣을지 정할 수 있음

def cal2(a, b=3):
    return a + 2 * b
print(cal2(4))			// 10 출력
print(cal2(4, 2))		// 8 출력
print(cal2(a=6))		// 12 출력
print(cal2(a=1, b=7))	// 15 출력

입력값의 개수를 지정하지 않고 모두 받는 방법!

def call_names(*args):
    for name in args:
        print(f'{name}야 밥먹어라~')
call_names('철수','영수','희재')

여러 개의 인수를 하나의 매개변수로 받을 때 관례적으로 args(arguments)라는 이름을 사용!!

키워드 인수를 여러 개 받는 방법!

def get_kwargs(**kwargs):
    print(kwargs)
get_kwargs(name='bob')
get_kwargs(name='john', age='27')

클래스

객체지향적일 때 사용!!

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:
            print('살아있다')
        else:
            print('죽었다')

m = Monster()
m.damage(120)

m2 = Monster()
m2.damage(90)

m.status_check()
m2.status_check()

JS의 문법과 파이썬의 문법을 같이 공부하다보니 혼동이 많이되고 헷갈려서 공부하는 속도가 더딘 것 같다. 하지만 꾸준히 하다보면 두 언어 다 잘 다룰 수 있을거라 믿고 열공!!

profile
코딩 즐기는 사람

1개의 댓글

comment-user-thumbnail
2022년 11월 10일

두 언어 마스터 가즈아~

답글 달기