파이썬으로 같은 문자를 반복해서, 또는 주어진 리스트나 숫자 등을 순서대로 출력하고 싶을 때는 어떻게 할까? 일일이 각 문자의 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차원 데이터 등 좀 더 많은 것을 다룰 수 있게 되지만, 난이도가 다소 상승하게 되므로 다른 포스트에서 소개하도록 하겠다.
'코딩(파이썬)_개념' 카테고리의 다른 글
시간복잡도 Big-oh (big-o) notation 점근 표기법 (0) | 2022.04.28 |
---|---|
자료구조 기초 개념, 링크드리스트 Linked-list(Python, Java 등) (0) | 2022.04.17 |
파이썬 str,int(Python) (0) | 2022.04.04 |
파이썬 탈출문자, 이스케이프 코드(Python) (0) | 2022.03.17 |
파이썬 if구문(Python) if, elif, else (0) | 2022.03.15 |