일상생활을 하다 보면 난수를 이용해서 문제를 해결해야 할 일이 참 많이 발생합니다. 예를 들면 복권을 뽑는 것도 random 하게 해야 하고 표본을 표집 할 때도 난수를 이용해서 표본을 표집해야 모집단의 특성이 반영될 확률이 높습니다. 이처럼 자주 사용되는 난수를 파이썬을 이용해 다루어 보도록 하겠습니다.
난수 사용하기(random number)
파이썬에서 난수(random number)를 만드는 방법을 알아보고 난수와 관련된 몇 가지 문제들을 풀어보도록 하겠습니다.
정수형 난수 만들기
[random 모듈]의 randrange()나 randint()를 이용하면 원하는 정수 범위 안에서 난수를 만들 수 있습니다.
import random
random.randrange(1, 7, 2) # 1, 3, 5 중 하나를 랜덤하게 발생
import random
random.randint(1, 6) # 1이상 6 이하 난수 생성
컴퓨터의 난수는 내부적으로 규칙을 가지고 발생시키기 때문에 seed()를 이용해서 재현이 가능합니다. 예를 들어서 난수의 씨앗(seed)를 설정해준 후에 난수를 만들면 같은 숫자가 반복해서 만들어집니다.
import random
random.seed(1) # 생략하면 현재 시간 사용
for i in range(0, 20):
print(random.randint(1, 6), end=" ")
실수형 난수 만들기
여기서 실수는 부동소수점 표현법을 사용하는 float 자료형을 의미합니다. 보통 random(), uniform(), gauss() 세 가지를 많이 사용하는데 여기서는 기본적인 함수 사용법만 알아보겠습니다.
import random
random.random() # 0.0 이상 1.0 미만의 float형 난수
import random
random.uniform(0.0, 1.0) # 0.0이상 1.0 이하의 float형 균일 분표
import random
random.gauss(0.5, 0.01) # 평균이 0.5이고 표준편차가 0.01인 정규 분포
50명이 택시를 호출하였다고 가정합니다. 그런데 승객을 태우러 가는데 걸리는 시간 5분 이상 15분 이내인 경우만 승객을 받는다고 가정하고 총 몇 명의 승객이 태웠는지 알려주는 프로그램을 작성.
from random import *
count = 0
주사위 굴리기
while루프를 사용하여 주사위를 숫자 3이 나올 때까지 굴려봅시다. 마지막 3도 출력이 되어야 하며 print()
는 한 번만 사용해서 나타냅니다.
import random
주사위 2개 굴리기
주사위를 2개 굴려서 합이 6이 될 때까지 반복.
import random
숫자 맞추기 게임
컴퓨터가 1 이상 100 이하의 난수를 하나 만든 후에 사용자에게 맞추도록 하는 게임을 만들기.
import random
num = random.randint(1, 100)
try_count = 0
산수 문제 생성기
난수를 이용해서 간단한 사칙 연산 문제를 만들고 사용자가 맞출 때까지 답을 입력받는 프로그램을 만들기. 1이상 9 이하의 정수형 난수 두 개를 사용하고 0 이상 3 이하의 정수형 난수를 만들어서 4가지 연산자 ("+", "-", "*", "//") 중에서 하나를 임의로 선택. 나누기는 답이 정수가 나오도록 정수 나누기(//)를 사용.
4가지 연산자에 대해 if-elif를 사용해서 만들기.
import random
num1, num2 = random.randint(1, 9), random.randint(1, 9)
op = random.randint(0, 3)
if
는 사용하지 않고 eval()
과 while
을 사용해서 간결하게 구현. random.choice()
는 시퀀스의 아이템 중 하나를 랜덤 하게 골라줌.
import random
num1, num2 = random.randint(1, 9), random.randint(1, 9)
op = random.choice(("+", "-", "*", "//"))
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
'수학과 코딩' 카테고리의 다른 글
python list, set, dict, tuple comprehensions (0) | 2022.08.09 |
---|---|
파이썬 랜덤(random) 사용법 정리(randrange, randint, random.choice 등) (0) | 2022.08.06 |
윤년찾기(leap year) 파이썬(python) 날짜와 시간(date and time) (0) | 2022.08.04 |
Python 평균(Mean), 회문(Palindrome)검사, 플로이드 삼각형 (0) | 2022.08.04 |
Python Mean, Palindrome, Item change, Floyd Triangle(평균, 회문, 아이템변경, 플로이드 삼각형) (0) | 2022.08.02 |
댓글