#!/usr/bin/env python # coding: utf-8 # *** # *** # # 6. 제어문과 함수 기초 # *** # *** # *** # ## 1 파이썬 제어문 # *** # ### 1-1 들여쓰기와 제어문 # - 파이썬은 들여쓰기를 강제하여 코드의 가독성을 높인다. # - 가장 바깥쪽의 코드는 반드시 1열에 시작한다. # - 블록 내부에 있는 statement들은 동일한 열에 위치해야 한다. # - 블록의 끝은 들여쓰기가 끝나는 부분으로 간주된다. # - python에는 {, }, begin, end 등의 키워드가 존재하지 않는다. # - 들여쓰기를 할 때에는 탭과 공백을 섞어 쓰지 않는다. # In[160]: a = 1 # 성공 a = 1 # 실패 # In[161]: if a > 1: print 'big' print 'really?' # ### 1-2 if문 # - if문의 형식 # # > if 조건식1: # # >   statements # # > elif 조건식2: # # >   statements # # > elif 조건식3: # # >   statements # # > else: # # >   statements # # - 조건식이나 else 다음에 콜론(:) 표기 필요 # - 들여쓰기(indentation)를 잘 지켜야 함 # In[153]: score = 90 if score >= 90: print 'Congratulations!!! ' # In[61]: a = 10 if a > 5: print 'Big' else: print 'Small' # - statement가 1개인 경우 조건식과 한 줄에 위치 가능 (추천하지는 않음) # In[155]: a = 10 if a > 5: print 'Big' else: print 'Small' # In[156]: n = -2 if n > 0: print 'Positive' elif n < 0: print 'Negative' else: print 'Zero' # In[65]: order = 'spagetti' if order == 'spam': price = 500 elif order == 'ham': price = 700 elif order == 'egg': price = 300 elif order == 'spagetti': price = 900 print price # - 위 코드와 동일한 dictionary 자료구조를 사용한 코드 # In[66]: order = 'spagetti' menu = {'spam':500, 'ham':700, 'egg':300, 'spagetti':900} price = menu[order] print price # ### 1-3 for문 # # > for <타겟> in <컨테이너 객체>: # # >   statements # # > else: # # >   statements # In[168]: a = ['cat', 'cow', 'tiger'] for x in a: print len(x), x # In[169]: for x in [1,2,3]: print x, # In[172]: print range(10) for x in range(10): print x, # In[174]: sum = 0 for x in range(1, 11): sum = sum + x print sum # In[1]: prod = 1 for x in range(1, 11): prod = prod * x print prod # - enumerate() 내장 함수: 컨테이너 객체가 지닌 각 요소값뿐만 아니라 인덱스 값도 함께 반환한다. # In[67]: l = ['cat', 'dog', 'bird', 'pig'] for k, animal in enumerate(l): print k, animal # In[68]: t = ('cat', 'dog', 'bird', 'pig') for k, animal in enumerate(t): print k, animal # In[71]: d = {'c':'cat', 'd':'dog', 'b':'bird', 'p':'pig'} for k, key in enumerate(d): print k, key, d[key] # - break: 루프를 빠져나간다. # In[176]: for x in range(10): if x > 3: break print x print 'done' # - continue: 루프 블록 내의 continue 이후 부분은 수행하지 않고 루프의 시작부분으로 이동한다. # In[2]: for x in range(10): if x < 8: continue print x print 'done' # - else: 루프가 break에 의한 중단 없이 정상적으로 모두 수행되면 else 블록이 수행된다. # In[73]: for x in range(10): print x, # 콤마(,) 때문에 줄이 바뀌지 않는다. else: print 'else block' print 'done' # - break에 의하여 루프를 빠져나가면 else 블록도 수행되지 않는다. # In[179]: for x in range(10): break print x, else: print 'else block' print 'done' # - for 루프의 중첩 # In[182]: for x in range(2, 4): for y in range(2, 10): print x, '*', y, '=', x*y print # ### 1-4 while문 # - while 조건식이 만족하는 동안 while 블록내의 statements 들을 반복 수행한다. # In[183]: count = 1 while count < 11: print count count = count + 1 # In[1]: sum = 0 a = 0 while a < 10: a = a + 1 sum = sum + a print sum # In[6]: x = 0 while x < 10: print x, # 콤마(,) 때문에 줄이 바뀌지 않는다. x = x + 1 else: print 'else block' print 'done' # *** # ## 2 파이썬 함수 기초 # *** # ### 2-1. 함수의 장점 및 함수 사용법 # - 함수의 장점 # - 함수는 반복적인 코드를 없에 주어 코드의 길이를 짧게 만들어 준다. # - 코드의 유지보수를 쉽게 만들어 준다. # In[6]: def add(a, b): return a + b print add(3, 4) print add([1,2,3], [4,5,6]) # In[5]: c = add(10, 30) print c # - 함수 이름에 저장된 레퍼런스를 다른 변수에 할당하여 그 변수를 이용한 함수 호출 가능 # In[6]: f = add print f(4, 5) print f print f is add # - 함수의 몸체에는 최소한 한개 이상의 statement가 존재해야 함 # - 그러므로, 아무런 내용이 없는 몸체를 지닌 함수를 만들 때에는 pass 라는 키워드를 몸체에 적어주어야 함 # In[8]: def simple(): pass print simple() # - 함수에서 다른 함수 호출 가능 # In[2]: def add(a, b): return a + b def myabs(x): if x < 0: x = -x return x def addabs(a, b): c = add(a, b) return myabs(c) print addabs(-5, -7) # - 인자의 이름과 함께 인자 값을 넘겨줄 수 있다. # In[7]: def minus(a, b): return a - b print minus(a=12, b=20) print minus(b=20, a=12) # - 인자의 디폴트 값을 지정할 수 있다. # In[9]: def incr(x, y=1): return x + y print incr(5) print incr(5, 10) # - 두 개 이상의 값을 동시에 반환할 수 있다. # In[1]: def calc(x, y): return x + y, x - y, x * y, x / y print calc(10, 2) # ### 2-2 함수 호출시 동적인 자료형 결정 # - 파이썬에서는 모든 객체는 동적으로 (실행시간에) 그 타입이 결정된다. # - 함수 인자는 함수가 호출되는 순간 해당 인자에 전달되는 객체에 따라 그 타입이 결정된다. # - 함수 몸체 내에서 사용되는 여러 가지 연산자들은 함수 호출시에 결정된 객체 타입에 맞게 실행된다. # In[3]: def add(a, b): return a + b c = add(1, 3.4) d = add('dynamic', 'typing') e = add(['list'], ['and', 'list']) print c print d print e # ### 2-3 재귀적 함수 호출 # - 재귀(Recursive) 함수: 함수 몸체에서 자기 자신을 호출하는 함수 # - 수학에서 점화식과 유사한 코드 # - 반드시 종결 조건 및 종결 조건이 만족할 때의 반환 값이 있어야 한다. # # - 1부터 N까지 더하는 재귀 함수 # In[4]: def sum(N): if N == 1: # 종결 조건 return 1 # 종결 조건이 만족할 때의 반환 값 return N + sum(N-1) # 재귀 호출 print sum(10) #

참고 문헌: 파이썬(열혈강의)(개정판 VER.2), 이강성, FreeLec, 2005년 8월 29일