티스토리 뷰
파이썬에는 무작위로 어떤 수를 뽑아주는 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() 이라는 함수를 이용하면 되는데 이에 대해서는 뒤에서 다시 다루도록 하겠습니다. |
'파이썬 강의 > 기본편' 카테고리의 다른 글
[파이썬 기본편] 4-1.문자열 (0) | 2021.02.03 |
---|---|
[파이썬 기본편] 3-5.퀴즈 #2 (6) | 2021.02.02 |
[파이썬 기본편] 3-3.숫자처리함수 (2) | 2021.01.31 |
[파이썬 기본편] 3-2.간단한수식 (6) | 2021.01.30 |
[파이썬 기본편] 3-1.연산자 (0) | 2021.01.29 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Visual Studio Code
- ChatGPT
- coloso
- Unity
- 챗GPT
- c언어
- 나도코딩
- 아나콘다
- game
- 코랩
- 환경설정
- GUI
- 파이썬
- Coding
- Tkinter
- 비주얼 스튜디오 코드
- 행맨
- 파이게임
- Colab
- pygame
- repl.it
- 주피터노트북
- pycharm
- onlineclass
- Xcode
- Mac
- vscode
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
글 보관함