1. 조건문
1.1 조건문의 종류
1
2
3
4
if True :
print('python')
print('done')
1
2
python
done
1
2
3
4
if False :
print('python')
print('done')
1
done
1
2
3
4
if False:
print('python')
print('done')
- 특정 조건에 따라서 코드를 실행하고자 할때 사용
- if, else, elif
1.2 조건부 문
1
2
3
if True:
print('python')
print('done')
1
2
python
done
1
bool(0), bool(1), bool(1.1)
1
(False, True, True)
1
2
3
4
5
6
7
8
9
num = 0
if num:
print('python')
else :
print('False')
num = 1
if num:
print('python2')
1
2
False
python2
1
2
3
4
number = 7
if number % 2: # %연산자는 나머지를 출력
print('홀수')
1
홀수
- bool 데이터 타입 이외의 테이터타입이 오면 bool으로 형변환되어 판단
- int : 0 을 제외한 나머지 값은 True
- float : 0.0을 제외한 나머지가 True
- str : ‘을 제외한 나머지 문자열은 True
- list, tuple, dict : [], (), {} 을 제외한 나머지 문자열은 True
1.3 실습
1.3.1 택시를 타거나 걷거나
1
2
3
4
5
6
7
money = int(input('지갑에 있는 돈을 입력하세요 : '))
if money >= 10000:
print('택시를 타고 집에 갑니다')
if money < 10000:
print('걸어서 집에 갑니다')
1
2
지갑에 있는 돈을 입력하세요 : 10000
택시를 타고 집에 갑니다
1
2
3
4
5
6
7
money = int(input('지갑에 있는 돈을 입력하세요 : '))
if money >= 10000:
print('택시를 타고 집에 갑니다')
else:
print('걸어서 집에 갑니다')
1
2
지갑에 있는 돈을 입력하세요 : 9000
걸어서 집에 갑니다
- 돈이 만원이상 있으면 택시를 타고
- 그렇지 않으면 걸어서 집에 가는 코드
1.3.2 택시 혹은 버스 아니면 걷거나
1
2
3
4
5
6
7
8
9
10
money = int(input('가지고 있는 돈을 입력하세요 : '))
if money >=10000:
print('택시를 타고 집에 갑니다.')
elif money >= 5000:
print('광역 버스를 타고 집에 갑니다.')
elif money >= 2000:
print('버스를 타고 집에 갑니다.')
else :
print('걸어서 집에 갑니다.')
1
2
가지고 있는 돈을 입력하세요 : 34141
택시를 타고 집에 갑니다.
- 지갑에 돈이 만원 이상 있으면 택시를 타고
- 2000원 이상이 있으면 버스를 탑니다
- 그렇지 않으면 걸어서 집에 가는 코드
1.3.3 은행 입출금 시스템
1
2
3
4
5
6
7
8
9
10
11
account = 10000
draw_money = int(input('인출할 금액을 입력하세요 : '))
if draw_money <= account:
account -= draw_money
print(f'{draw_money}원이 인출되었습니다.')
else:
print(f'잔액이 부족하여 인출이 되지 않았습니다. {account - draw_money}가 부족합니다')
print(f'현재 잔액은 {account}원 입니다')
1
2
인출할 금액을 입력하세요 : 10000
10000원이 인출되었습니다.
- 계좌에 10,000원이 있습니다.
- 인출 금액을 입력 받습니다.
- 인출 금액이 계좌에 있는 금액보다 크면 “인출이 불가능합니다.” 출력
- 인출 금액이 계좌에 있는 금액보다 작으면 “인출 되었습니다.” 출력
- 마지막에 현재 계좌에 잔액을 출력
2. 삼항 연산자
2.1 삼항 연산자란?
- 간단한 if, else 구분을 한줄의 코드로 표현할수 있는 방법
- (True) if (condition) else (False)
2.2 data 변수에 0이면 ‘zero’ 출력 아니면 ‘not zero’를 출력
1
2
3
4
5
6
7
data = int(input('숫자를 입력하세요 : '))
if data :
print('not zero')
else :
print('zero')
1
2
숫자를 입력하세요 : 0
zero
1
2
data = int(input('숫자를 입력하세요 : '))
'not zero' if data else 'zero'
1
2
숫자를 입력하세요 : 0
'zero'
3. 반복문
3.1 반복문이란?
- 반복되는 코드를 실행할때 사용
- while, for, break, continue
- list comprehention
3.2 while
- While문은 True이면 계속 반복이 됨.
- 멈추게 하려면 강제로 멈추는 Break를 걸거나, False가 되는 조건을 걸면됨
3.2.1 While 예제
1
2
3
4
data = 3
while data :
print(data)
data -= 1
1
2
3
3
2
1
- data에서 1씩 뺼샘이 반복되는 코드
- data의 값이 0이 되면 False로 바뀌기 때문에 자동으로 멈추게 됨
3.2.2 총점과 평균 출력하기
1
2
3
4
5
6
7
8
9
10
11
12
13
subjects_ls = ['korean', 'english', 'math']
point_ls = [80, 90, 100]
point_dict = {'korean' : 80, 'english' : 90, 'math' : 100}
total = 0
avg = 0
datas = point_ls.copy()
while datas :
total += datas.pop()
avg = total / len(point_ls)
print(total ,avg)
1
270 90.0
- 학생이 국어 80, 영어 90, 수학 100점 while 문을 이용해서 총점과 평균을 출력하기
- 학생의 점수는 list, dict표현
- len, values, list.pop()
3.3 무한 루프
1
2
3
4
5
6
result = 1
while result:
result += 1
print(result)
1
2
3
4
5
6
7
8
9
10
11
12
13
---------------------------------------------------------------------------
KeyboardInterrupt Traceback (most recent call last)
<ipython-input-10-5260418c4e7c> in <module>
2
3 while result:
----> 4 result += 1
5
6 print(result)
KeyboardInterrupt:
- False가 안나오는, kernel의 interrupt로 실행 중지(jupyter notebook 기준)
3.4 Break
1
2
3
4
5
6
7
8
9
result = 1
while result:
if result >= 10:
break
result += 1
print(result)
1
10
- 무한루프를 해결하기 위해 Break를 사용하여 강제로 멈춰줌
3.5 for
- iteralbe 한 값을 하나씩 꺼내서 value에 대입시킨 후 코드를 iterable 변수의 값 갯수 만큼 실행
- for (variable) in (iterable): code
3.5.1 for문 예제
1
2
3
ls = [0 ,1, 2, 3, 4]
for data in ls:
print(data)
1
2
3
4
5
0
1
2
3
4
3.6 continue
- 조건부 부분으로 올라가서 코드가 실행
3.6.1 continue 예제
1
2
3
4
5
ls = [0, 1, 2, 3, 4]
for data in ls:
if data % 2:
continue # continue 때문에 아래 print가 실행이 안됨
print(data, end = ' ')
1
0 2 4
- if문의 조건으로 data를 2로 나눴을떄 0이 이외의 값이 나오면 True로 나와서 if문 뒤에 있는 continue가 실행되어 다시 조건문(for문)으로 돌아가기 떄문에 아래에 있는 print문이 실행안됨
3.7 for 문 예제
3.7.1 for문을 이용해서 코드를 100번 실행
1
2
3
4
5
6
result = 0
for data in range(100):
result += data
result
1
4950
- 0 ~ 99까지 모든수를 더하게 되는 코드
3.7.2 Range란
1
list(range(5)), list(range(5,10)), list(range(0, 10, 2))
1
([0, 1, 2, 3, 4], [5, 6, 7, 8, 9], [0, 2, 4, 6, 8])
- offset index 개념과 비슷하게 사용가능
- 설정한 범위를 생성해주는 코드
- range(시작, 끝, 스탭)
- range(5) : 0 ~ 4까지 생성
- range(5,10) : 5부터 9까지 생성
- range(0,10,2) : 0부터 9까지 2스탭씩
3.7.3 0 ~ 10 까지 짝수를 더한 총합
1
2
3
4
5
6
result = 0
for number in range(0, 11, 2):
result += number
result
1
30
- range의 step을 이용하여 2단계식 짝수만 나오게 설정
- range의 끝은 포함안되는것에 주의
3.7.4 dict의 for문
1
2
3
4
points_dict = {'korean' : 80, 'english' : 90, 'math' : 100}
print(list(point_dict.keys()))
print(list(point_dict.values()))
print(list(point_dict.items()))
1
2
3
['korean', 'english', 'math']
[80, 90, 100]
[('korean', 80), ('english', 90), ('math', 100)]
1
2
for data in points_dict:
print(data)
1
2
3
korean
english
math
- dict는 for문을 하게되면 key값만 출력됨
1
2
for subject, point in point_dict.items():
print(subject, point)
1
2
3
korean 80
english 90
math 100
- key와 val값을 모두 받고싶으면 items() 를 사용하면됨
3.7.5 for문의 iterable 데이터
1
2
3
4
subjects_ls = ["korean", "english", 'math']
points_ls = [80, 90 , 100]
for subject, point in zip(subjects_ls, points_ls):
print(subject, point)
1
2
3
korean 80
english 90
math 100
- for 문에서 iterable 데이터가 tuple로 나오면 여러개의 변수로 받을수 있습니다.
3.7.6 구구단 출력 (가로 출력)
1
2
3
4
5
6
7
num1 = 0
num2 = 0
for num1 in range(1, 10):
for num2 in range(2,10):
print(f'{num2}*{num1}={num1 * num2}', end = '\t')
print()
1
2
3
4
5
6
7
8
9
2*1=2 3*1=3 4*1=4 5*1=5 6*1=6 7*1=7 8*1=8 9*1=9
2*2=4 3*2=6 4*2=8 5*2=10 6*2=12 7*2=14 8*2=16 9*2=18
2*3=6 3*3=9 4*3=12 5*3=15 6*3=18 7*3=21 8*3=24 9*3=27
2*4=8 3*4=12 4*4=16 5*4=20 6*4=24 7*4=28 8*4=32 9*4=36
2*5=10 3*5=15 4*5=20 5*5=25 6*5=30 7*5=35 8*5=40 9*5=45
2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 7*6=42 8*6=48 9*6=54
2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 8*7=56 9*7=63
2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 9*8=72
2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
- 구구단을 출력하는 for문을 만들기
- 이중 for 문안에 for문을 이용하여 만들고
- 가로로 출력하기 위해 print에 end = ‘\t’ 옵션을 넣는다.
- f format을 사용하여 출력
4. List comprehention
4.1 List comprehention이란?
- 리스트 데이터를 만들어주는 방법
- for 문보다 빠르게 동작
- [data의 조건(if문 가능) for data in datas]
4.2 for문과 List comprehention 코드 비교
- 각각 값에 제곱한 결과를 출력하는 코드 만들기
4.2.1 for문을 이용한 코드
1
2
3
4
5
6
ls = [0, 1, 2, 3]
result = []
for data in ls:
result.append(data ** 2)
result
1
[0, 1, 4, 9]
4.2.2 List comprehention을 이용한 코드
1
2
result = [data ** 2 for data in ls]
result
1
[0, 1, 4, 9]
- 같은 결과를 만들어내는 코드라도 List comprehention이 더 간결하다
4.3 list comprehention을 사용해서 홀수와 짝수를 리스트로 출력해주는 코드
1
2
3
4
5
ls = [0, 1, 2, 3]
result = ['홀수' if data % 2 else '짝수' for data in ls]
result
1
['짝수', '홀수', '짝수', '홀수']
- 삼항 연산자를 사용하여 코드 작성 가능
- [‘True 결과’ if value else ‘False 결과’for value in list]
4.4 list comprehention 조건문
1
2
ls = range(10)
[data for data in ls if data % 2]
1
[1, 3, 5, 7, 9]
- 0 ~ 10 까지 홀수만 출력
- [True 조건문 for value in list False 조건문]
1
2
ls = [1, 2, 3]
[data for data in dir(ls) if data[:2] != '__']
1
2
3
4
5
6
7
8
9
10
11
['append',
'clear',
'copy',
'count',
'extend',
'index',
'insert',
'pop',
'remove',
'reverse',
'sort']
- dir : 사용가능한 함수를 보여주는 메서드
- 조건문을 사용하여 dir 함수에 __가 포함되어 있지 않은 것만 출력해줌
4.5 for문과 list comprehention 성능 비교
4.5.1 for문의 성능
1
2
3
4
5
6
7
%%timeit
ls = []
for num in range(1, 10001):
ls.append(num)
len(ls)
1
480 µs ± 17.2 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
4.5.2 List comprehention의 성능
1
2
3
4
5
%%timeit
ls = [num for num in range(1, 10001)]
len(ls)
1
246 µs ± 2.37 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
- for문보다 List comprehention이 약 2배 가량 빠른것을 볼수 있다
- for : 480 µs
- List comprehention : 246 µs