: 같은코딩을두번하지맙시다. 순천향대학교컴퓨터공학과이상정 순천향대학교컴퓨터공학과 1 학습내용 프로그램이커질수록코드는복잡 복잡한코드는읽기도어렵고유지보수도어려움 함수 (function) 를사용하여복잡함을관리 함수는코드덩어리로프로그램안에서필요할때사용 코드의재사용이편리 함수는공통된행위를따로분리 코드를더읽기쉽고관리하기좋게만듦 유지보수 (maintenance) 가편리 순천향대학교컴퓨터공학과 2
스타버즈코드에옵션추가 매장에서원두가떨어지는경우에현재가격에관계없이즉시주문하는옵션을추가 새프로그램은두가지옵션제공 첫번째옵션은커피원두가격이떨어질때까지기다림 두번째옵션은긴급주문으로현재가격을화면에바로보여줌 두옵션모두현재의가격정보가필요함 현재가격정보를얻는코드를두번작성하지함수로작성 필요할때마다함수를재사용 ( 호출 ) 파이썬함수는 def 키워드를사용 순천향대학교컴퓨터공학과 3 기존스타버즈코드 import urllib.request import time price = 99.99 while price > 4.74: time.sleep(900) page = urllib.request.urlopen(" http://cs.sch.ac.kr/pricesloyalty.py") text = page.read().decode("utf8") where = text.find(">$") start_of_price = where + 2 end_of_price = start_of_price + 4 price = float(text[start_of_price: end_of_price]) print("buy!") 순천향대학교컴퓨터공학과 4 가격정보코드, 재사용되는코드
원두가격출력함수예 1 [ 실습 1] import urllib.request def get_price(): # 함수정의 page = urllib.request.urlopen(" http://cs.sch.ac.kr/pricesloyalty.py") text = page.read().decode("utf8") where = text.find(">$") start_of_price = where + 2 end_of_price = start_of_price + 4 print(text[start_of_price: end_of_price]) get_price() # 함수호출 순천향대학교컴퓨터공학과 5 시험주행 함수에서가격정보를출력하지않고가져오는방법은? 순천향대학교컴퓨터공학과 6
원두가격출력함수예 2 [ 실습 2] import urllib.request def get_price(): # 함수정의 page = urllib.request.urlopen(" http://cs.sch.ac.kr/pricesloyalty.py") text = page.read().decode("utf8") where = text.find(">$") start_of_price = where + 2 end_of_price = start_of_price + 4 return text[start_of_price: end_of_price] # 가격을반환 price = get_price() print(price) # 함수호출 순천향대학교컴퓨터공학과 7 import 프러그래밍 urllib.request 기초 import time 스타버즈코드 : 긴급주문옵션 [ 실습 3] def get_price(): # 함수정의 page = urllib.request.urlopen("http://cs.sch.ac.kr/prices-loyalty.py ") text = page.read().decode("utf8") where = text.find(">$") start_of_price = where + 2 end_of_price = start_of_price + 4 return float(text[start_of_price: end_of_price]) # 가격을숫자로반환 price_now = input("do you want to see the price now (Y/N)? ") if price_now == "Y": print(get_price()) # 가격을호출하여출력 else: price = 99.99 while price > 4.74: time.sleep(900) price = get_price() # 함수호출 print("buy!") 순천향대학교컴퓨터공학과 8
시험주행 순천향대학교컴퓨터공학과 9 스타버즈 CEO 추가요구 CEO 는가격이휴대폰으로전송되기를원함 외근중일때가격정보를트위터계정으로받기를원함 순천향대학교컴퓨터공학과 10
트위터전송을위한작업 1. 트위터계정을만듬 http://twitter.com 2. 트위터에애플리케이션을등록 http://dev.twitter.com/apps 소비자키와비밀번호, 접근키와비밀번호복사 OAuth 표준애플리케이션인증방식 3. 트위피라이브러리설치 4. 스타버즈소스코드수정 등록된애플리케이션소비자키와비밀번호, 접근키와비밀번호를삽입 트위피라이브러리사용하여트위터에메시지전송 순천향대학교컴퓨터공학과 11 트위터애플리케이션등록 - 로그인 순천향대학교컴퓨터공학과 12
애플리케이션등록 새로운애플리케이션생성 순천향대학교컴퓨터공학과 13 애플리케이션생성 (1) 순천향대학교컴퓨터공학과 14
애플리케이션생성 (2) 순천향대학교컴퓨터공학과 15 애플리케이션생성 (3) 순천향대학교컴퓨터공학과 16
애플리케이션퍼미션설정 순천향대학교컴퓨터공학과 17 보충학습 OAuth 인증소개 OAuth (Open standard for Authorization) 인증 OAuth 인증은소비자가별도의인증 ( 사용자 ID, 비밀번호등 ) 없이서비스제공자의보호된자원에접근을허가하는인증방식 주요용어 사용자 (user): 서비스제공자와소비자를사용하는계정을가지고있는개인 소비자 (consumer): 사용자를대신하여서비스공급자에접근하는웹사이트또는애플리케이션 ( 프로그램 ) 서비스제공자 (service provider): OAuth 를통해접근을허용하는웹애플리케이션 (SNS, 포털 ), 예 ) facebook, twitter, daum, naver 등 소비자키 (consumer key): 서비스제공자에게소비자자신임을인증하기위한키 소비자비번 (consumer secret): 소비자의소비자키소유권한이있는지인증하기위한키 접근토큰 (access token): 소비자가사용자의서비스제공자의비밀번호를사용하지않고사용자를대신해서접근하기위해서사용하는값 접근토큰비번 (access token secret): 접근토큰이사용자의것임을인증하기위한값 순천향대학교컴퓨터공학과 18
애플리케이션접근토큰생성 (1) 순천향대학교컴퓨터공학과 19 애플리케이션접근토큰생성 (2) 순천향대학교컴퓨터공학과 20
애플리케이션접근토큰생성 소비자키 (3) 순천향대학교컴퓨터공학과 21 애플리케이션접근토큰생성 접근키 (4) 순천향대학교컴퓨터공학과 22
트위피 (Tweepy) 라이브러리설치 트위피라이브러리모듈은파이썬으로트위터접속을지원하는라이브러리 PyPI (Python Package Index) 를사용하여설치 PyPI 는파이썬모듈을제공하는중앙저장소 (repository) https://pypi.python.org/pypi C: > python m pip install tweepy 순천향대학교컴퓨터공학과 23 스타버즈코드 : 트위터접속 [ 실습 5] import tweepy import time import urllib # 트위피라이브러리사용하여트위터에메시지전송하는함수 def send_to_twitter(msg): CONSUMER_KEY = 'TlcvCB9***********UAMdYFRm' CONSUMER_SECRET = 'ecwtlw6gf4****************znklvy0q Sb4G91' ACCESS_KEY = '4*****************R6CHlgk0xH2jrDba72FFOOytD' ACCESS_SECRET = 'Vh************************5sy3hFsQDHqb7' auth = tweepy.oauthhandler(consumer_key, CONSUMER_SECRET) auth.set_access_token(access_key, ACCESS_SECRET) api = tweepy.api(auth) api.update_status(msg) 순천향대학교컴퓨터공학과 24
def 프러그래밍 get_price(): 기초 page = urllib.request.urlopen("http://cs.sch.ac.kr/prices-loyalty.py ") text = page.read().decode("utf8") where = text.find('>$') start_of_price = where + 2 end_of_price = start_of_price + 4 return float(text[start_of_price:end_of_price]) price_now = input("do you want to see the price now (Y/N)? ") if price_now == "Y": msg = "Buy now!, price $" + str(get_price()) send_to_twitter(msg) else: price = 99.99 while price > 4.74: time.sleep(900) price = get_price() msg = "Buy!, price $" + str(price) send_to_twitter(msg) 순천향대학교컴퓨터공학과 25 시험주행 순천향대학교컴퓨터공학과 26
프로그래밍도구상자 (1) 프로그래밍도구 함수를사용하여코드를반복해서작성하지않음 인자는함수에전달되는변수 함수는값을반환 컴퓨터는스택프레임을사용하여변수를기록하고추적 함수를호출하면함수가사용할수있도록새로운스택프레임을만듬 함수의실행이끝나면스택프레임과지역변수는제거 코드가변수를볼수있다면그변수는범위안에있다고함 순천향대학교컴퓨터공학과 27 프로그래밍도구상자 (2) 파이썬도구 def를사용하여함수를생성 return() 을사용하여함수를호출한코드로값을전달 괄호안에인자를넣어서함수에전달 순천향대학교컴퓨터공학과 28
보충학습 누적덧셈함수 [ 실습 4] 1 장의누적덧셈을함수로작성 def add(n): number = 1 sum = 0 while number <= n: sum = sum + number number = number + 1 return sum print("---- add(10)") print(add(10)) print("---- add(100)") print(add(100)) 순천향대학교컴퓨터공학과 29 시험주행 순천향대학교컴퓨터공학과 30
보충학습 재귀함수 재귀함수 (recursion) 자기자신의함수를호출하는함수 재귀함수작성시자기자신으로무한히반복되지않도록작성 # 재귀함수수준을제어하는예 def f(level): # 현재의수준을출력 print("recursion call, level",level) # 수준 10 을넘어서지않으면 if level < 10: # 수준을증가시키고자신의함수를호출 f(level+1) # 수준 1 에서재귀함수호출 f(1) 순천향대학교컴퓨터공학과 31 보충학습 재귀함수, 누적덧셈 [ 실습 4] 누적덧셈 sum(n) = 1 + 2 + 3 + + (N-1) + N = sum(n-1) + N 재귀적정의 1, if N=1 sum(n-1) + N, if N > 1 def sum(n): if (n == 1): return 1 else: return sum(n-1)+n print("---- sum(10)") print(sum(10)) 순천향대학교컴퓨터공학과 32 print("---- sum(100)") print(sum(100))
시험주행 순천향대학교컴퓨터공학과 33 보충학습 재귀함수, 누적덧셈과정 sum(4) 10 sum(3) + 4 6 sum(2) + 3 3 sum(1) + 2 1 1 순천향대학교컴퓨터공학과 34
3 장실습 [ 실습 1] 원두가격출력함수예 1 [ 실습 2] 원두가격출력함수예 2 Python Tutor로도실행 http://www.pythontutor.com/ Online Python Tutor urlopen() 사용하여웹에서가격을가져오지않고, text = 3.74 등으로코드대치 [ 실습 3] 스타버즈코드 : 긴급주문옵션 [ 실습 4] 앞의누적덧셈함수와재귀함수누적뎃셈을작성하고실행과정분석 재귀함수종료조건삭제후에러확인 [ 실습 5] 스타버즈코드 : 트위터접속 을다음과같이수정하여작성하고실행 자신의이름과학번을추가하여예제의트위터로전송 친구의트위터로전송하고, 친구의스마트폰확인캡처순천향대학교컴퓨터공학과 35 3 장과제 1. [ 실습 1] ~ [ 실습 4] 의프로그램작성및실행과정 2. 자신의트위터계정으로애플리케이션을등록하여자신의트위터에 [ 실습 5] 를반복 3. 앞에서배운내용을사용한임의의프로그램작성 프로그램설명 프로그램소스 실행결과 순천향대학교컴퓨터공학과 36