목차

이전 항목

21. 요약

다음 항목

23. 단계적 정제: 1부

현재 문서

주의사항

해당 문서는 중요 변경 작업 중에 있습니다. 일부 문서에 텍스트가 빠져있거나, 불어로 플레이스홀더(placeholder) 자리차지만 되어 있을 수 있습니다.

22. while

어떤 조건이 만족될 때까지 명령문을 반복하기 원할 때, 파이썬에서 좀더 간단한 방식으로 프로그램을 작성할 수 있는 새로운 키워드(while)를 사용할 수 있다. 예를 들어, 리보그가 벽에 도달할 때까지 계속 움직이게 한다고 가정하자. 이전에, 다음과 같이 코드를 작성해서 수행했다:

def move_until_wall():
    if front_is_clear():
        move()

repeat 42:
    move_until_wall()

42 횟수가 벽에 도달할 충분한 반복 횟수가 되길 희망했다. while 을 사용해서는 다음과 같이 작성할 수 있다:

while front_is_clear():
    move()

이것이다! 충분할만큼 매우 큰 횟수를 작업을 수행하도록 더이상 추측하거나 물어볼 필요가 없다.

상기 간단한 프로그램에 대한 순서도가 다음에 나와 있다:

../_images/while.jpg

22.1. while 관해서 생각하는 방법

다음 코드가 있다고 가정하자:

while condition():
    do_1()
    do_2()
    do_3()

이것을 다음에 사응하는 것으로 간주할 수 있다:

if condition():
    do_1()
    do_2()
    do_3()
if condition():
    do_1()
    do_2()
    do_3()
if condition():
    do_1()
    do_2()
    do_3()
if condition():
    do_1()
    do_2()
    do_3()
....

상기 코드는 조건이 참(True) 으로 만족되는 동안 코드 덩어리가 반복됨을 알 수 있다. 그래서, 조건이 항상 참(True) 이면 무슨 일이 생길까요? 코드 덩어리는 영원히 반복되고, 프로그램은 절대로 끝나지 않아요.

이것은 좋지 않아요.

반복되는 코드 덩어리 기술을 사용하는 대신에, 프로그래머는 이것을 루프(loop) 로 기술한다: 즉, 코드 덩어리 내부 첫번째 명령어 (do_1())가 시작되고, 마지막 명령어 (do_3())에 도달할 때까지 계속된다. 그리고 나면, 루프 백(loop back) 즉, 다시 되돌아 와서 코드 덩어리 시작 바로 앞에 시험을 하고 조건이 충족되었는지 살펴본다; 만약 충족되지 않았다면, 사이클 주기를 한번더 반복한다. 만약 조건이 절대로 거짓(False) 으로 되지 않으면, 반복을 계속하고 무한 루프(infinite loop) 에 빠지게 된다.

결론: 조건이 어느 지점에서 거짓(False) 이 되는지 확실히 한다.

22.2. 장애물로 되돌아 와서!

여러분 차례!

Hurdles 1, Hurdles 2, Hurdles 3 세상으로 되돌아 가서, repeat 을 사용하지 말고, while 문을 사용해서 3가지 세상 모두에 동작하는 단일 프로그램을 작성한다.

힌트

작성한 프로그램은 다음과 같을 것이다:

def jump_over_hurdle():
    # 적절한 정의

def run_or_jump ():
    # 적절한 정의

while not at_goal():
    run_or_jump()

이것이다! 더이상 임의 반복은 없다! 이제부터, 해당되는 함수를 주어진 횟수만 정확하게 알고 있을 때만, repeat 함수를 사용해야 된다.