[25.02.07]사전캠프 13일차 + 함수심화(튜플,f-string ...)

김명서·2025년 2월 7일
1

TIL_sparta

목록 보기
13/60

🔴심화

🔶튜플

튜플을 본격적으로 정리하기 전에 ...

[],(),{}의 차이와 사용

  1. Array
    array는 []를 쓰는 대표적인 타입입니다. []는 배열을 선언&초기화할 때, 배열의 원소에 접근할 때 사용합니다. array는 ()나 {}를 쓰지 않습니다.
  2. Tuple
    tuple은 ()를 쓰는 대표적인 타입입니다. ()는 튜플을 선언&초기화할 때 사용합니다. []는 튜플의 원소에 접근할 때 사용합니다. {}는 쓰이지 않습니다.
  3. Dictionary
    dictionary는 {}를 쓰는 대표적인 타입입니다. {}는 딕셔너리를 선언&초기화할 때 사용합니다. []는 key에 대응하는 value를 할당하거나, value에 접근할 때 쓰입니다.

✅튜플은 리스트와 비슷하지만 불변인 자료형이다.
마찬가지로 순서가 존재한다.

이렇게 값을 바꾸려하면 바뀌지 않는다.

.
.
✅집합은 중복이 제거된다는 특징이 있다

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

a_set=set(a)
print(a_set)

➡️{1, 2, 3, 4, 5, 6, 7, 8, 9}

🔶집합

교집합, 합집합, 차집합 코드

a = ['사과','감','수박','참외','딸기']
b = ['사과','멜론','청포도','토마토','참외']	
a_set = set(a)
b_set = set(b)
print(a_set & b_set)  # 교집합
print(a_set | b_set)  # 합집합
print(a_set - b_set)  # 차집합

💠차집합 사용 예제

🔴f-string

자주 쓰인다 !!

이렇게 이름과 점수가 각각 나오는데,
ex.영수의 점수는 100점입니다 라는 문장들로 나오게 하고 싶다 ?

*str()을 이용해서 숫자를 문자로 바꿔준다(int()와 반대)

여기서 더 간결하고 직관적으로 쓸 수 있게 해주는게 f-string!

+, 의 점수는 처럼 문자에 ''를 입혀줄 필요가 없다. f' ' 사이에 원하는대로 조합해주면 된다.

🔴예외처리

for person in people:
    if person['age']>20:
        print(person['name'])
➡️        
carry
ben
bobby
red
queen

만약 bobby의 나이가 null이라면 ????

for person in people:
    try:
        if person['age']>20:
            print(person['name'])
    except:
        print(person['name'],'에러입니다')
        
➡️  
carry
ben
bobby 에러입니다
red
queen
      

서버쪽에 잘못이 있나? 이런 경우에 try...except문으로 돌려줄 수 있다.
하지만 남용하면 돌아는 가는데 뭔가 이상해지고 에러가 어디서 났는지 잘 모르게 될 수 있으니까 무분별 사용 ❌

🔴파일 불러오기

복잡한 함수들을 한 곳에 몰아놓고 싶다면 ~?

from 파일명 import* 
또는
from 파일명 import 함수명

🔴한줄의 마법

▶️🔶 if문-삼항연산자

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

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

➡️3은 홀수입니다

🔻

num=3

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

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

➡️3은 홀수입니다

▶️ 🔶for문 -한방에 써버리기

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

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

print(b_list)

➡️[2, 6, 4, 10, 2, 4]

🔻

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

b_list=[a*2 for a in a_list]

print(b_list)

➡️[2, 6, 4, 10, 2, 4]

오우,, 이렇게 간단하고 직관적인 한줄로 표현할 수 있다니....?
구글링을 하거나 나중에 더 코드를 학습할 때,
이렇게 작성된거를 보면 아 for문을 축약한 거구나~ 라고 정도로 이해하면 된다고 하셨다.

🔴심화

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

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

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

➡️
['청소년', '성인', '청소년', '청소년', '성인', '성인', '성인', '성인']

여기서 map
"people을 하나하나 돌면서 check_adult에 넣어라"라는 의미
그리고 그 결과값을 다시 list로 묶

+함수부분은 아래처럼 간소화 가능

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

🔶lambda식

ex.
result=map(lambda x:x, 리스트명)

함수를 굳이 만들 필요없이, 한문장으로 작성 가능해진다

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

print(list(result))


['청소년', '성인', '청소년', '청소년', '성인', '성인', '성인', '성인']

🔶filter

map이랑 유사한데, true인 것만 뽑음

20넘는 것만 뽑혔다! map보다 자주 사용되기도 한다

(lambda식에서 x:x를 관용적으로 많이 사용한다.
people의 요소 하나하나를 x에 넣는 원리)

🔴함수 심화- 함수의 매개변수

✅함수에 인수를 넣을 때, 어떤 매개변수에 어떤 값을 넣을지 정해줄 수 있다!(순서상관❌)

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

✅특정 매개변수에 디폴트 값 넣기

def cal2(a, b=3):
    return a + 2 * b
print(cal2(4))
print(cal2(4, 2))
print(cal2(a=6))
print(cal2(a=1, b=7))

✅입력값의 개수 unlimit

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

몇 개던지 내가 call_names()에 'name'을 넣는 만큼 나온다
cf.args
여러 개의 인수를 하나의 매개변수로 받을 때 관례적으로 사용.
arguments라는 뜻

✅키워드(딕셔너리) 인수 여러개 받기

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

🔴클래스

-1000마리의 몬스터가 있었다고 해보자
중앙에서 1000마리 각각의 hp를 관리하는 것보다
몬스터마다 각자의 hp를 가질 수 있게 하는 것이 효율적일 것이다.
🔻그러기 위해서, 아래와 같이 코드를 작성할 수 있다.

class Monster():
    hp = 100   -> 기본 hp는 100
    alive = True  -> 살아있는 상태가 true라는 뜻

    def damage(self, attack):    
-> 몬스터가 damage라는 함수를 갖고있다고 함

        self.hp = self.hp - attack   
-> attack만큼 줄어들거야

        if self.hp < 0:
            self.alive = False   
-> 살아있는 상태가 false

    def status_check(self):
-> 또하나의 함수를 가져옴. 죽었는지 살았는지 알려주는 함수!
        if self.alive:
            print('살아있다')
        else:
            print('죽었다')

🔻어떻게 써먹나?
m = Monster()  m이라는 변수에 Monster를 만들었음
m.damage(120)  120만큼의 데미지를 줌
m.status_check()  죽었는지 살았는지 체크 -> 죽음

m' = monster    m'이라는 변수에 Monster를 만들었음
m'.damage(90)     90만큼의 데미지를 줌
m'.status_check()   죽었는지 살았는지 체크 -> live

cf. m, m' 등은 이스턴스라고 부름

.
.

느낀점

이전에 학습했던 문법들을 계속 사용하면서 심화된 문법들을 여러개 배웠다. 이 과정에서 앞서 배운 문법들을 더욱 탄탄하게 다지는게 중요하겠다라는 생각이 들었고, 강사님의 말씀처럼 지금 문법을 하나하나 외우기보다는! 여러 문제를 풀면서 어떤 문법/함수를 사용해야하는지 떠올려보고 찾고 작성해보고 고치고 하면서 익숙해지는 방법이 더 효과적일 것이다.
다음주부터는 sql과 python문풀을 병행하며
본캠프 시작전, 사전캠프를 잘 마무리 해야겠다~!

profile
경영학도의 데이터분석 성장기💥

0개의 댓글

관련 채용 정보