TOP
class="layout-aside-left paging-number">
본문 바로가기
[파이썬 Projects]/<파이썬 기초>

[파이썬] 로또 번호 생성 프로그램 만들기

by 기록자_Recordian 2024. 7. 3.
728x90
반응형

 

수행 내용 및 목표

 

로또 번호를 생성해주는 (6개 번호 * 5개) 코드를 짜고,

이를 실행 프로그램으로 만든다.


로또 번호 생성 코드 짜기

 

로또 번호를 생성하는 방법의 경우,

딥러닝을 통해 과거 당첨 번호 내역까지 전부 받아서 이를 분석하여 추출하는 방법도 있으나,

"로또 번호 분석" 등의 검색어를 통해 구글링을 해보신 분들은 알겠지만,

로또 번호가 과거의 당첨 내역과 아무런 상관 관계가 없는 독립 변수이므로 분석이 무의미 하다고 한다.

(나도 tensorflow, keras 등의 딥러닝을 통해 로또 번호 생성기를 만들려고 해봤으나,

이미 많은 분들이 실행을 했고, 그 결과가 별로 좋지 않았기에 마음을 접었다.)

 

물론, 머신러닝을 공부하고 싶은 마음에서는 추후 분석을 해보고 싶긴하다.

 

아무튼, 앞선 이유로 코드는 1부터 60까지의 수 중 임의로 6개의 숫자를 5번 출력할 수 있게끔 작성한다.

▶ 로또 번호는 45번까지 있어 수정하였습니다.

# 로또 번호
from random import sample
import random
numbers = range(1, 46)
times = 0

print('---금주 행운의 숫자---')

while times < 5:
    times = times + 1
    luck_numbers = sample(numbers,6)
    print(luck_numbers)

    if times == 5:
        print('당첨을 기원합니다')

[수정!]

로또 번호는 1부터 45번까지 선택할 수 있는데, 기존 버전은 60번까지 번호가 추출되게끔 했었다.

(그럼에도 아무도 지적을 안 해주셔서 까맣게 몰랐다는...)

그래서 해당 코드를 수정하여 45번까지만 나오게끔 하였다.

---금주 행운의 숫자---
[37, 45, 38, 23, 28, 27]
[20, 29, 28, 42, 18, 17]
[4, 17, 10, 32, 27, 11]
[2, 36, 26, 15, 32, 20]
[5, 45, 11, 40, 3, 41]
당첨을 기원합니다

 

◆ 각 라인 별 설명
1.2 : random 및 sample 함수를 사용하기 위한 모듈 import
3. numbers 는 1부터 45까지의 숫자(끝 숫자는 제외하므로, 45까지 나오게 하려면 46)
4. times = 0 : 숫자 리스트를 출력할 횟수.
6. '---금주 행운의 숫자---' 라는 텍스트 출력
8. times 가 5번 미만일 때 까지
9. times는 시행 시마다 1이 추가 된다. (횟수 증가 표현)
10. (times가 5번 돌아갈 동안) 1부터 60까지의 숫자(number 변수) 중 임의대로(sample 함수) 6번 추출하고, 'luck_numbers' 라는 변수에 저장
11. 그리고 luck_numbers 변수 내용을 출력
13. 만약 times 가 5가 되면 (while 문을 5번 돌리면)
14. '당첨을 기원합니다' 라는 문구 출력하며 while 문 종료

실행 파일 만들기 (오류 해결 편)

 

◆  PyInstaller 패키지 설치

먼저 윈도우 키 + r 을 누르고 cmd를 쳐서 명령프롬프트 창을 켠 후, pyinstaller 패키지 설치 명령어를 입력

 

파이인스톨러(Pyinstaller 공식 홈페이지)

https://pyinstaller.org/

pip install pyinstaller

 

그리고 exe로 만들고 싶은 python 파일이 있는 폴더로 이동한 다음, 아래 명령어를 입력하면 해당 폴더에 실행 파일이 만들어 진다.

※ 폴더 경로를 이동하는 법은 프롬프트 명령어 창에서 cd 이동하고자 하는 경로 입력하면 된다.

예. 

