본문 바로가기
프로그래밍/파이썬 문법

호기심 파이썬(반복문 : while문)

by 인성패밀리 2022. 5. 9.
반응형

파이썬은 특정 범위를 반복 시킬 수 있는 for 문과 조건에 따라 반복 시킬 수 있는 while 반복문이 있습니다.

 

이 while 반복문의 특징은 조건이 참이면 반복을 실행하고 조건이 거짓이 되면 반복문을 중단하는 특징이 있습니다. 또한 모든 for문은 while 반복문으로 변환이 가능하지만 while 반복문은 for문으로 변환 될 수도 아닐 수도 있습니다. 

 

이는 for문의 특징 때문인데 특정 범위만을 반복 시킬때만 사용가능하기 때문입니다.

 

while 반복문의 구조를 살펴보겠습니다.

 

while (조건식):  --- ⓐ

    반복시킬 문장  --- ⓑ

 

굉장히 심플하게 되어있습니다.

반복의 순서는

1. ⓐ에서 조건식의 참 거짓 여부

2. ⓑ ⓐ조건이 참이면 반복시킬 문장 실행

3. 다시 ⓐ조건 검사

4. ⓑ ⓐ조건이 참이면 반복시킬 문장 실행

... 

...

같은 작업을 조건이 거짓이 될 때까지 반복합니다.

 

조건식의 결과 값은 항상 True가 아니면 False입니다. 이를 이용하여 조건식 부분에 True를 적으면 조건이 계속 참 이므로 무한 반복이 만들어집니다.

 

while True:

    무한 반복시킬 문장

 

이제 for문의 코드를 while문으로 변환해보겠습니다.

# 0부터 9까지 출력되는 for 반복문
for i in range(10):
    print(i)

# 위와 같은 출력의 while 반복문
i = 0
while i < 10:
    print(i)
    i = i + 1

while 반복문에서 i의 값을 출력시키고 1씩 더하여 조건에서 10이 되는 순간 멈추도록 조건을 설정하여 위의 for문과 동일한 출력결과를 나타내었습니다.

 

while 문을 보면 이럴 바엔 그냥 for문을 쓰고 말지라는 생각이 강하게 듭니다. 왜냐하면 for문은 2줄만에 끝났고, while 반복문은 일딴 4줄에 조건이 만족하지 않을 때까지의 과정 또한 추가적으로 생각해야합니다.

 

그러나 아래와 같은 경우 while 반복문이 아주 유용하게 사용이 가능합니다.

# id와 pw를 입력하여 로그인하는 코드
id = "python"
pw = "1q2w3e4r"

input_id = input("ID를 입력하세요 : ")
input_pw = input("PW를 입력하세요 : ")

# 입력한 아이디와 패스워드 중 하나가 틀렸을 때 다시 입력받는 코드
while id != input_id or pw != input_pw:
    print("입력하신 ID나 PW가 틀렸습니다.")
    input_id = input("ID를 입력하세요 : ")
    input_pw = input("PW를 입력하세요 : ")
    
# 반복문을 중단하면 아래의 코드 실행하게 됨
print("로그인 성공")

이렇게 특정 조건이 False가 나올 때까지 반복하도록 하는 경우에는 while 반복문이 아주 간편하게 사용이 가능합니다.

 

이번에는 반복문을 탈출하거나 즉시 반복의 처음으로 올라가는 문법인 break와 continue에 대해서 알아보겠습니다.

 

break는 주로 무한 반복에서 탈출하기 위한 조건을 만들기 위해 자주 사용됩니다. 간단한 예제를 보겠습니다.

prime_number = int(input("소수인지 아닌지 검사하고 싶은 숫자를 입력하세요: "))
i = 1
count = 0
while True:
    if prime_number % i == 0:
        count = count + 1  # 0으로 나누어 떨어진다면 약수이므로 약수 카운트 1추가
    if count == 3:
        break  # 약수의 개수가 3이라면 소수가 아니므로 나가기
    if i == prime_number:
        break
    i = i + 1

if count == 3:
    print("소수가 아닙니다.")
else:
    print("소수입니다.")

소수는 약수의 개수가 2개이므로 약수의 개수가 3이라는 것은 이미 소수가 아니라고 판단이 되어 반복문을 탈출하는 경우입니다.

 

물론 이 코드 말고도 for문으로 짜면 훨씬 더 효율적으로 작성할 수 있으며 for문으로 변경해보시길 바랍니다.

 

continue는 반복문의 위쪽으로 다시 올라가는 것입니다.

위의 로그인 코드를 살짝 변형해보겠습니다.

# id와 pw를 입력하여 로그인하는 코드
id = "python"
pw = "1q2w3e4r"

# 입력한 아이디와 패스워드 중 하나가 틀렸을 때 다시 입력받는 코드
while True:
    input_id = input("ID를 입력하세요 : ")
    input_pw = input("PW를 입력하세요 : ")

    if id == input_id and pw == input_pw:  # 로그인 성공 조건
        print("로그인 성공")
        break  # 반복문 밖으로 탈출
    else:  # 나머지 경우는 로그인에 실패한 경우
        print("입력하신 ID나 PW가 틀렸습니다.")
        continue  # 다시 반복문 위로 올라감

break와 continue의 사용방법에 대해서 이해가 가시나요? 파이썬의 문법은 그렇게 어려운 개념이 들어있지는 않습니다. 그러나 쉬운 문법을 가지고 문제를 해결해야 할 때는 상당히 어려울 수 있습니다. 연습만이 살 길입니다.

반응형

댓글