WHILE 구문은 파이썬 기본 반복문 중 하나로 조건문이 만족하는한 반복해서 수행됩니다. FOR 문과는 다르게 반복하는 인자값이 정해져 있지 않고 조건이 만족하는 한은 계속 수행됩니다.
WHILE 문의 기본 문법
WHILE 조건문:
수행할 작업1
수행할 작업2
....
WHILE 문은 조건문이 참이기만 하면 구문 안에 있는 작업 1, 작업 2 를 무한히 반복합니다. FOR 문과는 다르게 지정된 범위 없이 반복할 수 있는 루프를 쉽게 만들어낼 수 있습니다. 또한 WHILE문은 리스트에 대한 반복보다는 반복이 수행되는 조건을 명확히 알 수 있기 때문에 반복이 언제 종료되는지 의미적으로 알 수 있습니다.
>>>> visit = 0
>>>> while visit < 11:
... visit = visit + 1
... if visit == 11:
... print('방문횟수를 초과했습니다.')
... else:
... print(visit, ' 번째 방문했습니다.')
1 번째 방문했습니다.
2 번째 방문했습니다.
3 번째 방문했습니다.
4 번째 방문했습니다.
5 번째 방문했습니다.
6 번째 방문했습니다.
7 번째 방문했습니다.
8 번째 방문했습니다.
9 번째 방문했습니다.
10 번째 방문했습니다.
방문횟수를 초과했습니다.
위 예문에서 볼 수 있듯이 WHILE문의 밖에 변수를 선언해서 내부에서 카운트를 올려가면서 조건에 해당하는 값이 될 때까지 반복할 수 있습니다. 여기서의 조건은 visit < 11 입니다. visit 변수가 0 에서부터 시작해서 1씩 증가하여 조건에 해당하는 11이 되면 WHILE문이 종료하게 됩니다. 조건에 매치하지 않은 상태에서는 내부의 구문이 계속 실행되면서 "n 번째 방문했습니다." 문구가 출력됩니다. visit 변수가 11이 되는 순간 "방문횟수를 초과했습니다." 라는 문구가 출력되고 WHILE문을 탈출합니다.
WHILE 구문의 활용
조건에 맞지 않으면 계속 실행된다는 WHILE구문의 특성을 이용하여 몇 가지 활용이 가능합니다. 그 중 하나로, 파이썬으로 실행되는 프로그램의 파라미터를 입력받을때 활용될 수 있습니다. 예를 들어, 아래와 같이 1부터 4까지의 옵션을 제공하고 사용자에게 원하는 옵션을 선택하게 할 수 있습니다.
>>>> OPTIONS = """
... 1. COKE
... 2. COFFEE
... 3. JUICE
... 4. EXIT
...
... CHOOSE YOUR DRINK : """
>>>> op = 0
>>>> while op != 4:
... print("YOU CHOOSE ", op)
... print(OPTIONS)
... op = int(input())
...
1. COKE
2. COFFEE
3. JUICE
4. EXIT
CHOOSE YOUR DRINK :
OPTIONS 라는 문자열과 WHILE 문을 이용하여 파라미터를 입력받을 수 있는 사용자 인터페이스를 생성합니다. OPTIONS에는 사용자가 선택할 수 있는 옵션이 4 가지가 표현되어 있습니다. WHILE구문이 실행되면 4번 옵션이 선택되기 전에는 계속해서 선택지가 쓰여져 있는 문자열이 출력됩니다. 사용자는 1, 2, 3, 4 중에서 하나를 선택하게 됩니다. 이 구문이 실행되면 아래와 같이 출력됩니다.
YOU CHOOSE 0
1. COKE
2. COFFEE
3. JUICE
4. EXIT
CHOOSE YOUR DRINK :
>? 1
YOU CHOOSE 1
WHILE문 내에서 바로 출력되도록 되어 있는 문구인 "YOU CHOOSE " 가 먼저 출력되고, 그 뒤를 이어 OPTIONS가 출력되면서 프롬프트가 >? 로 변경되어 사용자의 입력을 기다립니다. 1을 입력하면 입력된 값이 4가 아니기 때문에 그대로 출력 문구 "YOU CHOOSE 1" 이 보여집니다.
사실 위 코드로는 사용자가 1, 2, 3, 4 이외의 다른 값을 선택하더라도 그대로 입력값으로 들어오게 됩니다. 1, 2, 3, 4 이외의 다른 값이 들어오는 것을 막기 위해서는 WHILE문 내에 조건을 추가하면 됩니다.
>>>> OPTIONS = """
... 1. COKE
... 2. COFFEE
... 3. JUICE
... 4. EXIT
...
... CHOOSE YOUR DRINK : """
>>>> op = 0
>>>> while op != 4:
... if 0 > op or 4 < op:
... print('YOU CANNOT CHOOSE ', op)
... op = 0
... continue
... elif op > 0:
... print('YOU CHOOSE ', op)
... print(OPTIONS)
... op = int(input())
...
위 예시대로 출력하면 입력변수인 op이 0보다 작거나 4보다 클 경우에는 선택할 수 없다는 문구가 나오면서 op이 0으로 초기화 되고 다시 WHILE문이 실행되면서 아래의 OPTIONS를 출력하지 않습니다. 이처럼 WHILE문을 이용하면 사용자의 입력을 바탕으로 반복문을 수행할 수 있게 됩니다.
WHILE 반복문의 초기화
위 예제에서 잠깐 보였듯이, WHILE 반복문은 CONTINUE 를 이용하여 초기화할 수 있습니다. continue를 만나게 되면 반복문은 그 즉시 다음 반복으로 넘어가면서 하단의 명령문을 실행하지 않습니다. 하지만 반복문은 계속해서 실행되게 됩니다. WHILE 문 내에서 블럭 단위로 명령어를 실행하고자 한다면 continue를 이용하여 특정 조건에서는 특정 블럭이 실행되지 않도록 하는데 이용할 수 있습니다.
>>>> speed = 0
>>>> while speed < 80:
... speed = speed + 5
...
... if speed == 80:
... print('제한속도에 도달했습니다.')
... continue
... if speed > 60:
... print('속도를 줄여주세요.')
... continue
...
... print('안전한 속도입니다.')
...
안전한 속도입니다.
안전한 속도입니다.
안전한 속도입니다.
안전한 속도입니다.
안전한 속도입니다.
안전한 속도입니다.
안전한 속도입니다.
안전한 속도입니다.
안전한 속도입니다.
안전한 속도입니다.
안전한 속도입니다.
안전한 속도입니다.
속도를 줄여주세요.
속도를 줄여주세요.
속도를 줄여주세요.
제한속도에 도달했습니다.
위 예제에서 speed 가 80에 도달하면 바로 다음 루프로 돌면서 speed가 80이기에 조건인 speed < 80에 걸려서 루프가 종료됩니다. 80이 되기 전에는 60이 넘어가면서 80에 도달할때까지 '속도를 줄여주세요' 문구가 출력됩니다. 이렇게 CONTINUE 를 사용하면 특정 조건에서 하단의 실행문이 실행되지 않고 다음 반복문으로 넘어갈 수 있게 됩니다.
WHILE 반복문의 탈출
WHILE반복문은 조건이 만족될 때 종료되지만, 조건이 맞더라도 탈출해야하는 경우에는 FOR문과 마찬가지로 BREAK 를 이용하여 탈출할 수 있습니다. CONTINUE 와는 다르게 BREAK를 사용하면 현재 반복문을 그 즉시 종료합니다. 만약 위 CONTINUE 예문에서 CONTINUE를 사용하지 않고 BREAK를 사용한다면 아래와 같은 결과가 보여집니다.
>>>> speed = 0
>>>> while speed < 80:
... speed = speed + 5
...
... if speed == 80:
... print('제한속도에 도달했습니다.')
... continue
... if speed > 60:
... print('속도를 줄여주세요.')
... break
...
... print('안전한 속도입니다.')
...
안전한 속도입니다.
안전한 속도입니다.
안전한 속도입니다.
안전한 속도입니다.
안전한 속도입니다.
안전한 속도입니다.
안전한 속도입니다.
안전한 속도입니다.
안전한 속도입니다.
안전한 속도입니다.
안전한 속도입니다.
안전한 속도입니다.
속도를 줄여주세요.
속도가 증가하다가 60 키로가 넘자마자 '속도를 줄여주세요.'라는 문구를 출력하고 바로 반복문이 종료됩니다. 이처럼 BREAK를 사용하면 바로 반복문을 탈출할 수 있게 됩니다.
이 외에도 WHILE 반복문을 이용하면 의도적인 무한루프를 만들어서 더 짧은 코드로 실행될 수 있는 소스를 짤 수도 있습니다. 하지만 쉽게 무한루프를 만들 수 있는 만큼, 조건문을 작성하는데 더 주의를 기울여야 합니다. FOR 문에서는 시작값과 종료값이 지정되어 해당하는 범위만큼만 반복을 수행하지만 WHILE 문에서는 조건이 만족하는 한은 계속해서 반복이 이루어지기 때문입니다.
'프로그래밍 PROGRAMMING > 파이썬 PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬의 컨테이너(container) 객체란 (0) | 2022.03.03 |
---|---|
[PYTHON] 파이썬의 나누기와 몫과 나머지를 구하는 방법 (0) | 2022.01.05 |
[PYTHON] 파이썬의 기본 함수 문법 FUNCTION (0) | 2021.12.22 |
[PYTHON] FOR 반복문 기본 문법 (0) | 2021.12.10 |
[PYTHON] cx_Oracle에서 sid를 인식하지 못할 때 : ORA-12514 오류 (0) | 2021.11.30 |