2019.04.25 TIL
(TIL은 스스로 이해한 것을 바탕으로 정리한 것으로 오류가 있을 수 있습니다)
# 질문에 답하기
- 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)