티스토리 뷰

파이썬에는 무작위로 어떤 수를 뽑아주는 random 모듈이 있습니다. 다음과 같이 코드를 작성하고 2~3 차례 반복해서 실행하면서 값이 어떻게 출력되는지 눈여겨 봐 주세요.

from random import * # random 모듈에서 모든 것들을 가져다 쓰겠다는 의미

print(random()) # 0.0 이상 1.0 미만의 임의의 값 생성
잠깐!

Q) from random import * 에 밑줄이 생기면서 "Unused import ..." 경고문이 뜨는데 왜 그런 건가요?

A) 예를 들어서 설명드릴게요.
1학년에 5개 반이 있는데 쉬는시간에 학생주임 선생님이 방송으로 5개 반 반장 모두 교무실로 호출합니다. 선생님은 화장실 청소 담당이 어디냐 물어보고 1반 반장이 "저희반이요" 하자 1반 반장에게 무언가 한참을 설명합니다. 그러더니 쉬는 시간이 끝났다며 다 돌아가라 한 뒤에, 다음 쉬는 시간에 또 5개 반 반장 모두를 호출합니다. 이번에는 운동장 청소 담당이 누구냐 물어보고 2반 반장이 "저희요" 하자 2반 반장에게 무언가 한참을 설명하더니, 다 됐으니 모두 가라고 합니다. 학생주임 선생님은 어느 반이 어느 구역 청소담당인지 몰라서 모든 반장들을 호출했지만, 정작 3~5반 반장들은 쉬는 시간만 뺏기고 말았지요.
import 를 할 때 *을 사용하는 것은, 모든 반 반장들을 다 불러모으는것과 같습니다. 하지만 코드에서는 모든 반 반장들을 필요로 하지는 않지요. 그래서 pylint 가 "3~5반 반장은 안와도 되겠는데요?" 하고 알려주는 것이랍니다.
코드 내에서 사용하는 모듈만 가져다쓰면 제일 좋겠지만 어느 모듈을 쓸지 명확하지 않다면 학습 과정에 있어서는 * 로 사용하셔도 괜찮습니다.

 

아마 여러 번 실행하는 동안 매번 서로 다른 수가 출력되었을 텐데, 이처럼 random() 함수는 0 이상 1 미만(1은 포함하지 않아요)의 어떤 수를 무작위로 뽑아주는 기능을 한답니다. 그리고 그 값은 매번 바뀌지요.

 

앞의 예제에서 뽑아낸 랜덤 값을 바로 활용하기에는 다소 범위가 애매하지요? 하지만 다음과 같이 조금만 변형하면 얼마든지 의미 있는 랜덤 수를 뽑아낼 수 있습니다.

print(random() * 10) # 0.0 이상 10.0 미만의 임의의 값 생성
print(int(random() * 10)) # 0 이상 10 미만의 임의의 정수 값 생성
print(int(random() * 10) + 1) # 1 이상 10 이하 (11 미만) 의 임의의 정수 값 생성

세 문장을 하나씩 풀어서 이해해보자면 이렇습니다.

코드 설명
random() * 10 0.0 이상 10.0 미만의 임의의 값 생성
int(random() * 10) (위 결과를 int 로 감싸서 정수로 변환)
0 이상 10 미만의 임의의 정수 값 생성
int(random() * 10) + 1 (위 결과에 1씩을 더함)
1 이상 11 미만
의 임의의 정수 값 생성

 

1 부터 45 까지의 범위를 가지는 로또 번호를 뽑으려면 이렇게 할 수 있겠죠.

print(int(random() * 45) + 1) # 1 이상 46 미만의 임의의 정수 값 생성

 

그런데 항상 이렇게 범위를 계산하려니 조금 머리가 아프죠?

고맙게도 파이썬에서는 보다 쉽게 원하는 범위 내의 랜덤 수를 뽑는 함수들을 제공해준답니다.

함수 이름 의미 예제
randrange 주어진 범위 내의 임의의 정수 값 생성 randrange(1, 46)
randint 주어진 범위 내의 임의의 정수 값 생성
※ 마지막 값을 포함
randint(1, 45)

주의할 점은, randint 는 마지막 값 미만이 아닌 이하, 즉 마지막 값을 포함한 범위 내에서 랜덤 수를 뽑는다는 것입니다.

print(randrange(1, 46)) # 1 이상 46 미만의 임의의 정수 값 생성
print(randint(1, 45)) # 1 이상 45 이하(45를 포함해요!!)의 임의의 정수 값 생성

 

 

로또 추첨번호를 위한 6개의 랜덤 수를 뽑기 위해 다음처럼 같은 문장을 6번 반복하면 어떻게 될까요? 어쩌면 서로 다른 6개의 수가 나올 수도 있겠지만, 아쉽게도 중복번호가 발생할 수도 있습니다. 각 문장간에는 서로 영향을 주지 않는 독립사건이기 때문이지요.

print(randint(1, 45)) # 1 이상 45 이하(45를 포함해요!!)의 임의의 정수 값 생성
print(randint(1, 45))
print(randint(1, 45))
print(randint(1, 45))
print(randint(1, 45))
print(randint(1, 45))

이럴 때는 random 모듈이 제공하는 sample() 이라는 함수를 이용하면 되는데 이에 대해서는 뒤에서 다시 다루도록 하겠습니다.
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함