Python 독학/python 기본

The Basics of Python Chapter04-반복문

민백월 2023. 9. 12. 21:46

2023.09.12

 

  반복문

반복문은 말 그대로 문장을 반복해 만드는 것으로 정해진 동작을 반복적으로 수행할 때 내리는 명렁어이다. 

반복문은 모든 프로그램에서 핵심적으로 사용된다. 반복문은 반복 시작 조건, 종료 조건, 수행 명령으로 구서오디어 있으며 들여쓰기와 블록으로 구분한다. 조건문에 if 라는 키워드가 있듯이, 파이썬의 반복문은 for, while 등의 명령 키워드를 사용한다. 사실 모든 프로그래밍 언어에서는 비슷한 키워드로 반복문을 표현한다. 


  for문

for문은 기본적인 반복문으로, 반복 범위를 지정하여 반복을 수행한다. 

 

for looper in [1,2,3,4,5]:
    print("hello")

>>>hello

>>>hello

>>>hello

>>>hello

>>>hello

 

for문으로 반복문을 만들 때는 먼저 for을 입력하고 반복되는 범위를 지정해야한다. 지정하는 방법에는 두가지가 있다.

 

첫 번째 방법은 리스트를 사용하는 것이다. 위 코드에서는 [1,2,3,4,5] 라는 리스트를 사용하였다. 이 리스트에 있는 각각의 값을 하나씩 가져와 looper라는 변수에 할당하는데, 한 번 할당할 때마다 그 아래쪽에는 들여쓰기한 명령문 구문 print("hello")를 실행한다. 최종적으로 [1,2,3,4,5]에서 값을 모두 한 번씩 수행하므로, 총 다섯 번의 반복이 일어나 'hello'가 다섯 번 출력된다.

 

두 번째 방법은 아래와 같이 변수 자체를 출력하는 방법이다.

for looper in [1,2,3,4,5]:
    print(looper)

>>>1

>>>2

>>>3

>>>4

>>>5


리스트 [1, 2, 3, 4, 5] 의 각각의 값이 한 번 반복문을 돌 때마다 looper 변수에 할당되어 그 값들이 화면에 출력된다. 

그런데 만약 100번 반복해야 한다면? 리스트를 가지고 1부터 100까지 모든 값을 적기에는 너무 오래걸린다. 

이럴 때는 range라는 키워드를 사용한다. 

 

for i in range(100): print("hello")

>>>hello

>>>hello

.

.

>>>hello

위 코드를 실행하면 looper 변수에는 0부터 99까지의 값, 즉 총 100개의 값이 들어간다. 그래서 100번을 반복하는 for문을 만들 수 있다. 그렇다면 왜 100이 아닌 99까지의 값을 만들까? 이것은 리스트의 인덱싱 문법과 같다고 보면 된다. range 문법의 기본 구조는 다음과 같다.

 

for 변수 in range(시작 번호, 마지막 번호, 증가값)

range는 마지막 번호의 마지막 숫자 바로 앞까지 리스트를 만든다. 즉, range(1, 5)라고 하면 [1, 2, 3, 4]의 리스트를 만들고, range(0,5)라고 하면 [0,1,2,3,4]의 리스트를 만든다. 앞의 시작 번호와 증가값은 생략할 수 있으며, 생략했을 경우 초기값으로 시작 번호는 0을, 증가값은 1이 된다. 


 

++반복문에서 알아두면 좋은 상식

 

+반복문의 변수는 대부분 i, j, k로 지정한다. 이것은 수학에서 변수를 x, y, z로 정하는 것과 비슷한 프로그래밍 관례이다. 

+반복문은 대부분 0부터 반복을 시작한다. 이것도 일종의 관례이다. (~뭐 옛날에는 메모리가 작아서~하나라도 작은 숫자사용하려고~하는 옛날이야기)

+반복문을 잘못 작성하면 무한 루프라고 하는 오류가 발생할 수 있다. 무한 루프는 반복 명령이 끝나지 않는 프로그래밍 오류로, CPU와 메모리 등 컴퓨터의 리소스를 과다하게 점유하여 다른 프로그램에도 영향을 미친다. 


 

기본적인 반복문 외에도 다양한 반복문의 표현을 지원한다.

다음과 같이 문자열도 리스트와 같은 연속적인ㄷ ㅔ이터를 표현하므로 각 문자를 변수 i에 할당하여 화면에 출력한다.

