본문 바로가기
  • The future is ours
코딩(파이썬)_개념

파이썬 반복문 for, while

by scarlet bloom flowers once more 2023. 8. 18.
반응형

파이썬으로 같은 문자를 반복해서, 또는 주어진 리스트나 숫자 등을 순서대로 출력하고 싶을 때는 어떻게 할까? 일일이 각 문자의 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차원 데이터 등 좀 더 많은 것을 다룰 수 있게 되지만, 난이도가 다소 상승하게 되므로 다른 포스트에서 소개하도록 하겠다.

반응형