💰 파이썬을 이용한 로또 프로그래밍 미니 프로젝트 💰
최근 크리스마스 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(1, 46), 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__" :
자... 우리 이제 로또를 사러 갑시다...🏃♀️
'😎 프로젝트 만들기 > - 기타 프로젝트' 카테고리의 다른 글
[python&mysql] 은행시스템 만들기 - 5. 완성! (0) | 2022.01.17 |
---|---|
[python&mysql] 은행시스템 만들기 - 4. pymysql 모듈로 연동시키기 & 판다스로 테이블 출력해보기 (0) | 2022.01.17 |
[python&mysql] 은행시스템 만들기 - 3. Mysql에서 user,db,table 생성하기 (0) | 2022.01.17 |
[python&mysql] 은행시스템 만들기 - 2. 클래스, 함수 작성하기 & 파일입출력 (0) | 2022.01.17 |
[python&mysql] 은행시스템 만들기 - 1. 프로젝트 구상 (0) | 2022.01.17 |