for i in 'abcdefg': print(i)

>>>a

>>>b

>>>c

>>>d

>>>e

>>>f

>>>g

>>>h


문자열로 이루어진 리스트의 값들도 사용할 수 있다.

for i in ['americano', 'latte', 'frappuccino']: print(i)

>>>americano
>>>latte
>>>frappuccino


range구문의 특성을 이용해서도 다양한 반복문을 만들 수 있다. 

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

>>>1
>>>3
>>>5
>>>7
>>>9


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

>>>10

>>>9

.

.

>>>2

 


   while문

반복문을 표현하기 위한 방법에는 for문 이외에 while문이 있다. while문은 어떤 조건이 만족하는 동한 명령 블록을 수행하고, 해당 조건이 거짓일 경우 더는 반복 명령문을 수행하지 않는 구문이다.  if문과 반복문이 결합한 형태라고 보면 된다. 

i=1
while i<10:
    print(i)
    i+=1
   

>>>1

>>>2

>>>3

...

>>>9

 

먼저 변수 i 에 1을 할당하고 while 문을 이용하여 i<10, 즉 'i가 10보다 작을 동안' 이라는 조건을 확인한다. 이 조건이 만족하는 동안 바로 아래의 들여쓰기 구문을 실행하여 1부터 9까지의 값이 출력되고, i가 10이 되는 순간 i < 10 이 False가 되어 더는 반복문이 작동하지 않는다.  


??언제 for문을, 그리고 while 문을 사용해야하는가? 

일반적으로 for문은 반복 횟수를 정확히 알고, 그 횟수가 변하지 않을때

                   while문은 반복실행 횟수가 명확하지 않고, 어떤 조건을 만족하면 반복을 멈출때 사용한다잉


   반복문의 제어

파이썬에서는 필요에 따라 반복문을 제어하는 문법을 제공한다. 중간에 반복을 종료하거나 실행 중인 반복문을 건너뛸 수도 있다. 구체적인 구문을 예로 살펴보자

 

-break문

반복문에서 논리적으로 반복을 종료하는 방법이 있는데, 바로 break문이다. break문이 반복문에 있으면, 이를 종료할 수 있다. 예를들어 아래에서 i==5인 조건이 참일 때 break를 실행하여 종료할 수 있다.

 

for i in range(10):
    if i==5: break
    print(i)
print("End of Program")

>>>0
>>>1

>>>2
>>>3
>>>4
>>>End of Program


-continue문

continue문은 break문과 달리 특정 조건에서 남은 명령을 건너뛰고 다음 반복문을 수행한다 예를 들어 아래에서 i==5일 경우 코드를 종료하는 것이 아니라, 다음 반복으로 i==6인 상태로 print(i)를 수행한다. 이로 인해 5를 제외한 나머지 값이 화면에 출력되는 것을 확인할 수 있다.

for i in range(10):
    if i==5:continue
    print(i)
print("End of Program")

...

>>>3

>>>4

>>>6

...

>>>10

뭐 대충 5빼고 나머지 다 출력되었다는 뜻


-else문

esle문은 어떤 조건이 완전히 끝났을 때 한 번 더 실행해 주는 역할을 한다. 예를 들어, for문에서 1부터 9까지 출력하라는 명령이 있을 경우, 이것을 모두 만족한 후에 else문을 수행한다. 사실 else 문을 쓰지 않아도 해당 반복문이 모두 수행되면 반복문을 빠져나와 다음 코드를 수행하므로 필요 없어 보이는 구문이기는 하다. 하지만 break 등으로 코드가 종료된 경우 else 문이 수행되지 않으므로, 해당 반복문이 중간에 종료 없이 완벽히 수행되었는지를 명시적으로 확인하기 위해 필요한 코드라고 보면 된다. 아래의 경우 코드가 모두 수행되고 마지막으로 'End of Program'이 화면에 출력된다.

for i in range(10):
    print(i)
else:
    print("End of Program")

>>>0

>>>1

>>>2

...

>>>9

>>>End of Program


마무리하며 책에서는 위 제어구문들은 되도록 사용하지 않는 것을 권한다고 한다. 특히 긴 코드를 작성할 때, 중간에 break문이나, continue문이 있으면 의도치 않게 코드가 오작동할 수도 있다고한다. 특히 많은 사람과 함께 코딩할 때는 이러한 코드들로 인해 예측하지 못한 작동을 할 수 있으니 주의해야한다.