본문 바로가기

Data analysis story

[Python] 파이썬의 제어문- while 반복문(while을 사용한 프로그램 예시들, 중첩 루프, 무한 루프)

안녕하세요! 오늘은 파이썬 제어 구문에 대한 마지막 포스팅이네요!!

이번 포스팅에서는 ‘While 반복문’에 대해서 차근차근 배워보도록 합시다!

 

반복문에는 2가지 구조가 있습니다.

지난 포스팅에서 다뤘던 for문과

이번 포스팅에서 다룰 while, 이렇게 두가지요!

 

for문에서는 range 함수 또는 리스트를 활용해서 반복할 횟수를 미리 정해주었죠.

(for문이 헷갈린다면 저번 포스팅을 참고해주세요!)

 

이에 비해 while문은 반복할 횟수를 정해주고 그 횟수만큼 반복하는 것이 아니라

어떤 조건을 만족할 때까지 반복을 계속하는 반복문입니다.

 

그림을 본다면 이해가 좀 더 쉬우실거에요!

이렇게 10번 이하라는 조건을 만족하면 while문 안의 문장들이 반복적으로 실행되고

조건을 만족하지 못하게 되는 순간 이 while문을 빠져나오는 것입니다.

 

 

그러면 이제 while문을 파이썬에서 어떤 문법을 통해 사용하는지 그림을 통해 배워보도록 하겠습니다.

콜론 기호와 들여쓰기는 앞서 if문과 for문에서 배워서 다들 아시죠?

조건을 만족하는 동안 while문 안의 문장들을 계속 반복한다는 말입니다!

 

그렇다면 while 반복문의 간단한 예제를 코드로 구현해보도록 하겠습니다.

실행시켜보기 전에 한번 생각해봅시다!

 

i5가 넘지 않는다면 환영합니다라는 문장이 계속 출력되겠죠?

i=0 while문을 사용하기 전에 i의 값을 초기화해주는 작업이라고 생각하시면 쉽습니다.

만약 i=i+1 이라는 문장이 없다면

이 코드는 무한 루프를 돌 것입니다. i0이라고 설정했으니 계속 5보다 작잖아요?

i=i+1이라는 문장을 추가해주면서 while문을 빠져나갈 수 있는 방안을 마련해주는 것이라고 볼 수 있어요!

i5가 되는 순간 이 while문을 빠져나가는 것입니다.

그리고 반복이 종료되었습니다.”라는 문장은 while문장 안에 있는 코드가 아닙니다.

왜 그렇죠? 들여쓰기가 같은 크기만큼 되어 있지 않기 때문이죠! (포스팅 if 조건문 편 참고)

그렇기 때문에 반복이 종료되었습니다.”라는 문장은 while문의 조건을 충족할 때 계속 반복되어 출력되는 것이 아니라 while문이 끝난 후 한 번만 출력되는 것입니다.

 

결과를 볼게요!

 

앞서 예상한 대로 결과가 나왔네요!

 

이번에는 또 다른 예제를 보면서 while문을 익혀보아요!

 

"0,1,2,…,9까지를 차례대로 화면에 출력하는 프로그램을 작성해봅시다."

 

코드를 어떻게 구현하면 좋을까요?

먼저 변수 i의 값을 0으로 초기화하고,

i를 출력하고 1씩 증가시킨 후,

i를 출력하면 되지 않을까요? i10이 넘지 않을 때만요!

그리고 i10이 되면 while문을 나오면 될 것 같습니다!

 

이 장황한 문장을 while을 사용해 단 세 줄로 구현해보도록 하죠!

이렇게만 짜도 되지만 우리 저번에 for문에 관해 배우면서 end=” “ 인수에 대해 배웠었죠?

화면 한 줄에 차례대로 출력해주기 위해 이 인수를 추가해줄게요!

그러면 이렇게

완벽하게 결과가 나오게 됩니다!

 

"자, 이제는 조금 더 응용해서 while반복문을 사용하여 합계를 구하는 프로그램을 만들어봅시다!"

 

우리 저번 포스팅 for문에서도 이 합계를 구하는 프로그램을 만들었었는데요!

while문으로는 어떻게 만들까요?

(1+2+3+…+9+10)의 값을 계산하는 프로그램을 작성해봅시다.

저는 코드를

이렇게 짜보았는데요!

 

처음 접하게 되면 굉장히 어려울 수 있습니다!

그런데 앞서 든 예시들에서 sum만 추가했다고 생각하면 돼요!
while
문을 시작하기 앞서 sum0을 할당해줌으로써 초기화하고

