> For the complete documentation index, see [llms.txt](https://jjlee.gitbook.io/entry-python/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://jjlee.gitbook.io/entry-python/basic_syntax/3.5-loop.md).

# 3.5 반복 (Loop)

우리는 블록코딩에서 코드의 흐름(flow)을 제어하는 목적(따라서, 엔트리의 블록 분류 상에서 ‘흐름’ 카테고리 안에 존재)의 블록 중 가장 기본이 되는 블록 중에 하나로 "**반복**"이라는 것을 무수히 사용해 본 경험이 있다. 반복수행해야 하는 코드덩어리를 어떻게 얼마만큼 반복해야 하는지에 따라 엔트리 '흐름' 카테고리 안에 반복과 관련된 블록을 보면 크게 세 가지 종류인데, "무한반복 / 지정한 횟수만큼 반복 / 어떤 조건을 만족하는 동안의 반복" 이다.

먼저, “어떤 조건을 만족하는 동안의 반복” 파이썬 문법으로 표현하면 다음과 같다.

<figure><img src="https://1991069597-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnDUP8xZ7pbezrK2wo5dX%2Fuploads%2Felwz5KzM7zM4lgtGFbEu%2Fimage.png?alt=media&amp;token=b94041f8-8d82-4442-bda2-d2072ffe2968" alt="" width="375"><figcaption></figcaption></figure>

while 이라는 영어접속사의 의미 자체도 "\~하는 동안" 뜻이고, 결국 while 문 안에 적힌 '*조건*'이 만족되는 동안하는 그 while 문 아래 기술된 내용을 계속 반복수행한다는 의미이다. 그 말을 이렇게 가정할 수 있는데 반복을 수행하는 동안 '*조건*'이 만족하는지 안하는지를 매번 확인한다는 것이고, 그 사이 조건이 변화해서 '*조건*'을 만족하지 않는 어떤 시점이 올 수 있고, 그 시점에 도달 했을 때는 반복을 그만두고, while문을 빠져나와 while 문 다음으로 이어진 문장의 코드가 순차적으로 수행되게 될 것이라는 의미이다.

우리는 일반적으로 반복을 수행하는 동안 '*조건*' 이 변화해 어느 시점에는 '*조건*'이 만족하지 않아 반복을 빠져나와야 할 것으로 기대하는데, 만약 반복을 의도적으로 무한히 하고 싶다면, 어떻게 해야할까? 그것은 '*조건*' 그 자체를 결코 빠져나올 수 없는 조건으로 의도적으로 생생해 주면 되는데 그렇다 '*조건*'을 강제로 항상 참(True)이 되도록 강제할당하면 될 것이다. 이를 파이썬 텍스트코딩 문법으로 표현하면 이렇게 된다.

<figure><img src="https://1991069597-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnDUP8xZ7pbezrK2wo5dX%2Fuploads%2Fk90YiSIlFygy0QflYrTL%2Fimage.png?alt=media&amp;token=1b9f32a8-4d9f-4d71-8715-4985f9942562" alt="" width="375"><figcaption></figcaption></figure>

방금 배운 테크닉을 이용해 이전 장에서 만들어 오고 있는 계산기 프로그램을 더욱더 발전시켜 사용자의 사용성을 개선시켜 나가보자. 사용자 입장에서는 계산기의 계산을 딱 한번의 단회성으로 끝내지 않고, 연이어 게속하려면 현재로서는 프로그램(또는 앱)을 재실행시키는 것 외에는 방법이 없다. 이는 사용성에 제약이 큰 것으로 사용자 본인이 원하는 만큼 계산을 계속하고, 더 이상 필요가 없을 때 프로그램을 종료할 수 있게 해주는 것이 필요하다. 이러한 사용자 요구사항에 맞춰 프로그램을 개선하기 위해 우리는 우리의 코드에 반복문을 추가할 필요가 있다.

{% tabs %}
{% tab title="실행결과" %}

<figure><img src="https://1991069597-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnDUP8xZ7pbezrK2wo5dX%2Fuploads%2FO6cjwNrV7pWkMpIquntK%2Fimage.png?alt=media&amp;token=4c0a5780-769a-4466-9890-3c7546b2edb0" alt="" width="308"><figcaption></figcaption></figure>
{% endtab %}

{% tab title="블록코딩" %}

<figure><img src="https://1991069597-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnDUP8xZ7pbezrK2wo5dX%2Fuploads%2Fgit-blob-16792f804c2d8be0ead85c125c6b03950f309567%2F%EC%97%94%ED%8A%B8%EB%A6%AC%20%EB%B8%94%EB%A1%9D.png?alt=media" alt=""><figcaption></figcaption></figure>
{% endtab %}

{% tab title="엔트리-파이썬" %}
{% code lineNumbers="true" %}

```python
# 엔트리봇 오브젝트의 파이선 코드

import Entry

first = 0
second = 0

def when_start():
    Entry.print("당신이 입력한 두 수의 덧셈 또는 뺄셈을 할 수 있는 계산기 입니다")
    Entry.wait_for_sec(2)
	
    while True:
        Entry.input("첫 번째 숫자를 입력하세요.")
        first = Entry.answer()
        Entry.input("두 번째 숫자를 입력하세요.")
        second = Entry.answer()
        
        Entry.input("덧셈계산을 원하시면 '+'를 입력하고, 뺄셈계산을 원하시면 '-'를 입력하세요. 앱을 종료하고 싶으시면 'x'를 입력하세요.")
        if Entry.answer() == "x":
    	    Entry.stop_code("all")
        if Entry.answer() == "+":
    	    Entry.print("입력된 두 수의 합은 " + (first + second) + " 입니다")				
        if Entry.answer() == "-":
    	    Entry.print("입력된 두 수의 차는 " + (first - second) + " 입니다")
        Entry.wait_for_sec(2)
```

{% endcode %}
{% endtab %}
{% endtabs %}

이제 작성한 코드를 이해해보자. 개선된 계산기 프로그램(또는 앱)에서 무한반복해야 할 코드들은 while True: 다음 라인부터에 위치하여 전체적으로 안쪽으로 들여쓰기해 적은 것을 확인할 수 있다. 사용자가 우리의 계산기앱을 종료하고 싶을 때는 사용자 안내문구에서 요구된 것처럼 'x'라는 값을 입력했을 때이고, 이 부분의 처리는 코드 19-20라인에서 만약 사용자로부터 입력된 값이 'x'일 경우에 Entry 라이브러리 안에 있는 앱 종료함수인 stop\_code함수를 호출하되 앱상의 모든 코드를 종료하기 위해 "all"이라는 아규먼트(인자)값을 넘겨서 호출했음을 알 수 있다.
