본문 바로가기

PYTHON

[Python / 파이썬] 제어문, 반복문 (if~else문, for문 안에서의 else문, while문,break,continue문)

파이썬에서 프로그램의 흐름을 제어할 수 있는 제어문에 대해 알아보겠습니다.


1. if 문

if 문장은 조건에 따라 흐름을 분기 할 수 있는 문장 입니다.

다음 예처럼 if 조건:, elif 조건:, else: 을 사용할 수 있습니다.

>>> x = int(input("정수를 입력해 주세요: ")) 
정수를 입력해 주세요: 42 
>>> if x < 0: 
	x = 0 
	print("음수는 0으로 변환") 
elif x == 0: 
	print("0 입력") 
elif x == 1: 
	print("1 입력") 
else: 
	print("1 초과") 
1 초과 
>>>

음수가 입력되면 if x < 0: 구문이 실행되고 0 이나 1일 입력되면 elif 부분이 실행됩니다. 2이상의 값이 입력되면 eslse: 부분이 실행됩니다. elif 부분은 필요한 만큼 반복될 수 있습니다.

2. for 문

 

파이썬의  for문은 list나 string 같은 시퀀스 타입의 각항목에 대해 반복 처리를 할 수 있게 해 줍니다.

>>> colors = ['red', 'blue', 'yellow']

>>> for item in colors:

	print(item, len(item))

red 3
blue 4
yellow 6

>>>

만약 시퀀스내의 항목에 대한 반복 처리중 시퀀스의 내용을 변경해야 할 경우 복사된 시퀀스를 사용하는 것이 좋습니다. 처리중 변경된 사항이 문제를 일으킬 수 있기 때문입니다.

>>> for item in colors[:]: # 슬라이스로 만들어진 사본으로 작업함.

	if len(item) > 5:

		colors.insert(0, item)

>>> colors

['yellow', 'red', 'blue', 'yellow']

>>>

특정 값의 범위를 만들기 위해서는 range() 함수를 사용합니다.

>>> for i in range(5):

	print(i)

0
1
2
3
4
>>>

- range(5) 는 0부터 4까지 범위를 만듭니다.

- range(1, 5) 는 1부터 4까지 범위를 만듭니다.

- range(0, 5, 2) 는 0, 2, 4 값을 만듭니다.

 

시퀀스를 처리하면서 숫자 인덱스가 필요할 때는 다음과 같이 사용할 수 있습니다.

>>> colors = ['red', 'blue', 'yellow']

>>> for i in range(len(colors)):

	print(i, colors[i])

0 red
1 blue
2 yellow
>>>

3. while 문

 

while 조건: 형식에서 조건이 참이 동안 실행됩니다.

>>> i = 3

>>> while i > 0:

	print(i)

	i -= 1

3
2
1
>>>

4. break, continue 문

 

- for, while 루프내에서 break 를 만나면 루프를 바로 종료 합니다.

- for, while 루프내에서 continue를 만나면 나머지 부분을 실행하지 않고, 다음 루프로 넘어갑니다.

 

 

5. 루프(for, while)에 대한  else: 문과 pass 문

 

if가 아닌 for, while 루프에 대해 else: 문을 사용할 수 있습니다. 이 경우 else: 문은 break 에 의해 강제로 종료되는것이 아니라, for 문이 모두 항목을 소진하였거나, while문에 False를 만나서 종료될 때  실행됩니다.

 

보통 프로그래밍 언어에서 'else'라고 하면 if와 함께 오는 경우가 거의 대부분입니다.

하지만 파이썬에서는 for 문과도 함께 쓰기도 합니다.

for와 함께 쓰는 else는, for문이 중간에 break 등으로 끊기지 않고,

끝까지 수행 되었을 때 수행하는 코드를 담고 있습니다.

코딩을 하다 보면 for문이 중간에 break 되었는지, 되어있지 않는지 판별해야 되는 경우가 많이 있습니다.

테스트 변수를 둬서 확인하는 등으로 처리합니다.

파이썬에서는 else의 사용으로 간단하게 해결할 수 있습니다.

if문에 else를 사용하듯이 else를 사용하게 됩니다.

else의 들여쓰기는 for와 일치해야 합니다.

 

파이썬의 for 반복문은 else 명령과 짝을 이룰 수도 있다.

for 변수 in 반복가능자:    

       수행문들1

else:    

       수행문들2

 

else 블럭에 포함된 ‘수행문들2’는 for 반복문이 반복형의 마지막 요소까지 모두 반복했을 경우 그 다음에 수행된다. 즉, 모든 반복이 성공적으로 수행된 경우에 한 번 수행된다. 하지만 break문을 만나면 else 구문은 수행되지 않고 for 블럭을 완전히 빠져나간다.

 

for n in lst:    

      if n==0:

          break    

      print(n)

else:    

      print(‘There is no 0.’) # break문을 만나지 않았다면 수행된다.

 

이 예제의 경우 lst 안에 0이 있다면 break를 만나게 되고 따라서  else 블럭은 수행되지 않고 for 반목문을 빠져 나오게 된다.

 

따라서 for 반복문이 종료된 시점에서 이 종료가 모든 반복을 다 수행한 후의 정상적인 종료인지, 아니면 break 명령에 의한 강제 종료인지에 따라서 수행해야 될 일을 구분할 필요가 있는 경우에 for~else 구문을 사용하면 된다.

 

>>> for n in range(2, 10): 
	for x in range(2, n): 
    	if n % x == 0: 
        	print(n, '=', x, '*', n//x) 
            break 
    else: 
       	print(n, '은 소수 입니다.') 
        
        
2 은 소수 입니다. 
3 은 소수 입니다.
4 = 2 * 2 5 은 소수 입니다. 
6 = 2 * 3 7 은 소수 입니다. 
8 = 2 * 4 9 = 3 * 3 
>>>

위 예에서 else:는 if에 대한 부분이 아니라 내부의 for문에 대한 else: 입니다. 내부의 for 루프가 break에 의해 종료되지 않을때만 else: 부분이 실행됩니다.

 

pass 문은 구문이 필요하지만 프로그램이 아무런 조치를 하지 않을 때 사용할 수 있습니다.

 

>>> while True:

   pass     #  키보드 인터럽트 대기 중(Ctrl + C)

KeyboardInterrupt

>>>