[TIL #2] 파이썬 기초

안떽왕·2023년 3월 20일
1

Today I Learned

목록 보기
2/76

Bool 자료형

오늘 배운 Bool 자료형을 가지고 혼자 쳐본것

print(True == True) = True
print(False == False) = True
print('True' == True) = False
문자열은 모두False인 것 같다.

print(1 == True) = True
print(2 == True) = False
print(1.1 == True) = False
print(0.1 == True) = False
print(-1 == True) = False
print(0 == True) = False
숫자는 1을 제외하면 모두 False인 것 같다.

문자형 다루기

n번째 문자까지만 출력

text = "sparta"
print(text[:3])
print(text[3:])

# 출력값 = spa
# 출력값 = rta

[:3]의 경우 0 1 2번 인덱스까지 출력
[3:]의 경우 3번 인덱스부터 출력

전화번호 지역번호 출력

phone = "02-123-1234"
print(phone.split("-")[0])

# 출력값 = 02

phone.split("-")['02', '123', '1234']
이중 0번 인덱스를 출력하기 때문에 02가 출력

리스트와 딕셔너리

특정인물의 특정값 출력

# smith의 과학점수를 출력하고자 함

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

print(people[2]['score']['science'])

# 출력값 = 90

people[2]{'name': 'smith', 'age': 28, 'score': {'math': 80, 'science': 90}}
people[2]['score']{'math': 80, 'science': 90}
people[2]['score']['science']90

반복문

반복문을 이용한 n개까지 출력

# 앞 5개까지만 출력

fruits = ['사과', '배', '감', '귤','귤','수박','참외','감자','배','홍시','참외','오렌지']

for i, fruit in enumerate(fruits):
    print(i, fruit)
    if i == 4:
        break

# 결과값
# 0 사과
# 1 배
# 2 감
# 3 귤
# 4 귤

enumerate는 인자로 넘어온 목록을 기준으로 인덱스와 원소를 차례대로 접근하게 해주는 반복자(iterator) 객체를 반환해주는 함수

튜플과 집합

튜플

리스트와 비슷하지만 불변인 자료형

#리스트
a = [1, 2, 3]

#튜플
b = (1, 2, 3)

튜플은 불변이기 때문에 b[0] = 99 와 같이 입력하면 에러가 뜸

집합

집합을 구현함, 중복 제거

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 = ['배','사과','포도','참외','수박']

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

파이썬 3.6에서 문자열을 좀 더 쉽게 포멧팅하기 위한 방법으로서 추가 된 기능으로 문자열 입력전 f를 써주고 변수를 중괄호({})로 감싸주기만 하면 된다.

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(f'{name}의 점수는 {score}점 입니다.')
    
# 출력값
# 영수의 점수는 70점 입니다.
# 영희의 점수는 65점 입니다.
# 기찬의 점수는 75점 입니다.
# 희수의 점수는 23점 입니다.
# 서경의 점수는 99점 입니다.
# 미주의 점수는 100점 입니다.
# 병태의 점수는 32점 입니다.

예외처리

에러가 발생해도 진행할 수 있도록하는 방법

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(person['name'], '에러입니다')

# 출력값
# carry
# ben
# bobby 에러입니다
# red
# queen

이름이 bobby인 데이터에 나이가 빠져있는데 이상태로 출력을 하면 에러가 발생한다.
에러가 발생했을때 try-except문을 쓰면 해당 에러를 넘기고 계속 프로그램을 실행시킬 수 있다.
위의 코드에선 try문을 실행하고 에러가 발생하면 except문을 실행하라로 해석 할 수 있을 것 같다.

파일 불러오기

파일을 분리해 관리에 이점을 가질 수 있다.

# 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('영수')

# 출력값
# 안녕!
# 영수님 안녕하세요

다른 파일을 불러와 사용할 수 있는걸 볼 수 있다.

한 줄로 줄이기

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은 홀수입니다

위와 아래는 같은 결과값을 내는 코드이지만 아래의 코드는 if문을 삼항연산자를 통해 한 줄로 만들었다.

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

print(b_list)

if문 예시와 마찬가지로 위와 아래는 같은 결과값을 가진다.

map, lambda, filter식

map(function, iterable)

첫 번째 매개변수로 함수가 오고
두 번째 매개변수로 반복가능한 자료형(리스트, 튜플 등)이 온다.

map함수의 반환 값은 map객체이기 때문에 해당 자료형을 list 혹은 tuple로 형 변환시켜주어야 한다.

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):
    return '성인' if person['age'] > 20 else '청소년'

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

# 결과값 = ['청소년', '성인', '청소년', '청소년', '성인', '성인', '성인', '성인']

lambda 매개변수 : 표현식

labda함수를 사용하면 이름이 없는 함수를 만들 수 있다.
람다함수의 장점은 코드의 간결함과 메모리 절약

(lambda x,y: x + y)(10, 20)
이 식을 예시로 설명하자면 xy를 매개변수로 가지고 x + y를 식으로 가진 함수를 생성시킨 다음 xy값에 10과 20을 넣은 식이다.

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

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

# 결과값 = ['청소년', '성인', '청소년', '청소년', '성인', '성인', '성인', '성인']

filter(조건함수, 순회 가능한 데이터)

필터 함수는 두번째 인자로 넘어온 데이터 중에서 첫번째 인자로 넘어온 조건 함수를 만족하는 데이터만을 반환합니다.

람다함수와 필터함수를 적용하면 다음과 같은 코드가 작성된다.

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

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

# 결과값 = [{'name': 'carry', 'age': 38}, {'name': 'ben', 'age': 27}, {'name': 'bobby', 'age': 57}, {'name': 'red', 'age': 32}, {'name': 'queen', 'age': 25}]
profile
이제 막 개발 배우는 코린이

0개의 댓글