본문 바로가기
코딩/Python

[파이썬 활용] 연금복권 번호 생성 프로그램(랜덤 숫자 뽑기)/randint, sample

by 나홀로코더 2022. 5. 7.
반응형

목차

1. 주제 소개

2. random.randint()와 random.sample() 메서드 사용하기


 

1. 주제 소개

 

조회수는 거의 없지만 생활속의 파이썬 활용 사례 소개를 시도한 아래의 글에 이어서 또 한가지 생활속 활용 사례를 소개한다.

 

[파이썬 활용] 친구와 함께 여행 사진 고르기(리스트의 교집합 구하기)

 

[파이썬 활용] 친구와 함께 여행 사진 고르기(리스트의 교집합 구하기)

목차 1. 주제 소개 2. 파일 목록 가져오기 3. 파일 목록 간에 겹치는 항목 뽑아내기 1. 주제 소개 생활 속에서 파이썬을 활용하는 사례를 소개하려 한다. 여행을 한번 다녀 오면 많게는 수천 장의

codealone.tistory.com

 

필자는 가끔 동행복권 사이트에 들어가서 연금복권을 구매한다. 로또는 온라인 구매가 안 되지만 연금복권은 가능하다.

 

동행복권에 가입해서 예치금을 충전하고 홈페이지에서 구매를 하면 되는데, 번호를 자동으로 골라 주는 기능도 있다.

 

그런데 괜한 의심이긴 하겠지만 한번도 당첨되지 않다 보면 왠지 자동 추첨을 이용하기 때문이 아닐까 하는 생각이 든다.

 

그렇다고 특정 번호를 정해 놓고 하기에는 특별히 하고 싶은 번호도 없을 뿐더러 연금복권은 미리 정해 놓은 번호를 다른 사람이 먼저 사면 구매도 안 되어서 불편하다.

 

그래서 나만의 연금복권 번호 생성기를 만들어 쓰고 있다..^^

 

단 세 줄짜리 프로그램인데, random 모듈의 활용례로 소개한다.

 

반응형

 

2. random.randint()와 random.sample() 메서드 사용하기

 

연금복권의 번호는 1~5까지의 조를 선택하고, 6자리 숫자를 고르는 방식이다. 조는 중복 선택이 안 되고, 6자리 숫자는 중복이 허용된다.(아래 예를 보면 0이 2번 나온다)

 

연금복권 당첨번호

 

먼저 random 모듈을 불러온다.

 

>>>import random

 

먼저, 조를 고르기 위해서는 중복을 허용하지 않으면서 1~5까지의 숫자 중에 원하는 개수만큼 뽑아야 하는데, 이때는 sample 메서드를 사용하면 된다.

 

필자는 보통 2개씩 구매하기 때문에 2개의 조를 뽑아보도록 하겠다. 아래와 같이 random.sample() 메서드의 인자로 샘플링할 모집단과 추출할 샘플의 개수를 넘겨 준다.

 

>>>random.sample([1,2,3,4,5], 2))
[3,  4]

 

3조와 4조를 구매하라고 알려준다.

 

이젠 6개의 번호를 뽑아 보자. 이때는 중복이 허용되므로 sample을 쓸 필요가 없다. random.randint() 메서드의 인자로 시작 번호와 끝 번호를 넘겨준다.

 

>>>random.randint(0, 9)
6

 

6을 골라줬다.

 

이것을 6번 실행하면 되는데, 좀더 편하게 하기 위해서 리스트 컴프리헨션을 사용한다.

 

>>>[random.randint(0,9) for i in range(6)]
[5, 4, 8, 4 ,2, 1]

 

리스트 컴프리헨션을 모른다면 아래 글을 읽어보기 바란다.

 

파이썬에서 코드 한줄로 리스트(딕셔너리, 집합, 제너레이터) 만들기/리스트컴프리헨션, list comprehension

 

파이썬에서 코드 한줄로 리스트(딕셔너리, 집합, 제너레이터) 만들기/리스트컴프리헨션, list compr

서론 파이썬의 기초를 배우고 있는 사람이라면 아래와 같은 코드를 한번쯤 보았을 것이다. 반복문을 이용해 리스트를 만드는 방법으로, 대부분의 튜토리얼에서 이 방법을 먼저 선보이고 있는

codealone.tistory.com

 

위와 같은 방법응로 만들어 필자가 사용하는 전체 코드는 다음과 같다.

 

import random

print("GROUPS", random.sample([1, 2, 3, 4, 5], 2))
print("NUMBER", [random.randint(0, 9) for i in range(6)])

 

위 스크립트를 실행하면 다음과 같이 번호를 뽑아 준다.

 

GROUPS [2, 5]
NUMBER [5, 2, 1, 0, 0, 7]

 

참고로, 좀더 복잡하지만 sample 메서드를 사용하지 않고도 아래와 같이 중복값 없는 조추첨이 가능하다. 그러나 편리한 메서드가 있으니 그것을 그냥 쓰도록 하자.

 

groups = [random.randint(1,5) for i in range(2)] # 중복을 허용하면서 2개의 숫자 추첨
while groups[0] == groups[1]: # 2개의 숫자가 같은 경우에
    groups[1] = random.randint(1,5) # 숫자를 새로 뽑아 두번째 숫자를 대체하는 것을 반복
반응형

댓글