본문 바로가기
Python

[Python] while statement, break and continue

by ds31x 2023. 7. 28.

Python의 경우, loop structure로 while statement와 for statement를 제공한다.


Contol Flow와 Control Structure에 대한 개념은 다음 URL을 참고 :

http://ds31x.blogspot.com/2023/07/basic-control-structures-and-control.html


참고로 do-while statement 는 while statement 만으로도 구현가능하기 때문에 Python에선 지원하지 않음.

 

for statement가 iterator object와 함께 사용되는 것과 달리,

while statement는 if statement와 매우 유사한 구조로 repetition을 가능하게 함.


일반적인 구조.

while condition:
    while_block
  • while statement는 while keyword로 시작하고, 뒤에 놓이는 condition expression이 True로 reduction되는 경우엔 while_block이 수행된다.
  • while_block이 수행되고 나서 다시 condition expression이 evaluation되고 그 결괏값이 True이면 다시 while_block이 수행된다.
  • 이는 condition expression이 계속 True인 경우 계속해서 반복이 이루어짐.
  • 만약 condition expression이 False인 경우엔 while_block이 수행되지 않고 while statement가 끝나게 된다.

위의 설명에서 알 수 있듯이, condition expression이 True가 유지되는 한 계속 반복이 이루어지나,

처음부터 False인 경우엔 아예 수행이 안된다.


예제0

다음은 while statement의 간단한 예이다.
4번 반복이 되어 1부터 4까지 integer가 출력된다.

a = 1

while a <5:
  print(a)
  a += 1
  • while statement의 code block에서 마지막 line에 있는 augmented assignment "a += 1" 이 주석 처리할 경우, 무한루프에 빠짐. 

break를 이용하여 다른 언어의 do-while 구현하기.

다른 프로그래밍 언어에서 제공하는 do-while과 같이 맨 처음은 무조건 수행되고 이후 반복할지를 condition exression의 결괏값으로 정하려면, break keyword를 이용해야 한다.

 

break가 수행될 경우, 현재의 block에서 탈출하여 한단계 위의 block으로 이동한다. while statement의 code block에서 break가 호출되면 while statement의 code block에서 나와서 다음 line의 statement를 수행하게 되기 때문에 실제적으로 while statement가 종료되게 된다.

breakif statement와 while statement를 다음과 같이 조합하면 do-while 과 같이 동작가능해진다.

while True: # condition expression이 True literal이 되면, 무한루프임.
    while_block_start
    ...
    if not condition:
        break
    while_block_end
  • condition expression이 while code block의 끝에 놓인 if statement에 위치함.
  • 만약 condition이 처음부터 False였다고 해도 while_block이 한번은 수행되고, 끝의 if statement의 code block에 있는 break statement에 의해 while statement가 종료되게 된다.
  • condition expression이 True로 reduction된다면, while statement의 조건에 대한 evaluation이 이루어지고, True literal로 고정된 상태이므로 다시 while statement의 code block이 수행되게 된다.

예제1

다음은 break를 사용한 while statement의 예이다.

매 반복마다 종료여부를 물어보고 y가 입력되면 종료된다.

cnt = 0

while True:
  cnt += 1
  print('iteration #:',cnt)

  ans = input('Do you want ot quit?[y/n]: ').lower()
  if ans == 'y':
    break

print('done!')

continue statement

break와 함께 loop를 제어하는 statement가 continue이다.

 

수행될 때 즉시 자신을 둘러 싸고 있는 repetition loop를 종료시키는 break statement와 달리

continue statement는 repetition loop를 종료시키지는 않지만 수행되면 현재 block의 나머지 부분을 수행하지 않고 repetition의 다음 반복을 수행하게 된다.

 

while statement의 예를 든다면, continue가 호출될 경우

해당 line 아래에 위치한 while statement의 code들의 수행을 생략하고 while statement의 첫번째 line의 condition expression을 evaluation하게 된다.


예제2

다음은 continue의 활용 예제로, string s에서 alphabet이 몇개인지를 count하는 while statement임.

s = 'a1b2b3c3'

cnt = 0
idx = 0

while True:
  if idx >= len(s):
    break
  if not s[idx].isalpha():
    idx += 1
    continue
  idx +=1
  cnt += 1
print ('# of alphabets:', cnt)
  • string은 immutable sequence type이며 iterable임을 잊지 말것.

더 읽어보면 좋은 자료

https://gist.github.com/dsaint31x/5297428fc4b701393d94f4348d89a0f9

 

py_while_break_continue.ipynb

py_while_break_continue.ipynb. GitHub Gist: instantly share code, notes, and snippets.

gist.github.com