Glacier's Daily Log

Python) 파이썬으로 로또 1등번호 추첨기 만들기 본문

Coding/Python

Python) 파이썬으로 로또 1등번호 추첨기 만들기

h__glacier_ 2020. 5. 9. 13:04
반응형

자바를 공부할 때, 로또추첨기를 만들어 본 적이 있다.

이유는 단순하다.

가끔씩 로또 사는것을 즐기는데

그냥 사면 재미없잖아.

 

그래서 6개의 숫자에

항상 의미를 부여해서 산다.

 

예를 들면 휴가 날짜를 조합한다던지

여자친구가 있을땐, 사귄 날짜 수를 조합한다던지

 

그냥 나만 알수 있는 의미부여를 한다.

 


이번에는 파이썬을 배우고 있으니까

파이썬을 이용해서 로또 번호 추첨기를 만들어 보려고 했다.

 

저번에 말했듯이, 파이썬은 쉽고 문법이 간결해서

내가 만들고 싶은것을 만드는데 집중 할 수 있다.

 

자바처럼, 과연 이 코드가 실행이 될까

와 같은 문법 걱정은 안해도 된다는 것이 가장 큰 장점 인 것 같다.

 

따라서, 30분도 안되어서

완성하는데 성공했다.

 

우선 결과부터.

 

결과 콘솔창

 

우선 로직을 간단히 설명하면

mode 변수에 로또 번호를 추첨할지 / 이전 로또 1등번호를 조회할지 입력받는다.

 

if문을 이용해서, mode가 1일때,

몇 게임을 추첨할지 입력받는다.

 

while True :
    mode = int(input('>>> 로또 번호를 추첨하려면 1을, 이전회차 로또 번호를 조회하려면 2를 입력하세요. : '))
    print('\n')

    #로또 디스펜서
    if mode == 1 :
        count = int(input('>>> 몇 게임을 추첨하시겠습니까? (1게임 이상 추첨) : '))

지금까지의 코드이다.

input 값을 그냥 변수에 대입시켜도 되지만

if문에서 처리하기 쉽게 int형으로 변환했다.

 

many = int(input('>>> 1이상 1000 미만의 선호하는 숫자를 입력하세요. (랜덤추첨 Seed 번호) : '))
        print('>>> 총', count, '게임, Seed 번호', many , '을 입력하셨습니다.')

그 후에,

Seed 값을 입력받는다.

이 입력받은 Seed 값은, 나중에 로또 번호를 추첨할때

입력받은 씨드 값 만큼 번호를 랜덤으로 돌린다.

 

그리고, 씨드값이 1이상 1000미만이 맞으면

로또 추첨을 시작한다.

 

하지만 이에 벗어나면 다시 입력하라는 문구를 띄운다.

 

if many >= 1 and many < 1000 :
            #결과창
            print('\n------------------------------------------------------------------------\n')
            a = 0
            b = 0
            c = 0
            # 로또 번호 만들기
            lotto = []
            while b < 45:
                lotto.append(b+1)
                b += 1
            # 로또 번호 6개 랜덤 추첨
            print(' >>> 로또 번호를 추첨합니다.\n')
            while a < many:
                while c < count:
                    random.shuffle(lotto)
                    c += 1
                    print(' ○> || %d || %d || %d || %d || %d || %d || <○\n'%(lotto[0], lotto[1], lotto[2], lotto[3], lotto[4], lotto[5]))
                a += 1
            print(' >>> 행운을 빕니다. 1등이 되는 그날까지 :)')
            print('\n------------------------------------------------------------------------\n')

            requ = int(input('>>> 프로그램을 종료하려면 1을, 한번 더 보시려면 2를 입력하세요. : '))
            print('\n')
            if requ == 2 :
                continue
            else :
                break

        else :
            print('\n - Seed 번호의 유효범위는 0 < N < 1000 입니다. 다시 입력하세요. -\n')
            continue

이까지다.

 

추첨창 안의 코드를 설명하자면, 

a,b,c 변수를 0으로 초기화해준다.

 

그리고 lotto 라는 리스트 (List)를 만들어준다.

 

그리고 반복문을 이용하여

lotto라는 List에, 45번동안 b+1이라는 값을 append 해준다.

append는 리스트에 값을 집어넣는 함수이다.

 

그래서 b < 45 일때 까지, b+1이라는 값을 계속 넣어주면

lotto[] 에는, [1,2,3,4,5,6,,,,,,,,,,,,,,,44,45]

이렇게 45까지의 로또 번호가 저장된다.

 

그럼 이제 로또 번호를 뽑았으니, 그 중 6개를 랜덤으로 추첨할 차례이다.

 

위에서 몇 게임을 추첨할건지를 'count' 라는 변수에 입력받아 넣었다.

그래서 또 반복문을 이용해서

a < count가 될때 까지, 실행한다.

 

Seed 번호 로직은 솔직히 없어도 충분하다.

없었으면 그냥 위에 count 까지만 코드를 짜도 잘 작동한다.

 

하지만 그냥 버튼만 누르면 컴퓨터가 랜덤으로 뽑아주는 프로그램 보다는

그래도 내가 선호하는 번호를 입력해서, 나온 번호가

조금 더 의미있고, 가능성이 있어 보이지 않는가? ㅋㅋㅋㅋ

나는 그렇게 생각해서, Seed번호 로직을 추가했다.

 

따라서, Seed 번호를 many라는 변수에 넣었기 때문에

while a<many 가 될때까지

 

random.shuffle(lotto) 를 한다.

이 구문은

lotto 라는 리스트 안에 있는 구성요소들을

랜덤으로 섞는다는 의미이다.

 

이 코드를 거치면 lotto[]는

[3,45,6,8,3,,,,,,]

이런식으로 랜덤으로 섞이게 된다.

 

그 후에 

 

print(' ○> || %d || %d || %d || %d || %d || %d || <○\n'%(lotto[0], lotto[1], lotto[2], lotto[3], lotto[4], lotto[5]))

이렇게

0에서 5까지

6개의 숫자를 프린트 해줌으로서

우리가 로또번호를 받아볼 수 있는 것이다.


 

굉장히 간단한 로직이였고

어떻게 보면 쉬운 프로그램이지만,

 

이렇게 내가 생각한 아이디어들을

직접 내손으로 코딩해보면서 완성한 프로그램을 보면

뿌듯하기 그지없다.

 

오늘, 5월9일에 추첨하는 로또를

이 프로그램을 이용해서 사보았다.

 

과연 좋은 결과가 있을 것인가,,?ㅋㅋㅋ

만약 1등을 한다면 더이상 이 블로그에 글이 올라오지 않을 것이다.

 

이 포스팅이 성지글이 되길 바라며 포스팅을 마무리 해 보겠다.

반응형
Comments