Posts 조건문과 반복문
Post
Cancel

조건문과 반복문

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
This post is licensed under CC BY 4.0 by the author.