본문 바로가기

스파르타 내일배움캠프

TIL 5-1 파이썬 문법 공부

 

오늘 중요한부분 필기한 내용

 

파이썬을 설치 => 일종의 번역팩을 설치했다 컴퓨터는 1010 전기신호 명령 인간이쓰는언어
비슷한 명령으로 바꿔주는거

귀도 반 로썸 문법이 직관적

오픈소스가 굉장히 많다

변수
a=1
a='kim' 변수랑 헷갈리지말라고
a=True 참거짓 

str(2) 랑 '2' 가 같다

변수1 = len(변수2)  변수2의 길이를 변수1에 담아준다

text[:3]
text[ : ]

순서가 있기 때문에, 문자열에서처럼 인덱싱과 슬라이싱을 사용할 수 있습니다

a = [1, 3, 2, 4]
print(a[3])  # 4
print(a[1:3]) # [3, 2]
print(a[-1]) # 4 (맨 마지막 것)


변수.split('나누는기준')[배열의순서]

리스트는 순서가 중요하게 값을 담는다.

딕셔너리는 키 밸류로 값을 담는 방법에 대한 자료형

  • 딕셔너리의 요소에는 순서가 없기 때문에 인덱싱을 사용할 수 없다.

person = {"name":"Bob", "age": 21}
print(person[0])   # 0이라는 key가 없으므로 KeyError 발생!

 

 

  • 딕셔너리의 값을 업데이트하거나 새로운 쌍의 자료를 넣을 수 있다.

person = {"name":"Bob", "age": 21}

person["name"] = "Robert"
print(person)  # {'name': 'Robert', 'age': 21}

person["height"] = 174.8
print(person)  # {'name': 'Robert', 'age': 21, 'height': 174.8}

 

 

  • 딕셔너리의 밸류로는 아무 자료형이나 쓸 수 있어요. 다른 딕셔너리를 넣을 수도 있다.

person = {"name":"Alice", "age": 16, "scores": {"math": 81, "science": 92, "Korean": 84}}
print(person["scores"])             # {'math': 81, 'science': 92, 'Korean': 84}
print(person["scores"]["science"])  # 92

 

 

딕셔너리 안에 해당 키가 존재하는지 알고 싶을 때는 in을 사용합니다.

person = {"name":"Bob", "age": 21}

print("name" in person)       # True
print("email" in person)      # False
print("phone" not in person)  # True

 

 

리스트와 딕셔너리의 조합

 

people = [{'name': 'bob', 'age': 20}, {'name': 'carry', 'age': 38}]

# people[0]['name']의 값은? 'bob'
# people[1]['name']의 값은? 'carry'

person = {'name': 'john', 'age': 7}
people.append(person)

# people의 값은? [{'name':'bob','age':20}, {'name':'carry','age':38}, {'name':'john','age':7}]
# people[2]['name']의 값은? 'john'

 


핵심! 리스트에 참거짓 변수 숫자 담을수 있고 리스트도 리스트를 담을수있다.

 

 

a_list = [2,'배',False,['사과','감']]

list[-1] 맨 마지막 

5 in a_list => 리스트안에 5가있으면 참 없으면 거짓

요소가 리스트 안에 있는지 알아보기

a = [2, 1, 4, "2", 6]
print(1 in a)      # True
print("1" in a)    # False
print(0 not in a)  # True


result = a_dict['name']

people = [
    {'name': 'bob', 'age': 20, 'score':{'math':90,'science':70}},
    {'name': 'carry', 'age': 38, 'score':{'math':40,'science':72}},
    {'name': 'smith', 'age': 28, 'score':{'math':80,'science':90}},
    {'name': 'john', 'age': 34, 'score':{'math':75,'science':100}}
]
result = people[2]['score']['science']
print(result)

a_dict = {'name':'bob','age':27} 키:밸류

if elif else

elif는안쓰는경우가 많은듯
money = 3000

if money > 3800:
    print('택시를 타자!')
elif money > 1200:
    print('버스를 타자')
else:
    print('걸어가자')

for i, person in enumerate(people):
    name = person['name']
    age = person['age']

    print(i,name,age)
    if i > 3:
        break

enumerate: 요소의 순서를 나타낸다.

def check_gender(pin):
    num = pin.split('-')[1][0]
    if int(num) % 2 == 0:
        print('여성')
    else:
        print('남성')

split의 연장 응용

그리고 int(변수) 이런식으로 문자를 정수화시킴

check_gender('150101-1012345')
check_gender('150101-2012345')
check_gender('150101-4012345')


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

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

print(a & b)  # 교집합
print(a | b)  # 합집합

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 + '점입니다.')
    print(f'{name}의 점수는 {score}점입니다.')

f스트링 효과적이다

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

b_list = []

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

b_list = [a*2 for a in a_list]

print(b_list)

for 문 축약

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))

people을 check_adult에 한번한번씩 넣어라 그게 map

클래스를 나눠주는것이 객체 지향적이다

 

출처:https://tykimos.github.io/2019/12/25/Python_Lambda/

 

파이썬 람다(Lambda) - 람다시리즈 1부

파이썬 입문자에게 람다(Lambda)가 나오면 잠시 명해질 때가 있습니다. 이해가 되는 것 같기도 하고 안되는 것 같기도 하고, 뭔가 묘한 녀석입니다. 뭔가 직관적으로 설명하는 그림이 있어 공유합

tykimos.github.io

람다는 필요할 때 바로 정의해서 사용한 후 버리는 일시적인 함수

 

 

출처: https://tykimos.github.io/2019/12/29/Python_Lambda_Function/

 

파이썬 람다함수(Lambda Function) - 람다시리즈 2부

앞서 파이썬 람다가 뭔지 알아봤습니다. 아직 못 보신 분은 아래 링크를 먼저 봐주세요. 이번에는 람다함수에 대해 알아볼까요? 먼저 그림부터 보겠습니다. 람다자체가 함수라서 람다함수라고

tykimos.github.io

람다자체가 함수라서 람다함수라고 부르기엔 애매합니다만 풀어서 말하면 람다를 반환하는 함수

 

출처: https://tykimos.github.io/2020/01/01/Python_Lambda_Map/

 

파이썬 람다(lambda)랑 맵(map) 케미 - 람다시리즈 3부

본격적으로 람다의 활용이 돋보이는 예제를 살펴보겠습니다. 람다와 맵이 케미를 이루면 아래와 같은 코드로 한 줄 구구단을 만들 수 있습니다. 아직 람다가 생소하신 분은 아래 링크를 먼저 봐

tykimos.github.io

람다함수에 대한 궁금증이있었는데 lamda 식이

 

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

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

 

ex) result =map(lambda x:x,people)

여기에다가 위의 코드에서 x에다가 person을 각각 넣어주고 

ex) result =map(lambda person:person(여기에다가 그<'성인' if person['age'] > 20 else '청소년'>구문을 넣어준다),people)

 

결론:result = map(lambda x: ('성인' if x['age'] > 20 else '청소년'), people) print(list(result)) 이렇게 만드는거 한줄짜리함수로 만드는법

 

 

 

def get_kwargs(**kwargs):
    print(kwargs)

get_kwargs(name='bob')
get_kwargs(name='john', age='27')

 

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

딕셔너리로 만드는 것

 

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

call_names('철수','영수','희재')

이렇게 여러 개의 인수를 하나의 매개변수로 받을 때 관례적으로 args라는 이름을 사용합니다. arguments라는 뜻

 

 

filter는 나중에 좀 깊게 다시한번 공부해봐야될것같다 오늘은 해야될 프로젝트가있기때문에.. 이만 마치도록한다.