코딩(파이썬)_개념

파이썬 반복문 for, while

scarlet bloom flowers once more 2023. 8. 18. 17:47
반응형

파이썬으로 같은 문자를 반복해서, 또는 주어진 리스트나 숫자 등을 순서대로 출력하고 싶을 때는 어떻게 할까? 일일이 각 문자의 index를 print하는 것으로 해결할 수 있겠지만, 너무나 비효율적일 것이다. 이럴때 필요한 개념이 for, while 이다.

아마 파이썬을 배울때 가장 기초가 되는 구문 중 하나가 아닐까 싶을 정도로 자주 쓰이고, 그만큼 배우게 되는 시간도 빠른 편이다. 하지만 간혹 가다가 이 구문을 이해를 못하거나, for과 while의 차이점을 모르는 사람들이 더러 있다. 그렇다면 과연 이 구문들은 어떻게 쓰이는 것일까?

먼저 while구문을 보자. while구문은 영어 표현 그대로 while의 조건에 적합한 상황이라면 계속해서 반복되는 구문이다. 예를들어 while i>1:이라는 구문이 있다면, i가 1보다 큰 경우는 계속해서 반복한다는 거다. 이에 이러한 구문은 위와 같이 조건을 제시할 수도 있지만, True를 통해 참 조건을 제시하고 이에 어긋나는 조건을 제시한다음 이에 해당한다면 break를 통해 구문을 멈춰세우고 종료시킬 수도 있다.

///

k=1
while True:
    if k>10:
        break
    else:
        print(k)
        k+=1

///

이 구문은 k가 1에서 시작하여 1씩 증가하며 출력, 10에 도달하면 while구문이 멈추고 break를 통해 구문을 완전히 끝내는 식이다.  여기서 알아야 할 것은, break가 없으면 무한루프를 생성한다는 것이다. break는 while구문을 벗어나는 필수 존재이기에 위의 식에선 꼭 필요하다고 볼 수 있다.

///

i=10
while i>1:
    print(i)
    i-=1

///

다음으로, 간단하게 위와 같은 예시를 들어보자. i가 10에서 출발하고 i가 1보다 크다면 i를 출력하고 i가 1씩 작아지는 구문이다. 이 구문을 실행하면 10에서 2까지 출력이 되고, 1이 되는순간 출력이 되지 않으며 종료되는 모습을 볼 수 있다.

하지만 만약 i-=1이 아니고 i+=1이라면? 종료되지 않고 계속해서 반복하는 양상을 보인다. 

이렇게 while문은 매우 쉽게 구현이 가능하지만, 올바른 조건을 제시하지 않는다면 무한루프를 돌 수 있게 된다는 특징을 가지고 있다.

 
 

하지만 for구문은 어떨까?

while문과 비슷한 반복문이지만, 매우 유용하고 문장 구조가 한눈에 쏙 들어오기에 편리한 구문이다.

물론 while문도 편리하긴 하지만, 이 글을 쓰는 나도 for구문을 더 자주쓰긴 한다...ㅎㅎ

예시를 들어보자.

///

k=1
for i in range(10):
    print(i+1)

///

위의 while구문을 for구문으로 바꾼다면 이렇게 쉽게 바꿀 수 있다. 읽기도 쉽지 않은가? 10개의 범위내에 있는 i에 대해 i+1을 출력하라는 말인데, 위와 같이 range에 부가적인 설명이 없다면 i는 무조건 0에서 시작하기에 i+1을 적어 1부터 시작하도록 바꾼 것 말고는 딱히 생각할 것도 없는 구문이 분명하다. 그럼 반대로 출력하는 것은 어떻게 할까?

///

k=1
for i in range(10,0,-1):
    print(i)

///

위와 같이 range값을 조정해주면 간단하다. 일반적인 range(숫자)는 i가 숫자만큼 1씩 증가하는 것을 말한다. 하지만 저렇게 조건을 제시한다면 조건에 맞게끔 수정이 되는데, 내가 적은 range(10,0,-1)이 의미하는 바는, 10에서 0까지, -1씩 i가 줄어들도록 하는 것이다. 물론 이러면 숫자가 작아지기 때문에 i의 초기값은 10으로 설정되어 1까지 내려가게 된다. 만약 2씩 내려가고 싶다면? -1을 -2로 수정하면 된다. 

이렇든 범위와 특정 규칙에 부합하는 조건문을 만들고 싶다면 for구문이 쉬울 수 있다.

 

이 반복문을 좀 더 이용하게 된다면 이중 for구문을 이용한 이중배열, 2차원 데이터 등 좀 더 많은 것을 다룰 수 있게 되지만, 난이도가 다소 상승하게 되므로 다른 포스트에서 소개하도록 하겠다.

반응형