프로그래밍/python

파이썬으로 로또 번호 생성기 만들기

콘파냐 2017. 4. 25. 22:10

로또 번호를 생성하기 위해 난수를 발생시켜야 합니다. 파이썬 난수에 관한 모듈은 random 모듈 입니다. 이 모듈 내부에 Random 클래스가 존재하고 메르센 트위스터 생성기를 사용하여 난수를 생성합니다. random 모듈을 import 하면 Random클래스의 객체가 _inst라는 이름으로 생성되고 내부의 멤버 함수들이 


멤버함수이름 = _inst.멤버함수이름 


이라는 형식으로 바인딩됩니다.


예를들어 random.random은 random._inst.random를 바인딩한 함수라고 표현할 수 있습니다.


2017/04/23 - [프로그래밍/python] - 파이썬 랜덤(random) 모듈로 난수 생성하기


random.random=random._inst.randomrandom.random=random._inst.random


어찌되었건 random모듈에 대한 구체적인 사용법은 위 링크를 참조하고 간단한 로또 번호 생성기를 만들어 보겠습니다.

저도 처음 만드는 거라 생각나는 데로 하나씩 기능을 추가해 가겠습니다. 


로또 번호 생성 구현

1부터 45까지의 숫자를 랜덤하게 6개 뽑는 방법은 대단히 쉽습니다.

random.sample(range(1,46), 6)

그런데 IDLE 상에서 계속 작업하는 건 좀 그렇겠죠.


GUI 구현

tkinter를 이용하여 GUI를 구현해 보겠습니다.

간단한 GUI간단한 GUI

번호 생성 버튼을 누를 때 마다 새로운 6개의 난수가 만들어지는 것을 알 수 있습니다.


너무 간단하니 몇가지 기능을 좀 추가해 보도록 하겠습니다.


  • 제외할 번호 선택 기능

제외할 번호를 선택하는 기능을 추가하면 단순하게 sample을 사용하기 힘듭니다. sample이 될 리스트를 가공(제외할 수를 빼기)해서 sample의 인자로 넘겨주던지 아니면 sample을 사용하지 않고 random한 수를 하나씩 생성해서 제외할 수인지 아닌지를 판단할 수도 있습니다.

이 외에도 sample로 생성한 수 중에 제외할 수가 있는지를 판단하는 방법도 있는데 이 방법은 제외할 수가 어느정도로 많아지게 되면 문제가 생기므로 이 방법은 사용하지 않는 것이 좋습니다.

여기서는 두 번째 방법(난수를 하나씩 생성하는 방법을 사용하겠습니다.)



 


체크박스와 라벨이 45개가 추가되야 하므로 루프로 처리했습니다. gen_number 함수도 난수를 하나씩 생성해서 제외된 수와 비교하는 로직이 추가되었구요. tkinter에 익숙하지 않다면 어려울 수도 있지만 로직 자체는 어렵지 않습니다.

다양한 기능을 더 추가할 수도 있습니다. 파일을 공유해 드릴테니 꼭 추가할 번호에 대한 체크박스도 추가해 보세요.

lotto.py

lotto.exe

lotto.exe는 pyinstaller로 만든 윈도우 실행파일 입니다. 자신의 컴퓨터에 파이썬이 설치되지 않았다면 실험적으로 이 파일을 받아서 실행해 볼 수는 있겠지만 용량이 9MB가 된다는 걸 감안하셔야 합니다. python이 설치되지 않은 환경에서 실행을 위한 파이썬 코어가 포함되기 때문에 기본용량이 이렇게 될 수 밖에 없으니 오해마세요. 혹시 바이러스 검색엔진이 바이러스라고 보고할 수 도 있지만 오진므로 걱정안하셔도 됩니다.

실행파일을 구동하는 것도 엄청 느리네요. 역시 파이썬...


주의 : 이 프로그램은 예제를 위한 것으로 이를 사용함으로써 생기는 문제의 책임은 이용자에게 있습니다.

반응형