본문 바로가기

교육 노트/파이썬 강의

[파이썬 때려잡기] Python 강의 13 - 반복문 while문

2018/09/04 - [교육 노트/파이썬 강의] - [파이썬 때려잡기] Python 강의 1 - Hello World!

2018/09/04 - [교육 노트/파이썬 강의] - [파이썬 때려잡기] Python 강의 2 - 변수와 자료형, 연산자

2018/09/05 - [교육 노트/파이썬 강의] - [파이썬 때려잡기] Python 강의 3 - 파이썬의 자료구조, 리스트 (list)

2018/09/05 - [교육 노트/파이썬 강의] - [파이썬 때려잡기] Python 강의 4 - 파이썬의 스트링 (string)

2018/09/05 - [교육 노트/파이썬 강의] - [파이썬 때려잡기] Python 강의 5 - 스트링과 리스트 처리-1

2018/09/05 - [교육 노트/파이썬 강의] - [파이썬 때려잡기] Python 강의 6 - 스트링과 리스트 처리-2

2018/09/05 - [교육 노트/파이썬 강의] - [파이썬 때려잡기] Python 강의 7 - 튜플 (tuple)

2018/09/05 - [교육 노트/파이썬 강의] - [파이썬 때려잡기] Python 강의 8 - 딕셔너리 (Dictionary)

2018/09/08 - [교육 노트/파이썬 강의] - [파이썬 때려잡기] Python 강의 9 - 집합 (set)

2018/09/08 - [교육 노트/파이썬 강의] - [파이썬 때려잡기] Python 강의 10 - 사용자 입출력

2018/09/09 - [교육 노트/파이썬 강의] - [파이썬 때려잡기] Python 강의 11 - 변수와 메모리

2018/09/09 - [교육 노트/파이썬 강의] - [파이썬 때려잡기] Python 강의 12 - 조건과 조건문(분기문)


프로그램을 만들다보면 같은 행동을 여러번 하거나 규칙에맞게 여러번 수행해야될 상황이 있을수 있다.


만약 1~100까지 더하고 싶다면


number = 0

number += 1
number += 2
number += 3
number += 4
number += 5
number += 6
number += 7
number += 8
number += 9
number += 10
...

number += 99
number += 100

과같이 복붙 노가다를 해줘야하는데

이런게 단순한게 반복되는것을 인간이 직접 해주기 싫기도 하고 실수가 발생할 확률도 크게 증가한다.


따라서 파이썬은 이러한 반복을 수행해주는 반복문을 제공해준다.


1. while

while expression:
<내용>

expression이 참이라면 내용을 실행한다. if문과 다르게 참일동안 계속하여 실행한다.

즉 거짓이 될때까지 계속해서 반복한다는 의미이다.


number = 0

count = 1

while count <= 100:
number += count
count += 1

print(number)

다음과 같이 코드를 작성하면

처음 while 문에 들어갈떄 조건을 검사한다. count 는 100보다 작으므로

내용이 실행되고 내용이 끝나면 다시 조건을 검사한다. count 에 1을 더해도 아직 100보다 작으므로

내용을 실행한다.. -> 반복

count가 101이되면 조건에 만족하지 않으므로 while문을 빠져나온다.


2. 무한 루프

만약 while문의 조건이 항상 참이라면 어떻게 될까

그렇게 되면 while문의 내용이 무한히 실행될것이다.

그것이 무한루프이다

while True:
내용

이딴 기능을 왜 쓰냐고 하면

만약에 프로그램 제작자도 언제끝낼지 모르는 상황이 있다면?

예를들어 q를 누르면 프로그램을 종료합니다. 같은 경우

사용자가 언제 q를 누를지 알수없다.

그래서 일정시간이 지나면 False가 되는 조건을 넣을수 없는경우다


3.break문

근데 위와 같이 무한루프를 만들어 버리면 그냥 평생 도는것이지 q를 누를다고 종료되는것이 아니다.

그래서 파이썬에서는 while문을 빠져나가는 break문을 제공한다.

while True:
i = input('q누르면 종료:')
if i == 'q':
print ("종료!")
break
else:
print('q누르라니까!')


q누르면 종료:a
q누르라니까!
q누르면 종료:a
q누르라니까!
q누르면 종료:a
q누르라니까!
q누르면 종료:a
q누르라니까!
q누르면 종료:b
q누르라니까!
q누르면 종료:c
q누르라니까!
q누르면 종료:p
q누르라니까!
q누르면 종료:q
종료!

다음과 같이 while문 안에서 break키워드를 만나면 while문을 종료시킬수있다.


참고로 위와같은 상황을 만들기 위하여 꼭 무한루프와 break 조합을 쓸필요는 없다.

cond = True
while cond:
i = input('q누르면 종료:')
if i == 'q':
print ("종료!")
cond = False
else:
print('q누르라니까!')


q누르면 종료:a
q누르라니까!
q누르면 종료:b
q누르라니까!
q누르면 종료:c
q누르라니까!
q누르면 종료:q
종료!

이런식으로 boolean변수를 이용해도 된다.



4. continue

break가 이제 밑에 실행안하고 while문 종료! 라면

continue는 이번에는 밑에 실행안하지만 while문 종료는 아님! 이다


5. while else문

cond = True
while cond:
i = input('q누르면 종료:')
if i == 'q':
cond = False
else:
print('q누르라니까!')
else:
print("종료!")

while - else문은

조건에 만족하지 않으면 실행되는 내용이다. while-else문이라고 else문도 반복하는것은 아니고 그냥 조건에 만족하지 않았을때 한번 들어가게 된다.

여기서 그냥 cond =False로 바꾸어버리면 while문은 들어가지 않고 else문만 들어갈것이다.


중요한점은 조건에 만족하지 않아야 들어가는 문장이므로 while문에서 break를 통해서 루프를 빠져나왔다고 하면 else문에 들어가지않는다.


while True:
i = input('q누르면 종료:')
if i == 'q':
break
else:
print('q누르라니까!')
else:
print("종료!") #들어갈일 없음!


728x90