본문 바로가기
데이터관련공부/Python

Python | while 반복문 정리

by 자유롭고 싶은 키털트 2023. 10. 13.

파이썬을 배우기 시작할 때 대표적으로 등장하는 while 반복문에 대해 포스팅 해보도록 하겠습니다. for 반복문과 같이 비교해 보면서 공부해 보는 것이 좋을 거 같습니다. 

 

while 반복문이란?

 

특정 조건에 따라 반복되는 반복문이며 조건이 참인 경우 무한 반복되고, 조건이 거짓이면 종료되는 특징이 있습니다. 

 

기본적인 syntax 는 하기와 같습니다. 

while 조건식:
    실행문

 

보통 while 문 시작 전 변수를 설정하고 변수를 이용해 조건식을 만든 후 실행문에선 변수를 이용해 사칙연산 또는 함수를 이용합니다. 

 

이 때, 조건식이 참(True) 일 경우 while 문은 계속 돌아가게 됩니다. 밑에 예시를 살펴보겠습니다. 

 

  • 조건은 x <= 20 입니다. 
  • 이 조건을 만족하면 (= x 가 20보다 작거나 같을 경우), 1) x 를 출력하고 2) x 에 2 를 곱한 값이 새로운 x 로 실행됩니다.
  • x 는 처음엔 2로 할당 했습니다. 이 경우, 20 보다 작으므로 조건식이 참 입니다. while 문이 실행됩니다.
  • 실행이 되어 2가 출력되고, 2가 곱해져서 x 는 4가 됩니다. 
  • 4가 된 x 는 여전히 20보다 작거나 같으므로 출력되고, 2가 곱해져서 x 는 다시 8 이 됩니다.
  • 이러한 식으로 반복되다 x 가 32가 되면 더 이상 출력이 되지 않습니다. 조건식이 False 가 되었기 때문입니다.
= 2
 
while x <= 20:
    
    print(x)
    x = x * 2
 
'''
2
4
8
16
'''
cs

 

 

 for 반복문과의 차이는?

 

그렇다면 for 반복문과 어떤 차이가 있을까요?

 

for 반복문의 반복횟수는 반복할 객체의 원소 개수만큼 한정되나 while 반복문조건식만 만족하면 무한 반복됩니다. while 반복문을 멈출수 있는 방법은 조건식의 거짓입니다. 

 

이제 예시를 살펴보겠습니다. 2, 4, 6, 8, 10 숫자를 출력 하고자 합니다. 하나는 for 문, 하나는 while 문으로 출력해 보겠습니다. 

  • 숫자 5개를 출력하므로, 5개의 원소가 출력되게 하되, 1~5 정수에서 2를 곱하였습니다. 
# for 문 
 
for n in range(16):
    print(n * 2)
 
print('')
 
'''
2
4
6
8
10
'''
cs
  • 결과가 10보다 작을 때는 무조건 실행되게 합니다. 이 때, 짝수만 출력되야 하므로 0에서 시작한 n 값을 2씩 더합니다. 
  • n = 8 일 때, 조건식 (n < 10) 을 통과한 n 은 2가 더해져 10이 되고, 그 10은 출력됩니다.
  • 그러나 이번엔 n = 10 이므로, 조건식 (n < 10) 을 만족하지 못하므로 False 가 되어 while 문이 종료됩니다. 
# while 문

= 0
 
while n < 10:
    n = n + 2
    print(n)
 
'''
2
4
6
8
10
'''
cs

 

반복문과 조건문 (while, if)

 

while 반복문을 실질적으로 사용하게 될 때 조건문(if~) 과 함께 많이 활용됩니다. 

 

반복을 시켜 놓고 조건을 만족하면 반복문을 빠져 나오게 하거나 특정 변수 또는 문자열을 출력하는 식으로 활용됩니다. 이 때 반복문에서 빠져 나오기 위해 break 를 많이 사용합니다. 

 

위에서 while 문을 사용하여  2, 4, 6, 8, 10 을 출력해 보았습니다.  이번엔 while 과 if 문을 함께 사용하여 동일한 결과를 출력해 보겠습니다. 

 

  • while True: 로 조건식을 아예 참(True) 로 설정하여 무한 반복을 먼저 시킵니다. while 반복문에서 많이 보이는 형태이니 알아둡시다. 
  • 조건식을 만족한 n 은 2가 더해지고 print(n) 으로 2는 출력됩니다. 
  • n 은 계속 2씩 더해져 출력됩니다. 
  • 이 때,  n이 10 보다 크거나 같아지면 break 를 걸어 while 반복문을 종료합니다. n = 8 이었을 때 2가 더해져 10이 되고 출력됩니다. 10이 된 n 은 if n>=10 조건을 충족시켜 break 가 걸리고 while 반복문을 빠져나오게 됩니다. 
# 위 while 문을 break 를 이용해서 실행해보자. 
 
= 0
 
while True:
    n = n + 2
    print(n)
    
    if n >= 10:
        break
 
'''
2
4
6
8
10
'''
cs

 

while 반복문 예시1 (구구단 출력)

 