sum에다가 하나씩 커져가는 i를 계속해서 더해주는 것이죠!
1
부터 더하니까 i의 초기값은 1로 잡아야겠죠?

 

"그러면 for문에서 했던 것과 마찬가지로 팩토리얼도 계산할 수 있겠네요!"

10! 을 계산하는 프로그램을 while문을 사용하여 만들어봅시다.

앞 예제들을 잘 이해했다면 이 예제는 쉬울 것입니다!

이런 결과가 나오네요!

 

"다음 만들어볼 프로그램은 구구단입니다."

우리 구구단을 짜는 프로그램도 저번 for문을 배울 때 알아보았는데요

이번에는 3단을 while문을 사용해서 만들어보도록 할게요!

 

이렇게 3단의 구구단 결과가 나옵니다!

"이제 조금 더 응용하여 배수의 합을 출력하는 프로그램을 만들어볼까요?"

1부터 100 사이의 모든 3의 배수의 합을 계산하여 출력하는 프로그램을 while반복문을 사용하여 만들어봅시다!

이 프로그램을 실행하려면 while문과 우리가 앞에서 배운 if문을 동시에 활용해야 하는데요!

먼저 많은 고민 후 저의 코드를 보시길 바랄게요!

 

while문안에 해당되는 명령문들은 그 명령문들끼리 같은 크기만큼의 들여쓰기를 하고

if문안에 해당되는 명령문들은 그 명령문들끼리 같은 크기만큼의 들여쓰기를 해야 해요!

 

결과는

이렇게 나옵니다!

 

"이번에는 정수를 받았을 대 정수 안의 각 자리수의 합을 계산하는 프로그램을 작성해볼까요?"

 

예를 들어 1234라면 1+2+3+4를 계산하는 것입니다.

이 문제는 조금 어려울 수 있는데요

힌트를 드리자면 맨 뒷자리부터 더할 수 있다는 것입니다.

12344,3,2,1 이 순으로 더할 수 있는데요

4,3,2,1로 나누기 위해서는 나머지를 구하는 연산자와 몫을 구하는 연선자를 잘 이용하면 된답니다.

 

저는 이렇게 코드를 입력해보았어요!

123410으로 나누면 4가 나오고 또 123410으로 나눈 몫을 또 10으로 나누면 3이 나오고 계속 반복이죠?

결과를 볼까요?

원하는 대로 나오네요!

%, // 연산자의 쓰임은 파이썬의 연산자에 대한 포스팅에서도 말씀드렸듯이 정말 다양한 곳에 자주 쓰이네요!

 

이제는 중첩 루프에 대해서 알아보도록 해요!

사실 for문 포스팅에서 1단부터 9단까지의 구구단 프로그램을 작성할 때 살짝 언급했었는데요!

반복문은 중첩하여 사용할 수 있습니다.

 

먼저 이해하기 쉽게 그림을 가져와봤습니다!

그림을 보면 반복 구조 안에 또 반복구조가 있는 것을 쉽게 이해할 수 있죠??

 

중첩 루프를 이용하여 한 번 예제 프로그램을 작성해볼까요??

중첩 for문을 이용하여 빵, 고기, 야채, 소스를 리스트를 뽑아주는 프로그램을 작성해봅시다!

이런 식으로 중첩 루프를 써주면

모든 조합의 리스트가 출력되게 됩니다! 여러분들도 해보세요!!!

 

마지막으로 무한 루프에 대해서 설명하겠습니다.

아까 제가 처음에 while문을 설명하면서

라는 코드의 i=i+1이 무한 반복을 피하게 하는 장치라고 말했었습니다.

 

무한 루프는 프로그램이 무한히 반복되는 일을 말합니다.

프로그램이 빠져나올 수 없어서 문제가 되는 것이죠!

예를 들어 while 루프의 조건에 true가 온다면,

조건이 항상 참이므로 while문 안의 문장이 계속 반복될 것입니다.

break는 어떤 조건이 성립하면 이런 무한 루프를 강제적으로 빠져 나올 수 있도록 합니다.

예를 들어볼게요!

결과는!!!

이런 식으로 나올 수 있으니 여러분도 한 번 직접 해보세요!

blue를 입력하게 되면 while문을 강제로 빠져나오게 됩니다!!

 

이렇게 해서 파이썬의 제어구문, if 조건문, for 반복문, while 반복문까지 알아보았습니다!!

제어문은 파이썬 구조의 틀이라고도 할 수 있으므로

기본을 잘 다져 두기를 바랍니다!!

 

우리 모두 열공합시다!