본문 바로가기

Python

while 반복문

728x90
반응형

 

 

if 문이랑 매우 흡사하다

while 조건: 결과가 True / False 에 따라 코드를 실행 반복할지 코드를 탈출 할지 결정된다

ex )
while 조건 :

True
실행할 명령 1, 2 를 실행하고
다시 while 실행
True 
실행할 명령 1, 2 를 다시 실행
다시 while 실행
False 
코드 종료

i = 0						# 초기식
while i < 100:					# while 조건식
    print('Hello, World!')			# 반복할 코드
    i += 1					# 변화식

결과

 

 

 

 

 

주로 사용되는 code 형태

 

treeHit = 0
while treeHit < 10:
     treeHit += 1
     print("나무를 %d번 찍었습니다." % treeHit)
     if treeHit == 10:
         print("나무 넘어갑니다.")

위 예에서 while문의 조건문은 treeHit < 10이다.
" treeHit +=1 " 은 할당연산자로 " treeHit = treeHit + 1 " 과 같다
treeHit가 10보다 작은 동안에 True 이므로 while문 안의 문장을 계속 반복 수행한다.
treeHit < 10 조건문이 False가 되므로 while문을 종료하게 된다.

tree Hit 조건문 조건 판단 수행하는 문장 while
0 0 < 10 True 나무를 1번 찍었습니다. 반복
1 1 < 10 True 나무를 2번 찍었습니다. 반복
2 2 < 10 True 나무를 3번 찍었습니다. 반복
3 3 < 10 True 나무를 4번 찍었습니다. 반복
4 4 < 10 True 나무를 5번 찍었습니다. 반복
5 5 < 10 True 나무를 6번 찍었습니다. 반복
6 6 < 10 True 나무를 7번 찍었습니다. 반복
7 7 < 10 True 나무를 8번 찍었습니다. 반복
8 8 < 10 True 나무를 9번 찍었습니다. 반복
9 9 < 10 True 나무를 10번 찍었습니다.
나무 넘어갑니다.
반복
10 10 < 10 False   종료

 

여러 가지 선택지 중 하나를 선택해서 입력받는 예제를 만들어 보자

 

prompt = """
1. Add
2. Del
3. List
4. Quit

Enter number: """

prompt에 여러 문자열들을 변수로 지정한다

number = 0
while number != 4:
     print(prompt)
     number = int(input())

이렇게 number = 0 을 설정해 놓지 않으면
다음 while 문의 number != 4 에서 변수가 존재하지 않는다는 오류가 발생한다
(  number = int(input())는 사용자의 숫자 입력을 받아들이는 것 )

1. Add
2. Del
3. List
4. Quit

Enter number : 

while문을 보면 number가 4가 아닌 동안 prompt를 출력하고 사용자로부터 번호를 입력받는다.
다음 결과 화면처럼 사용자가 값 4를 입력하지 않으면 계속해서 prompt를 출력한다.
( 정답 : 4 를 입력해야 while 문을 종료한다 )

4를 입력하면 조건문이 거짓이 되어 while문을 빠져나가게 된다.

" number != 4 " 의 뜻은 input 값이 4와 같지 않다 라는 뜻인데
user 가 4를 입력하였으므로 number != 4 는 거짓이 된다

 

break 문 ( while 강제종료 )

coffee = 10
 money = 300
 while money:
     print("돈을 받았으니 커피를 줍니다.")
     coffee = coffee -1
     print("남은 커피의 양은 %d개입니다." % coffee)
     if coffee == 0:
         print("커피가 다 떨어졌습니다. 판매를 중지합니다.")
         break

money가 300으로 고정되어 있으므로 while money : 에서 조건문인 money0이 아니기 때문에 항상 True 이다.
따라서 무한히 반복되는 무한 루프를 돌게 된다.
그리고 while문의 내용을 한 번 수행할 때마다 coffee = coffee - 1에 의해서 coffee의 개수가 1개씩 줄어든다.
만약 coffee가 0이 되면 if coffee == 0: 문장에서 coffee == 0:이 참이 되므로 if문 다음 문장 "커피가 다 떨어졌습니다. 판매를 중지합니다."가 수행되고 break문이 호출되어 while문을 빠져나가게 된다.

 

조금 더 복잡한 예

coffee = 10
while True:
    money = int(input("돈을 넣어 주세요: "))
    if money == 300:
        print("커피를 줍니다.")
        coffee -= 1
    elif money > 300:
        print("거스름돈 %d를 주고 커피를 줍니다." % (money -300))
        coffee -= 1
    else:
        print("돈을 다시 돌려주고 커피를 주지 않습니다.")
        print("남은 커피의 양은 %d개 입니다." % coffee)
    if coffee == 0:
        print("커피가 다 떨어졌습니다. 판매를 중지 합니다.")
        break

