파이썬_실전 프로젝트

중복되지 않은 무작위의 3자리 숫자 생성하기

중복되지 않은 3자리의 무작위 숫자 생성하는 방법입니다.
이전 토픽 숫자야구게임에서 응용해볼수 있는 내용입니다. (질문해주신 내용)
4가지 정도로 만들어 봤는데, 다양한 방법이 있을테니 여러가지로 고민해보세요.
 

 

첫번째 방법. 미리 만들어진 리스트에서 뽑아쓰고, 사용한 숫자는 삭제하기.(pop())
import random

num = list(range(1,10))  #num = [1,2,3,4,5,6,7,8,9]

number = []
for i in range(3):
    number.append(num.pop(num.index(random.choice(num))))

print(number)

랜덤하게 숫자를 선택하고, 그 숫자의 인덱스를 pop 명령으로 넣어주면, 해당숫자는 number에 추가되면서, 기존의 num 에서는 삭제가 됩니다.

 

두번째 방법. 새로운 난수를 생성할때마다 중복검사를 해서, 중복이 안될때만 추가하기.
import random

number = []

while len(number)<3:
    num = random.randint(1,9)
    if num not in number:  # 새로운 수가 중복이 아니면, 
        number.append(num)  # 리스트에 추가

print(number)

 

세번째 방법. 집합(set)을 이용하여, 자동으로 중복 제거하기

집합은 자동으로 중복된 수를 제거해줍니다. {2,3} 에다 3을 추가하면, 추가된 3은 하나만 남습니다. 추가가 안된거나 마찬가지인거죠. 에러가 나는건 아니고, 그냥 조용히 중복만 제거해줍니다.

import random

number = set()
while len(number)<3: 
    number.add(random.randint(1,9)) # 추가할 숫자가 중복이면 추가가 되질 않습니다.

print(number)

 

네번째 방법. 고등학교 수학 조합(콤비네이션)을 사용

조합은 n개의 수에서 r개를 뽑아내는 경우의 수를 의미하고, 수학식으로는 nCr이고, 파이썬 으로는

itertools.combinations('123456789',3)

위와 같고, 실행하면 3개씩 뽑아낼수 있는 모든 숫자쌍의 리스트를 반환해줍니다.

[('1', '2', '3'), ('1', '2', '4'), ('1', '2', '5'),,,,,]

 

이중에서 무작위로 하나의 조합을 고르는거죠.

import random
import itertools

numbers = list(itertools.combinations('123456789',3))
number = random.choice(numbers)

print(number)

 

 

아니면 또다른 방법으로 세자리의 난수를 생성해놓고, 각자리가 다른지를 검사해도 되겠군요. 여러가지로 시도해보세요.

댓글

댓글 본문