cd C:\Users\niceq\Documents\DataScience\Practice\Source_code

 

해당 명령어를 입력하면 경로가 바뀌는데, 여기서 exe 파일을 만들고자 하는 파이썬 파일명과 함께 아래 명령어를 입력하면 된다.

pyinstaller --onefile 바꾸고싶은파일명.py

 

 

또 여기서 아래와 같은 내용이 나오는데, 이럴 때에는 먼저 파악해봐야할 게 있다.

'pyinstaller'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다.

※ 'pyinstaller'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다. 오류 발생 시 해결법

(진짜 몇 시간동안 찾아보고 성공했다.)

 

◆ 시스템에서 환경 변수에 파이썬이 설치된 경로를 추가해줘야 한다.

 

두 가지 경로를 추가해야 하는데, 

나의 경우는 아래와 같았다.

C:\Users\사용자이름\AppData\Local\Programs\Python\Python312\
C:\Users\사용자이름\AppData\Local\Programs\Python\Python312\Scripts\

(구글링을 해보니, 대부분이 해당 경로에 파이썬이 설치되어 있는 거 같았다.)


주피터 노트북 사용 시!

 

환경 변수를 추가하고 나서 실행해봐도 여전히 안되어 구글링을 열심히 했었다.

그러다가 확인한 게, 평소에 파이썬 작업을 주피터 노트북으로 하다보니 파일의 확장자가 py가 아니라는 것이었다.

그러니, 아무리 검색을 해봐도 존재하지 않는다는 답변을 받았던 것이었다.

 

이럴때는 .ipynb 확장자로 된 파일을 .py로 변환해주는 작업을 하면 되는데, 우선 anaconda prompt를 켜고

하단의 명령어를 참조하여 입력하면 된다.

jupyter nbconvert --to script 바꾸고자하는파일명.ipynb

.py 파일로 잘 변환되었다.


실행 파일 만들기

 

py로 변환된 파일을 아래의 명령어를 참조하여 입력하면

pyinstaller --onefile exe로만들파일명.py

해당 파일이 들어있는 폴더에 build, dist 폴더가 생성되고

dist 폴더에 들어가면 exe 파일이 잘 생성된 것을 확인할 수 있다.


exe 파일이 바로 꺼질 경우

 

exe 파일을 실행했는데, 실행하자마자 바로 꺼진다.

exe 파일 자체가 문제가 있나 확인해봤는데, 문제는 없는 듯 하다.

 

[문제 확인 방법]

cmd 프롬프트 창에 exe 파일 경로를 입력하고 enter를 누르면 된다.

만약 오류가 있다면 잘 실행되지 않는다.

 

역시나 구글링을 통해 알아낸 결과, 기존 코드에 두 가지 줄만 추가하면 된다.

첫 줄에 import os

마지막 줄에 os.system('pause')

 

그리고나서 anaconda prompt를 켜서  .ipynb 확장자로 된 파일을 .py로 변환하고, exe 파일로 만들어주면 된다. (명령어는 위에 나와있다.)

 

<전체 코드>

import os

# 로또 번호
from random import sample
import random
numbers = range(1, 46)
times = 0

print('---금주 행운의 숫자---')

while times < 5:
    times = times + 1
    luck_numbers = sample(numbers,6)
    print(luck_numbers)

    if times == 5:
        print('당첨을 기원합니다')

os.system('pause')

 

[로또 번호 생성기 파일]

New_Lotto.exe
7.69MB

 

(기존에 60번까지 나오던 파일을 수정하여 다시 올렸습니다)

그냥 켜서 실행하시면 자동으로 번호가 나옵니다. (물론, 당첨은 확신하지 못합니다 ^^)

 

[필자가 직접 구매한 후기]

 

필자 역시 로또 번호 생성 프로그램을 이용하여 로또를 구매해봤다.

 

 

결과는...

결론: 현생을 열심히 살아야 겠다!


[참고 블로그]

https://joorang.tistory.com/38

https://m.blog.naver.com/haejoon90/220740593679

https://monand0603.tistory.com/30

https://wikidocs.net/21952

 

728x90
반응형