위 코드를 실행하게 되면 아래와 같이 입력 창이 생성된다

돈을 넣어 주세요:

500을 입력하니 elif money > 300: 가 실행이 되었다

다시 while 처음부로 돌아가서 " coffee = 9 " 인 상태에서 다시 while 실행한다

이번에 300을 입력하니 if money == 300: 이 실행이 되었다

다시 while 처음부로 돌아가서 " coffee = 8 " 인 상태에서 다시 while 실행한다

이번에 100을 입력하니 else: 이 실행이 되었다 

돈을 넣어 주세요: 500
거스름돈 200를 주고 커피를 줍니다.
돈을 넣어 주세요: 300
커피를 줍니다.
돈을 넣어 주세요: 100
돈을 다시 돌려주고 커피를 주지 않습니다.
남은 커피의 양은 8개입니다.
돈을 넣어 주세요:

coffee 의 변수를 10으로 지정하였다 ( coffee = 10 )
code 를 한 줄 실행할때마다 coffee -= 1 로 coffee 의 변수가 차감된 상태로 변수가 재 선정 된다

돈을 넣어 주세요: 300
커피를 줍니다.
돈을 넣어 주세요: 300
커피를 줍니다.
돈을 넣어 주세요: 300
커피를 줍니다.
돈을 넣어 주세요: 300
커피를 줍니다.
돈을 넣어 주세요: 300
커피를 줍니다.
돈을 넣어 주세요: 300
커피를 줍니다.
돈을 넣어 주세요: 300
커피를 줍니다.
돈을 넣어 주세요: 300
커피를 줍니다.
돈을 넣어 주세요: 300
커피를 줍니다.
돈을 넣어 주세요: 300
커피를 줍니다.
커피가 다 떨어졌습니다. 판매를 중지 합니다.

이해를 돕고자 300 원을 10회 입력하였다
300 을 1번 입력할때마다 coffee -1 이 되어 다시 while 을 실행하게 된다
coffee 는 결국 == 0 이 되므로 코드는 종료하게 된다

 

continue 

while문을 빠져나가지 않고 while문의 맨 처음(조건문)으로 다시 돌아가게 만들고 싶은 경우가 생기게 된다.
이때 사용하는 것이 바로 continue문이다.

1부터 10까지의 숫자 중에서 홀수만 출력하는 것을 while문을 사용해서 작성한다고 생각해보자

 a = 0
 while a < 10:
     a = a + 1
     if a % 2 == 0: continue
     print(a)


1
3
5
7
9


a가 10보다 작은 동안 a는 1만큼씩 계속 증가한다. 
if a % 2 == 0(a를 2로 나누었을 때 나머지가 0인 경우)True가 되는 경우는 a가 짝수일 때이다.
a짝수이면 continue 문장을 수행한다.
continue문은 while문의 맨 처음(조건문: a<10)으로 돌아가게 하는 명령어이다.
a가 짝수이면 print(a)는 수행되지 않을 것이다.

 

 

무한 루프 ( Loop )

무한 루프란 무한히 반복한다는 의미이다.
우리가 사용하는 일반 프로그램 중에서 무한 루프 개념을 사용하지 않는 프로그램은 거의 없다.
파이썬에서 무한 루프는 while문으로 구현할 수 있다.

다음은 무한 루프의 기본 형태이다.

while True:
    수행할 문장1
    수행할 문장2

while문의 조건문이 True이므로 항상 참이 된다.
따라서 while문 안에 있는 문장들은 무한하게 수행될 것이다.

다음의 무한 루프 예이다. [ Ctrl+C ]를 눌러 빠져나가자.

 while True:
     print("Ctrl+C를 눌러야 while문을 빠져나갈 수 있습니다.")

Ctrl+C를 눌러야 while문을 빠져나갈 수 있습니다.
Ctrl+C를 눌러야 while문을 빠져나갈 수 있습니다.
Ctrl+C를 눌러야 while문을 빠져나갈 수 있습니다.
....

 

 

728x90
반응형

'Python' 카테고리의 다른 글

파이썬 상수( Constant )  (0) 2020.08.29
indent ( 들여쓰기 )  (0) 2020.08.29
for 문 2개를 이용하여 구구단 만들기  (0) 2020.08.08
for 반복문  (0) 2020.08.08
elif & else  (0) 2020.08.08