Python/파이선과 친해지기

[Python] - Python과 친해지기-반복문 기초 테크닉

우리는 이제 귀찮은 작업을 일일이 타이핑하는 것이 아닌, 반복문이라는 도구로 빠른 퇴근을 도모할 수 있게 되었다. 이번 시간에는 반복문에 대해서 조금 더 깊은 이해를 가질 수 있는 여러 가지 반복문과, 반복문의 제어 등을 알아보자

 


들여 쓰기(Indent)

문득 이런 생각이 들었던 독자도 있을 것이다. "어디까지가 반복문인지 Python이 어떻게 알지?"(이래서 눈치 빠른 녀석들이란...) 사실 다른 프로그래밍 언어는 아래와 같이 중괄호를 통해서 어디까지를 그 지역으로 지정할지를 설정한다. 

for(int i=0 ; i<students.length ;i++) {
    students[i] = students[i].replace("철수","**");
    System.out.println(students[i]);
}
// JAVA언어에서의 for문 이다. 중괄호({})를 통해 어디까지가 for문인지를 지정한다.

다른 언어에서는 가독성을 위해서 들어 쓰기(Indent)를 하지만 Python은 문법적으로 같은 수준으로 Indent 된 것들을  한 지역으로 보고 Indent가 다시 돌아온 순간을 그 지역의 끝으로 인식한다. 다음의 예시를 보도록 하자

코드 : 
for i in range(10) :
    a=i
    print(a)

print("루프 종료")

출력 : 
1
2
3
4
5
6
7
8
9
10
"루프 종료"

for문으로 동작하는 것은 같은 들여 쓰기 수준을 가진 a=i와 print(i)만 이고 제일 아래줄인 print("루프 종료")는 for문으로 반복되지 않는다. 들여 쓰기는 [TAB]으로 입력할 수 있으며, 공백(스페이스) 4칸 또한 들여 쓰기로 인정한다.

 

반복문의 제어

*아래부터는 제어문 강의를 읽고 오면 도움이 많이 된다.*

반복문은 시작되면 끝까지 달리는 핸들이 고장 난 8톤 트럭이 아니다. 반복문이 실행되는 도중에도 반복문의 강제 종료, 다음 루프로의 강제이동 등이 가능하다. 크게 사용하는 반복문의 제어는 break와 continue가 있다.

코드 : 
for i in range(10) :
    a=i
    if(i>5) : 
    	break
    print(a)
        
print("루프 종료")

출력 : 
1
2
3
4
5
"루프 종료"

중간에 if는 조건 제어문인데, 간단하게 i가 5보다 크면 제어블록 안에 있는 break가 동작한다고 생각해주면 된다.

break는 돌고 있는 가장 가까운 루프를 강제 종료시키는 특징이 있다.

코드 : 
for i in range(10) :
    a=i
    if(i<5) : 
    	continue
    print(a)
        
print("루프 종료")

출력 : 
5
6
7
8
9
10
"루프 종료"

cotinue는 돌고 있는 가장 가까운 루프를 다음 루프로 강제 이동한다. 따라서 이 for는 i가 5보다 작을 때 강제로 다음 루프로 이동되어 i가 5보다 같거나 커질 때까지 print(i)는 실행되지 않는다.

 

무한루프(Infinite Loop)

무한루프는 말 그대로 끝나지 않는 루프이다.(컴퓨터 세상에서 만큼은 우리 무한으로 즐겨보자) 

무한루프는 보통 while문으로 걸게 되며, 다음의 코드로 알아보자

코드 : 
while(True) :
    print("무한으로 즐겨요")
        
print("루프 종료")

출력 : 
무한으로 즐겨요
무한으로 즐겨요
무한으로 즐겨요
무한으로 즐겨요
무한으로 즐겨요
...
...

시작하면 멈추지 않는 특성 때문에 보통 위에서 설명한 break와 같이 사용된다.

 

range SLICING

for문의 범위를 지정하는 range는 자료구조의 slicing처럼 slicing이 가능하다. 

코드 : 
for i in range(3,5) :
    print(i)

출력 : 
3
4

코드 :
for i in range(0,10,2) :
	print(i)

출력 : 
0
2
4
6
8

단, 배열의 인덱스를 의미하는 것이 아니기 때문에 음수 인덱스(자료구조에서는 역으로 읽는 인덱스를 의미했다.)는 진짜 음수로 인식한다.

코드 :
for i in range(-1,10,2) :
	print(i)

출력 : 
-1
1
3
5
7
9

이번 시간에는 코드 블록을 나누는 방법(Indent),반복문의 제어, range를 자유자재로 다룰 수 있는 방법을 알아보았다. 사실 for문은 더 실용적인 사용법인 Advanced-for라는 문법이 있다. 다만, 조금 더 어려운 개념(generator, iterator)등이 들어가기에, 포스팅을 계속하며 Advacned-for도 쉽게 이해할 순간이 되는 순간 설명하도록 하겠다. 다음 시간에는 프로그래밍에 꽃(벌써 2번째 꽃이다.) 제어문에 대해서 알아보도록 하자