Python 기초

while 문

while 문은 어떤 조건을 정해놓고 반복을 하는 구조입니다.

예를 들어 자동차 경주에서 반드시 서킷을 10번 돌아야 한다면 반복하는 조건은 "횟수가 10번 미만인가요?" 가 될 것입니다.

이것을 순서도로 그리면 아래의 그림과 같습니다.

 

반복을 결정하는 조건이 있고 조건이 참이면 반복, 그렇지 않으면 반복 루프를 빠져나가게 됩니다.

 

while 문의 전체적인 구조는 아래와 같습니다. while 문의 ( ... ) 안에 반복의 조건을 기술합니다.

조건이 만족되는 동안, 블록 안의 문장은 반복 실행됩니다.

while 조건 : # 반복을 하는 조건입니다. 조건이 참이면 반복을 계속합니다.
    반복 문장
    반복 문장

 

예를 들어 "환영합니다." 를 화면에 5번 출력하는 예제를 while 문을 이용하여 작성하면 다음과 같습니다.

i = 0;

while i < 5:
	print("환영합니다.")
	i += 1

print("반복이 종료되었습니다.")

 

<실행 결과>

환영합니다.
환영합니다.
환영합니다.
환영합니다.
환영합니다.
반복이 종료되었습니다.

 

위의 코드에서 반복 조건에 해당하는 것은 수식 "i < 5" 입니다.

위의 코드가 의미하는 것은 i가 5보다 작은 동안에는 블록 안에 있는 2개의 문장을 실행하라는 것입니다. i의 초기값은 0이고 i는 한번 반복될 때마다 1씩 증가됩니다.

따라서 i는 0 -> 1 -> 2 -> 3 -> 4 와 같이 증가하게 되고 i가 5가 되면 수식 "i < 5"는 거짓이 되어 반복이 종료됩니다.

반복 조건은 while 문에 처음으로 진입할 때 검사되고 한 번씩 반복할 때마다 반복을 계속할 것인지를 결정하기 위하여 검사됩니다.

 

여기서 주의하여야 하는 사항이 있습니다. 만약 우리가 i를 증가시키지 앟는다면 반복 조건이 항상 참이 되어 무한히 반복하게 됩니다.

i = 0

while i < 5: # 반복 조건이 항상 참이기 때문에 블록이 무한히 반복되며 이것을 무한 반복이라고 합니다.
	print("환영합니다.");

 

<실행 결과>

환영합니다.
환영합니다.
환영합니다.
환영합니다.
환영합니다.
환영합니다.
환영합니다.
...

 

위의 코드에서 while 문의 몸체에는 변수 i의 값을 증가시키는 i++; 문장이 없기 때문에 while 문의 조건은 몇 번을 반복하더라고 거짓이 되지 않습니다.

이것을 무한 반복(infinite loop)이라고 하며 이러한 결과가 나오지 않도록 주의하여야 합니다.

 

도전 과제

1. while문을 이용하여 0에서 시작하여 사용자가 입력한 값까지 출력하는 프로그램을 작성하여 봅시다.

예를 들어 사용자가 20을 입력하면 0 -> 1 -> 2 ... -> 19 까지 출력합니다.

 

<실행 결과>

  • 정수 15를 입력했을 때
정수 입력 : 15
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 

 


2. 사용자로부터 정수를 입력받은 후 1부터 입력받은 정수까지의 합계를 계산하는 프로그램을 작성해봅시다.

공식으로도 계산할 수 있으나 while문을 이용합시다.

 

<실행 결과>

  • 정수 100을 입력했을 때
정수 입력 : 100
합계 :  5050

 


3. 팩토리얼을 계산하는 프로그램을 작성하여 봅시다. 팩토리얼 n!은 1부터 n까지의 정수를 모두 곱한 것을 의미합니다.

즉, n! = 1 X 2 X 3 X ...... X (n-1) X n입니다. 사용자로부터 정수 n를 입력받은 후 while문을 이용하여 n!을 계산하는 프로그램을 작성하여 봅시다.

 

<실행 결과>

정수를 입력하세요 : 10
10!은 3628800 입니다.

 


4. 봉민이는 나중에 태어날 아이의 조기 교육을 위해 구구단 프로그램을 만들고자 합니다.

구구단의 단수를 사용자로부터 입력받은 후 그 수에 맞는 구구단을 출력하여 봅시다.

 

<실행 결과>

  • 정수 3을 입력했을 때
정수 입력 : 3

3 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
3 * 6 = 18
3 * 7 = 21
3 * 8 = 24
3 * 9 = 27

 


5. 사용자로부터 정수를 입력받은 후 정수 안의 각 자리수의 합을 계산하는 프로그램을 작성해봅시다.

예를 들어 1234라면 (1 + 2 + 3 + 4)를 계산합니다.

 

<실행 결과>

  • 1234를 입력했을 때
정수 입력 : 1234
자리수의 합은 10입니다.

 


6. 1부터 100 사이의 모든 3의 배수의 합을 계산하여 출력하는 프로그램을 반복 구조를 사용하여 작성해봅시다.

 

<실행 결과>

1부터 100 사이의 모든 3의 배수의 합은 1683 입니다.

 


7. while 루프를 이용하여 최대 공약수를 구해봅시다. 최대 공약수는 공통 약수 중 가장 큰 수를 의미합니다.

예를 들어 8과 12의 최대 공약수는 4가 됩니다. 최대 공약수를 구하는 알고리즘은 아래와 같습니다.

 

  1. 두 수 가운데 큰 수를 x, 작은 수를 y라고 합니다.
  2. y가 0이면 최대 공약수는 x와 같고 알고리즘을 종료합니다.
  3. x % y 의 연산값을 r에 넣습니다.
  4. x에 y 값을 넣습니다.
  5. y에 r 값을 넣습니다.
  6. 단계 2로 돌아갑니다.

 

위의 알고리즘을 while 루프를 이용하여 프로그램으로 변환하여 봅시다.

y가 0이 아니면 단계 3, 4, 5를 반복하면 됩니다.

 

<실행 결과>

  • 큰 수 12, 작은 수 8 을 입력했을 때
정수를 입력하세요 (큰 수) : 12
정수를 입력하세요 (작은 수) : 8
최대 공약수는 4입니다.