💻프로그래밍/python

[파이썬 독학] 9. while 반복문

빅데희터 2021. 1. 22. 20:30
반응형

1. 반복문이란?

반복문은 어떠한 조건하에 코드들이 반복적으로 실행되는 것이다. 예를 들어 우리가 1부터 10까지 모두 더해야 하는 상황이 있다면 우선 숫자들을 하나하나 직접 계산할 수도 있고, 계산기를 사용하는 등의 방법을 선택할 수 있다. 하지만 10이 아니라 100으로 늘어난다면? 계산하기 너무 힘들 것이다. 이러한 경우같이 어떠한 조건상에서 반복되는 것들이 있을 때 반복문을 사용하여 그 일을 간단하게 만들 수 있다. 즉, 반복문을 사용하면 일정하게 반복되는 일들을 자동적으로 한 번에 처리할 수 있기 때문에 불필요하게 작업해야 하는 수고를 덜어준다. 반복문에는 크게 while과 for가 있는데, 이번 시간에는 while문을 먼저 정리해보겠다.

 

 

 

 

2. while문의 기본구조

while문은 반복되는 정확한 횟수를 정하기보다는 특정 조건을 만족하는 동안 해당 코드들을 반복시키고자 할 때 사용된다. while문의 기본구조를 살펴보자.

 

 

while문은 어떤 조건이 참/거짓인지에 따라서 수행하는 것이 나뉜다. 이를 단계적으로 나누어 살펴보자면 , 1) while 조건문 이참인지 거짓인지 판단한다. 2) 조건문이 참이면 그 아래에 있는 문장들이 수행된다. 3) 거짓이라면 그냥 지나간다. 4) 다시 while문의 첫 문장으로 와서 참/거짓을 판단한다. 또한 해당 문장은 조건문이 참일 경우에 한해서 계속 반복된다.

저번 시간에 정리한 if문과 마찬가지로 while문 또한 조건문의 끝에는 콜론(:) 그리고, 반복문의 수행 부분은 들여 쓰기를 통해 구분해주어야 한다. 또한 수행할 명령은 여러 가지를 한 번에 사용이 가능하다.

 

 

 

위의 예제를 보면 우선 num = 0으로 선언했다. while num <=10이라는것은 num이 0부터 시작해서 10보다 작거나 같아질 때까지 while문을 반복하겠다는 의미이다. 그 while문의 조건에 해당될 때 (True일 때) 어떤 것이 수행되는지 보자면 print(num) , num = num +1 즉, num값을 각각 출력하고, 그 후 num을 1씩 증가시킨다는 의미이다. 따라서 위의 코드를 실행시켜보면, 0부터 시작해서 10까지 각각의 값들이 출력되었음을 알 수 있다.

 

 

 

 

3. while문으로 리스트에 있는 요소 출력하기

 

이번에는 while문을 이용하여 리스트에 있는 값들을 차례로 출력해보자. 변수 a에 하나의 리스트를 선언하고, i를 인덱스로 사용하기 위해 우선 0으로 선언해준다. 그 후, i < len(a)로 i가 리스트의 길이(요소의 개수) 직전까지만 반복하도록 만든다. 즉, 리스트의 인덱스는 0부터 시작하고, 마지막 인덱스는 리스트의 길이보다 1이 작으므로 <(미만)을 사용한다. 만약 i <= len(a)처럼 <=(이하)를 사용하면 리스트의 범위를 벗어나게 되므로 주의한다. while문의 조건을 만족하는 경우 a의 리스트의 [인덱스] 값을 하나씩 출력하고, 그 후 i의 값을 1 증가시켜 다음 인덱스의 값을 출력하도록 만들어주면 된다.

 

 

 

 

4. while문 강제로 빠져나가기 :  break 

whlie문은 조건문이 참인 조건 하에 계속해서 while문 안의 내용을 반복적으로 수행한다. 하지만 강제로 while문을 빠져나가고 싶다면 어떻게 해야 할까? 위의 코드를 보면 선착순 10명에게 책을 무료로 제공하려 한다. 하지만 선착순 10명에게 모두 책을 제공했고 이제 더 이상 책이 남아있지 않다면 그것을 사람들에게 알리고 중지해야 한다. 이럴 때 사용하는 것이 'break' 이다. 위의 예시를 보면 people이 20으로 고정되어 있다. 즉 0이 아니기 때문에 항상 참(True)이 된다. 따라서 무한히 반복되는 무한루프를 돌게 된다. (왜 항상 참인지 잘 모르겠다면 클릭하고 3번 내용을 확인해보자) 그리고 while문의 내용을 한번 수행할 때마다 book =  book -1 에 의해서 book의 개수가 1씩 줄어든다. 만약 10명의 사람이 선착순으로 모든 책을 가져갔을때 book == 0의 조건이 참이 되므로, if문에 종속된 문장인 '끝났습니다. 다음 기회에!'라는 문장이 출력되고 break에 의해 while문을 빠져나가게 된다. 위의 예시처럼, break는 while문을 수행하다가 특정 조건이 만족된 경우에 while문 자체를 빠져나오고 싶을 때 사용한다.

 

 

 

 

5. while문의 맨 처음으로 돌아가기 :  continue 

break가 while반복문을 완전히 빠져나올 수 있게 하는 것이었다면, continue 반복문을 계속 돌다가 특정 조건을 만족할 때 아래 코드들을 무시하고 바로 반복문의 맨 위로 올라가게 만들어주는 것이다. (즉, 중간에서 맨 처음으로 올라가는 것)

 

위의 예시에서, 0부터 10 미만의 숫자 중에서 홀수의 값만 출력하고 싶다. 방법은 여러 가지가 있겠지만 while문을 이용해보자면 a가 홀수인 경우에는 그것을 출력하고, 짝수인 경우에는 출력하지 않고 그냥 지나는 방법을 이용하면 된다. 위의 코드를 작성해서 출력해보면 홀수의 값만 출력된 것을 알 수 있다. 여기서 주의할 점은 a = a + 1처럼 값을 변경해주는 코드가 continue보다 위에 위치해야 한다는 점이다. 만약 이 문장이 continue 아래에 위치하게 되면 무한루프에 빠지게 된다.

 

 

 

 

6. 무한루프

지금까지 위에서 살펴본 while의 특성으로 인해 무한루프를 만들 수 있다. 무한루프를 만드는 방법은 while이 True의 값을 갖게 설정해주면 된다.

위의 코드를 보면 while 1 : 로, while의 값을 True로 설정한 뒤(이때 왜 True인지 모르겠다면 클릭하여 3번 내용 다시 확인할 것), print ('Hello world')를 했을 때 Hello world가 끝없이 출력되는 것을 알 수 있다. 이때 무한루프를 멈추고 싶다면 ctrl + c를 눌러주면 된다.

반응형