Byeonguk Kim

안녕하세요. 29살의 조금은 늦은 나이로 새롭게 개발자로 시작하는 신입 개발자입니다. 포트폴리오 [https://deaguowl.github.io]

프로젝트 04. 수집된 로또번호 가공하기

25 Apr 2019 » 프로젝트

2019.04.25 TIL

(TIL은 스스로 이해한 것을 바탕으로 정리한 것으로 오류가 있을 수 있습니다)

# 질문에 답하기

  1. openpyxl 다루기

주어진 데이터

  • 각 회차별 로또 정보

로또정보

#목표

  • 수집된 로또번호.xlsx 파일을 불러온다.
  • 1부터 45까지의 key를 가지고 있는 dictionary를 생성한다.
  • 로또번호를 회차별 읽어가며 각각의 key에 넣는다.
  • 가장 많이 횟수가 나온 숫자부터 나열한다.
  • 가장 많은 횟수가 나온 숫자 6개를 뽑아낸다.
  • 로또 번호 6자리를 랜덤으로 4회 추천한다

구현


import openpyxl
import operator
import random

wb = openpyxl.load_workbook("로또번호.xlsx")
ws = wb.active    #활성화된 시트 불러오기

wr = ws.rows     #활성화된 시트에서 행별로 불러오기

numbers_count = {x:0 for x in range(1, 46)}

for row in wr:        #행별로 불러오기
    for i in row[1:]:           #불러온 행에서 첫번째 cell을 제외한  cell별로 추출하기 (단 아직 value값은 아님)
        numbers_count[i.values] += 1            #numbers_count의 같은 key값에 +1

print(numbers_count)   # dic 형태로 각 숫자별 횟수 나열

sorted_num = sorted(numbers_count.items(), key=operator.itemgetter(1), reverse=True)    #가장 많은 횟수가 나온 숫자 기준으로 정렬 (value 기준 정렬)

print(sorted_num[0:6])      #제일 앞 인덱스부터 6번째까지 출력
for i in sorted_num[0:6]:
    print(i[0]. end ="  " )   #value 값만 추출하여 원하는 숫자 6개 출력

for j in range(4):             # 4회 추천
    print(end="\n")
    for i in range(7):        #숫자 6개 출력
        print(random.randrange(1, 46), end = " ")            #1부터 45까지 범위 설정

#print
{1: 122, 2: 112, 3: 111, 4: 115, 5: 119, 6: 107, 7: 114, 8: 118, 9: 88, 10: 120, 11: 120, 12: 123, 13: 121, 14: 122, 15: 116, 16: 109, 17: 123, 18: 121, 19: 118, 20: 124, 21: 112, 22: 91, 23: 99, 24: 114, 25: 111, 26: 116, 27: 126, 28: 104, 29: 106, 30: 105, 31: 118, 32: 96, 33: 121, 34: 133, 35: 105, 36: 115, 37: 117, 38: 110, 39: 116, 40: 125, 41: 103, 42: 108, 43: 123, 44: 112, 45: 121}
[(34, 133), (27, 126), (40, 125), (20, 124), (12, 123), (17, 123)]
34 27 40 20 12 17 
------------------

17 35 10 21 2 2 12 
42 20 2 42 19 1 6 
31 45 22 28 24 15 17 
41 8 5 44 39 1 11

  • key값과 value값 각각의 기준으로 나열하기
  • sorted_num = sorted(numbers_count.items(),key=operator.itemgetter(1), reverse=True)