예시 몇 가지를 더 들어보겠습니다. 정수 하나를 입력 받아서 해당 수의 구구단을 출력해 보겠습니다.

 

  • while True: 로 조건식을 아예 참(True) 로 설정 시켜 놓고 반복문을 계속 반복하게 합니다. 
  • 반복문은 계속 실행되면서 정수를 입력 받습니다. input() 은 사용자로부터 입력값을 받는 함수입니다. (하기 스크린샷 참고)
  • 사용자가 입력한 값은 number 라는 변수에 할당됩니다. 예를 들어 5를 입력하면 5 는 number 에 할당됩니다.
  • 구구단은 2단부터 9단까지 있으므로 이외의 정수를 입력할 경우 계속 input() 함수가 적용되게 하겠습니다.  if 문에 number 가 1보다 크고 10 보다 작아야 한다는 조건을 설정합니다. 이 경우, 해당 조건을 만족하지 않는 입력값을 입력하면 다시 입력값을 받는 box 가 나타나게 됩니다. 
  • 이 때, for 문을 돌려 1부터 9 까지의 숫자를 돌립니다. number 와 이 숫자들을 곱하고 결과를 result 에 할당합니다.
  • print 문을 사용하여 5 x 1 = 5 와 같은 결과를 출력합니다. (print 문 관련 본 블로그 다른 포스팅 참고하세요)
  • 입력값 (=number) 이 5 로 if 문을 충족하므로 break 가 작동하여 while 반복문을 빠져나오게 됩니다. 

 

input() 함수를 사용해서 코드를 실행하면 아래 스크린샷처럼 입력값을 받는 box 가 나타납니다. 

코드는 아래를 참고해 주세요. 

# 입력한 정수가 2 이상 9 이하 일 경우는 결과가 나오고 반복문을 빠져나오게 되나, 
# 그 외 정수를 입력할 경우 계속 입력 요청이 반복된다
 
while True:
    number = int(input('2 이상 9 까지의 정수를 입력해 주세요'))
                 
    if number > 1 and number < 10:
        
        for i in range(110):
            result = number * i
            print('{} x {} = {}'.format(number, i, result))
                  
        break
 
cs

 

5를 입력했습니다. 5단이 출력됩니다. 

 

2 ~ 9 범위 이외의 숫자를 입력하면 계속 입력을 받는 box 가 나타납니다. 

 

while 반복문 예시2 (소인수분해)

 

사용자로부터 특정 정수를 입력 받아 그 수를 소인수분해 해보겠습니다. 소인수분해자연수를 소인수 (=소수인 인수, 소수는 1과 자기 자신만으로 떨어지는 수) 의 곱으로 표현하는 것을 의미합니다.

 

예를 들어 21을 입력 받았다면 결과는 3 7 로 반환됩니다. 

만약 24 를 입력 받았다면 2 2 2 3 으로 반환됩니다. 

 

  • input() 함수를 이용하여 사용자로부터 특정 정수를 입력 받습니다. 이를 number 라는 변수에 할당하겠습니다. 
  • while 반복문을 활용하되 반복문 밖에 변수 x 를 만들어 2를 할당합니다. (소인수인 2부터 나눠 나가기 위함)
  • while 반복문의 조건식으로 number 가 x 보다 크거나 같은지를 판별합니다. 크거나 같다면 while 문은 계속 반복됩니다. 
  • 이 때, number 를 x 로 나눠서 떨어지면, 즉, 나머지가 0이면 x 를 출력합니다. 또, number 를 x 로 나눈 새로운 number 를 구합니다.
  • 새로운 number 는 다시 while 조건문으로 가서 x 보다 크거나 같은지 판별됩니다. 
  • number 가 x로 나눠 떨어지지 않는다면, x 는 1이 더해지게 됩니다. 
  • number 가 x 보다 작아질 때까지 이 과정이 반복됩니다. 
number = int(input('숫자를 입력해 주세요.:'))
 
= 2
 
while x <= number:
    if number % x == 0:
        print(x, end=" ")
        number /= x
    else:
        x += 1
cs

 

  1. 24 를 입력 받았다고 가정하겠습니다. 24 는 number 에 할당되었습니다. 
  2. number 24 는 2인 x 보다 크므로 조건식을 만족합니다. 그러므로 24를 2로 나눠봅니다. 
  3. 이 떄 나머지는 0 이므로 x 인 2가 출력되고, number 는 2인 x로 나뉘어 12 가 됩니다. 
  4. 이제 12가 된 number 는 다시 while 반복문 조건식에서 x보다 크거나 같은지 판별됩니다. 크거나 같으므로 while 반복문은 다시 반복됩니다. 
  5. x 는 여전히 2 입니다. 12인 number 는 다시 x 로 나뉘었을 때 나머지는 0 이므로 다시 x 값 2가 출력됩니다. 이 때, number 는 x로 나뉘어 6 이 됩니다. 
  6. 6은 x 보다 큽니다. 또, x 인 2로 나누었을 때 떨어지므로 2가 다시 출력되고, number 는 다시 2로 나눈 3이 됩니다. 
  7. 이제까지 2는 세 번 출력되었습니다.
  8. 이제 number 는 3입니다. 3은 여전히 x값이 2보다 크므로 다시 한 번 3 을 2로 나누게 됩니다. 이땐 떨어지지 않으므로 나머지가 0이 아니게 됩니다. 이 경우 else 구문이 적용되어 x 값은 1이 더해진 3이 됩니다.
  9. 이제 number 는 3, x 는 3입니다. number 는 x 보다 크거나 같으므로 while 조건문을 통과합니다. if 문에서 x 로 나누었을 때 떨어지므로 현재 x 인 3이 출력됩니다. number 는 다시 x로 나뉩니다. 3이 3으로 나뉘므로 이제 number 는 1이 됩니다.
  10. 1이 된 number 는 더이상 while 반복문의 조건식을 만족하지 않습니다. (3인 x보다 작음) while 반복문이 종료됩니다. 

 

24 를 입력 받았을 때 결과>>

반응형