http://conansjh20.pythonanywhere.com/lottopage/

 

로또 당첨번호 확인

로또 당첨 번호 확인

conansjh20.pythonanywhere.com

위의 홈페이지를 만들기 위한 모든 과정을 하나하나 포스팅 하도록 하겠습니다.

 

1. 이제 앞서 얻은 각 값을 모두 밖으로 반환(yield) 합니다. 

1
2
3
4
5
6
    yield get_time ## 회차수
    yield get_date ## 발표 날짜
 
    yield wn ## 당첨 번호 리스트
    yield bn ## 보너스 당첨 번호
    yield get_mynum ## 내 로또 번호 
cs

파이썬의 함수(메쏘드)는 return을 이용하여 함수의 결과를 내보내는 방법 이외에 yield를 이용하여 값을 내보내는 방법이 있습니다. return을 이용한다면 단순히 함수의 결과 값이 return이 되지만 함수의 결과를 하나 이상의 반복하는 값들의 연속으로 내보내고 싶은 경우 yield를 사용하게 됩니다.

 

파이썬의 가장 중요한 개념 중 하나라고 생각하는 iterable한 iterator가 되는 것입니다.

(이에 대해서는 본 블로그의 Python, Iterator의 글을 보면 아주 간단한 iterator들을 소개하였습니다.)

Iterator 그 자체로는 사용하기 힘들지만 다른 여러 명령어를 사용하여 입맛에 맞게 각 값을 추출하여 사용하는 것입니다.

 

지금까지 작성한 코딩은 다음과 같습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import requests
from bs4 import BeautifulSoup
import re
 
def lotto(numbers):
    get_address = requests.get("https://www.dhlottery.co.kr/common.do?method=main"
    get_content = get_address.content 
    get_html = BeautifulSoup(get_content, "html.parser"
    get_time = get_html.find("strong",{"id":"lottoDrwNo"}).text
    get_date = get_html.find("span",{"id":"drwNoDate"}).text
    num_filter = re.compile('drwtNo.*'
    wn = [] 
    for get_num in get_html.find_all("span",{"id": num_filter}): 
        wn.append(get_num.get_text()) 
    bonus_num = get_html.find("span",{"id":"bnusNo"}).text 
    bn = bonus_num
    wn = list(wn)
    get_mynum = str.split(numbers)
 
    yield get_time
    yield get_date
 
    yield wn
    yield bn
    yield get_mynum
cs

그리고 함수 lotto()의 매개변수 numbers에 임의로 숫자를 넣어서 print로 출력해보면,

1
print(lotto("30 19 23 24 36 39"))
cs

값은 다음과 같이 나옵니다.

<generator object lotto at 0x0310C568>

 

lotto() 함수의 결과 모두 yield로 내보내서 lotto()함수는 반복된 값을 가지고 있는(iterable한) generator가 되고 이를 for 구문을 통해 하나씩 출력해야 그 안에 가지고 있는 값이 나오게 됩니다.

1
2
for a in lotto("30 19 23 24 36 39"):
    print(a)
cs

값은 다음과 같습니다.

902

2020-03-14

['7', '19', '23', '24', '36', '39']

30

['30', '19', '23', '24', '36', '39']

 

순서대로 회차수, 발표날짜, 1등 당첨번호, 보너스번호, 내가입력한 번호가 순서대로 출력됩니다. 그리고 위 함수를 다른 곳에 이용할 경우에도 return값보다 yield를 이용하여 내보내는 것이 더욱 편리한 경우가 많습니다.

 

아마 다른 언어도 비슷하겠지만 파이썬에서도 역시 for 구문에 대한 이해 및 iterable/iterator를 이해하는 것이 초보 딱지를 떼는 가장 필수 개념인 듯 합니다.

+ Recent posts