오늘 배운 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
인 것 같다.
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
# 앞 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) # 차집합
# 출력값
# {'수박', '배', '사과'}
# {'딸기', '포도', '사과', '감', '수박', '참외', '배'}
# {'딸기', '감'}
파이썬 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점 입니다.
에러가 발생해도 진행할 수 있도록하는 방법
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('영수')
# 출력값
# 안녕!
# 영수님 안녕하세요
다른 파일을 불러와 사용할 수 있는걸 볼 수 있다.
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문을 삼항연산자를 통해 한 줄로 만들었다.
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함수의 반환 값은 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))
# 결과값 = ['청소년', '성인', '청소년', '청소년', '성인', '성인', '성인', '성인']
labda함수를 사용하면 이름이 없는 함수를 만들 수 있다.
람다함수의 장점은 코드의 간결함과 메모리 절약
(lambda x,y: x + y)(10, 20)
이 식을 예시로 설명하자면 x
와 y
를 매개변수로 가지고 x + y
를 식으로 가진 함수를 생성시킨 다음 x
와 y
값에 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))
# 결과값 = ['청소년', '성인', '청소년', '청소년', '성인', '성인', '성인', '성인']
필터 함수는 두번째 인자로 넘어온 데이터 중에서 첫번째 인자로 넘어온 조건 함수를 만족하는 데이터만을 반환합니다.
람다함수와 필터함수를 적용하면 다음과 같은 코드가 작성된다.
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}]