😎 프로젝트 만들기/- 기타 프로젝트

[Python&파일 입출력pickle] 파이썬을 이용한 로또 프로그래밍 프로젝트

또방91 2022. 1. 20. 16:00
728x90

 

 

 

 

 

 

 

 

 

💰 파이썬을 이용한 로또 프로그래밍 미니 프로젝트 💰

 

 

 

최근 크리스마스 12/25와 새해첫날 1/1이 토요일.... 바로 로또 추첨일이었다보니

연말에 로또에 대한 생각이 막 스믈스믈 나의 생각을 차지하게 되었다.

 

저번 주 Python + Mysql + 파일입출력 프로젝트를 하고나니, 혼자서 간단하게 미니프로젝트를 할 수 있을것같다는 자신감이 생겨버렸고,  마침 오늘내일 여유가 조금 생긴 관계로 쉬는시간을 활용해 후다닥 짜봤다. 

 

 

간단하게 작성할거니, 이번에는 오로지 파이썬으로만 작성을 해봤다!

 

 

 먼저 전체 코드식부터 볼까여?? 👀

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import os
import sys
import pickle
import random
import time
from datetime import datetime
 
class Inform:
    def __init__(self,rnd,date,nums):
        self.rnd = rnd
        self.date = date
        self.nums = nums
 
        #기록 넣기
        record[rnd]={"date":date, "nums":nums}
 
class Play:
 
    #1번 번호추첨
    def draw():
        randoms = random.sample(range(146), 6#타입은 리스트
        for i in randoms:
            print(i,end=" ")
            time.sleep(1)
        ymd = str(datetime.now()).split() # ymd[0]  ex)2022-01-20 문자열
        if len(list(record.keys()))!=0: rnd = max(list(record.keys()))+1
        else: rnd = 1
        Inform(rnd, ymd[0], randoms)
 
        record[rnd]["date"]=ymd[0]
        record[rnd]["nums"]=randoms
 
        time.sleep(1)
        print("\n{}   :   {}회차 추첨번호는 {} 입니다.\n".format(ymd[0],rnd,randoms))
 
    #2번 추첨기록 (원하는 회차)
    def record_want():
        print("원하는 회차의 추첨기록을 조회할 수 있습니다.")
        select = int(input("원하는 회차 입력 ▷▶▷▶  "))
        print("{}   :   {}회차 추첨번호는 {}입니다.\n".format( record[select]['date'], select, record[select]['nums']))
 
    #3번 추첨기록 (전체 회차)
    def record_all():
        print("전체 회차 추첨기록\n")
        for k,v in record.items():
            print("{}   :   {}회차 추첨번호는 {} 입니다.".format(v['date'],k,v['nums']))
 
 
class NDsystem:
    def first():
        print("\n★ 웰컴 ★\n1~45까지의 숫자 중 6개를 뽑는 프로그램입니다! ^.^")
        print("원하시는 메뉴를 입력 해주세요!")
        print(" [1] 번호 추첨 \n [2] 추첨 기록(원하는 회차) \n [3] 추첨 기록(전체 회차) \n [4] 프로그램 종료\n")
        select = int(input("번호 입력 ▷▶▷▶  "))
 
        #1번 번호 추첨
        if select==1:
            print("========================\n     [1] 번호 추첨\n========================")
            print("긴장감을 위해 숫자 하나하나씩 보여집니다.")
            time.sleep(1)
            Play.draw()
            print("\n>>> 첫 화면으로 이동합니다    ")
            time.sleep(2)
 
        #2번 추첨 기록(원하는 회차)
        elif select==2:
            print("========================\n [2] 추첨 기록(원하는 회차)\n========================")
            print("현재까지 추첨된 번호의 기록은 다음과 같습니다\n")
            Play.record_want()
            print("\n>>> 첫 화면으로 이동합니다    ")
            time.sleep(1)
 
        #3번 추첨 기록(전체 회차)
        elif select==3:
            print("========================\n [3] 추첨 기록(전체 회차)\n========================")
            print()
            Play.record_all()
            print("\n>>> 첫 화면으로 이동합니다    ")
            time.sleep(1)
 
        #4번 프로그램 종료
        elif select==4:
            print("프로그램을 종료합니다! \n  GOOD LUCK ♣")
            with open("number_record","wb"as f:
                pickle.dump(record,f)
            sys.exit()
 
 
record = {}
 
if __name__ == "__main__":
    if os.path.isfile("number_record"):
        with open("number_record","rb"as f:
            record = pickle.load(f)
 
    while True: NDsystem.first()
cs

 


 

 프로그램 실행 순서는??👀

 

1. 89~96번줄

기존에 저장해놨던 number_record라는 로또 추첨번호 기록 파일이 있는지 여부를 조건식으로 확인한다. 있다고 하면 프로그램 실행 중 참고할 수 있도록 record라는 딕셔너리에 넣어주고 / 없으면 그냥 실행하기!

 

2. 49~86번줄

first( )함수는 입력하는 번호에 맞게 메뉴 이동을 할 수 있게 작성한 함수이다. 조건식으로 입력한 번호에 맞게 class Play 속 정의한 각 함수들 하나씩 연결 실행하게 한다.

 

3. 17~36번줄

* 1번 메뉴 draw( )함수는 random모듈의 sample함수를 이용해 6개 숫자를 뽑는다. 추첨 날짜, 회차, 추첨 번호 6개를 출력해주고, 출력했었던 data들을 record 딕셔너리에 담아준다. 

* 2번 메뉴 record_want( )함수는 저장해놓은 record 딕셔너리에서 key값으로 회차를 정해놨기에 입력을 받아주고, 딕셔너리로 된 value 안에서 key값인 추첨날짜(date), 추첨번호(nums)로 value를 출력한다.

* 3번 메뉴 record_all( )함수는 2번 메뉴와 비슷하지만, for반복문으로 전체를 꺼내주면 된다.

 

4. 82~86번줄

프로그램 종료 시 sys.exit( )으로 프로그램을 종료한다. 그 이전에 딕셔너리 record에 담아놨었던 것을 pickle 파일쓰기하여 저장해준다. 파이썬 파일과 동일 위치를 확인해보면 파일이 있을 것이다.(pickle모듈로 저장했기에 파일을 열어서 봐도 파이썬객체어라서 엄청 이상한 외계어로 써있을거다!)

 

 


 

 

 코드식 구성 한 눈에 보기?? 👀

 

class Inform

def __init___(self, rnd, date, nums)

class Play

def draw( )
def record_want( )
def record_all( )

class NDsystem

def first( )

if __name__ = "__main__" :

 

 

 

 

자... 우리 이제 로또를 사러 갑시다...🏃‍♀️

 

 

 

 

 

 

 

728x90