트위터(X) 추첨기를 크롬 익스텐션으로 교체하는것을 고려중입니다. :: Pure Ani's Blog
페이지 정보
작성자 Olive 작성일24-09-17 02:03 조회84회 댓글0건관련링크
본문
내일 추첨기 9시에 출근해야 하지만 잠도 안 오고 유튜브만 보고 있자니 너무 지루해서 블로그에 글이나 하나 끄적이고자 노트북을 열었다. 저 지난주 즈음 6개의 전공 중 하나인 객체지향 프로그래밍 시간에 교수님이 문제를 5개나 내주셨다. 당시에는 빨리 문제를 풀면 빨리 강의를 끝내고 집에 갈 수 있어서 좀 급하게 만드느라 아주 조잡하고 보잘것없는 코드였지만 강의가 끝나고 랩실에서 보다 현실적으로 변형한 로또 추첨기 코드를 소개하겠다.문제 상황은 이러하다.물론 내가 만든 로또 추첨기는 동행 복권에서 추첨기 시행하는 로또와 같이 1~45사이의 숫자 중 랜덤으로 선택된 6개의 숫자를 정답 값으로 가지고 사용자는 6개의 숫자를 입력해 등수를 가리는 추첨기이다.거두절미하고 코드부터 살펴보겠다.먼저 함수 내외에서 사용할 random 모듈 중 choice 함수와 randint 함수를 불러온다.그 후 로또 번호를 랜덤하게 추출할 1~45의 값을 가진 리스트와 로또 당첨 번호가 담길 리스트를 생성해 준다.이제 대망의 로또 추첨기를 만들기 위해 lotto_game 함수를 선언한다.count는 추후에 로또의 당첨 여부를 알기 위해 0이라는 값을 할당해 줬고 추첨기 lotto_result는 초기에는 함수 내부에 선언했지만 추후에 로또 당첨번호를 알고 싶을 때 지역변수로써 함수 바깥에서 불러들일 수가 없어 함수 외부에 선언하고 함수 내부에서도 사용할 수 있도록 global 함수를 사용하여 함수 내부로 불러왔다.이제 함수 내부에서 로또 당첨 번호를 생성해 볼 것이다. 먼저 cld라는 변수에 lotto_default 리스트 내부에서 랜덤하게 뽑은 숫자를 할당한다. 그 후 lotto_result 리스트에 cld에 할당된 값을 집어넣고 lotto_default 리스트 내부에서 remove 함수를 통해 다음 반복 때 같은 추첨기 숫자가 뽑히지 않도록 cld에 할당된 값을 지워준다. 이 과정을 for 반복문을 통해 6번 실행해 준다.이 방법은 사실 전전 게시글인 drunk passenger ploblem에 나온 승객의 랜덤 자리 선정과 유사한 형태이다. 거기서 아이디어를 얻어 코드를 만드는 데 큰 도움이 되었다.이제 로또의 꽃, 우리의 희망 보너스 번호를 하나 따로 뽑아준다. 이제 내가 뽑은 6개의 숫자가 당첨인지 아닌지를 살펴봐야 한다. 그러기 위해서 lotto_game의 매개변수로써 입력받은 리스트를 for 반복문을 통해 차례로 돌면서 추첨기 그 숫자들이 lotto_result에 있다면 미리 0값을 할당해 놓았던 count에 +1을 해주고 만약에 그중 한 개의 숫자가 따로 뽑은 보너스 숫자(bonus)와 같다면 +0.5를 해준다. 보너스 숫자가 맞다면 +0.5를 하는 이유는 1등과 2등을 나누기 위함이다. 다음으로 내가 뽑은 숫자가 아무것도 해당하지 않는다면 pass 키워드를 통해 자연스럽게 아무것도 하지 않고 넘어가 준다.그다음 코드는 우리가 바라고 바라던 당첨 여부를 우리에게 알려주는 코드이다. 순서대로 6개의 숫자가 맞았다면 1등에, 5개 + 보너스 번호 추첨기 2등, 5개 3등, 4개 4등, 3개 5등에 당첨되었다고 알려준다. 3개도 맞추지 못했다면 우리가 매주 보는 낙첨이란 단어를 볼 수 있다. 마지막으로 우리가 로또를 살 때 수동으로 살 수도 있지만 거의 대부분 자동으로 살 것이다. 그 부분을 구현해 봤다. 이 부분은 귀찮아서 설명은 생략하겠다.자 이제 프로그램을 실행시켜보자.왼쪽 하단을 보면 알겠지만 마구마구 낙첨되는 모습이다. 뭔가 매주 내 모습을 보는 것 같고 그렇다. 손수 약 500번 정도 눌러본 결과 한 추첨기 490번은 낙첨되었고 10번 정도는 5등에 걸렸다. 놀랍게도 1234등은 한 번도 경험하지 못했다. 이걸 손수 누르고 있자니 귀찮고 우리가 로또를 사면 한 줄씩 사는 게 아니라 대부분 5줄씩 사기 때문에 그 부분도 코드로 구현해 보았다. 다만 이 코드를 사용하기 위해선 lotto_game 함수의 리턴 값이 정수여야 하기 때문에 출력 부분 return만 정수로 조금 바꿔놨다. nums 리스트는 인덱스 순서대로 낙첨 1등 2등 3등 4등 5등을 나타낸다. 사실 처음에는 낙첨 5등 추첨기 4등 3등 2등 1등 이렇게 출력되게 하고 싶었지만 뭔가 좀 귀찮을 것 같고 그래서 그냥 편하게 살기로 마음먹었다. 다 쓰고 생각해보니 그냥 리턴 값만 바꾸면 될 것 같다..하지만 귀찮은건 똑같다이 코드로 돌리니 마지막에는 1등도 당첨되었다. 사실 이 코드로 돌렸을 때 당첨이 뭔가 더 잘 되는 느낌이라 어딘가 오류가 나있는 것 같지만 그런 건 신경 쓰지 않기로 했다. 나는 그럼 농협에 가서 20억을 수령해야 하니 이만 물러가도록 하겠다. 추첨기
댓글목록
등록된 댓글이 없습니다.