생 성 1 - 5 난수 함 수 를 1 - 7 난수 함수 로 변환 하 는 실현 방법
문제.
1 - 5 난수 생 성 함수 random5 (확률 평균), 이 를 생 성 1 - 7 난수 random 로 변환 하 는 방법7 의 함수 (확률 평균), random 모듈 사용 불가
사고방식 1 (거짓)
직접 random5 생 성 된 난수 곱 하기 7 / 5 후 round 함 수 를 통 해 반올림 후 출력
random_출력
random_출력
1
1
2
3
3
4
4
6
5
7
아주 나 쁜 생각..
사고방식 2 (거짓)
random 2 회 생 성5. 이들 의 값 을 더 한 후 1
random_5 + random_5 - 1
을 줄 이 고 난수 1 - 9 를 얻 은 다음 에 다시 판단 하여 8 과 9 를 제거 하고 1 - 7 로 돌아 갈 때 만 출력 한다.하지만 곧 두 번 만 random5. 모두 1 을 되 돌 릴 때 만 1 을 되 돌려 주 고 확률 은 다른 6 개 수 를 되 돌려 주 는 것 보다 훨씬 적다.
또 나 쁜 생각 이 군..
사고방식 3 (True)
random_5 * 2 - 1
의 반환 결 과 는 [1, 3, 5, 7, 9]
이 고 확률 을 기 다 려 1 - 10 을 생 성 하려 면 이 반환 값 에 무 작위 로 생 성 된 0 과 1, 즉 random.randint(0, 1)
random_5 * 3 - 2
대응 해 야 하 는 random.randint(0, 2)
도 random.randint(1, 3) - 1
random_5 * 5 - 4
대응 해 야 할 random.randint(1, 5) - 1
, 즉 random_5 - 1
그러면 기본 적 인 함수 체 가 나온다. 바로 random_5 * 5 + random_5 - 5
import random
# 1-5
def random_5():
return random.randint(1, 5)
# 1~7
def random_7():
while True: #
n = (random_5()-1)*5 + random_5()-1 # 0~24
if n <= 20:
return n % 7 + 1
if __name__ == '__main__':
print(random_7())
진급 하 다
방금 나 온 핵심 코드 는 상 변 수 를 제거 한 후에
random_5 * 5 + random_5
가 되 었 다. 마치 2, 8, 16 진법 이 10 진법 으로 전환 하 는 방법 처럼 보인다. 즉, 5 진법 으로 이해 할 수 있다. 이런 사상 을 통 해 우 리 는 통용 되 는 난수 전환 방법 을 얻 을 수 있다. 구체 적 인 코드 는 다음 과 같다.import random
import math
class RandomIJToRandomAB(object):
""" i-j , a-b """
def __init__(self, i, j):
self.i = i
self.j = j
ij_dif = j-i
if ij_dif <= 0:
raise ValueError
self.ij_dif = ij_dif
def random_ij(self):
return random.randint(0, self.ij_dif)
def random_ab(self, a, b):
ab_dif = b-a
digit = int(math.ceil(math.log(ab_dif+1, self.ij_dif+1))) # (ab_dif) ij_dif+1
while True: # return None
# digit ij_dif+1 , 10
random_res = 0
for item in range(digit):
random_res += self.random_ij() * pow(self.ij_dif+1, item)
#
if random_res <= ab_dif:
return random_res+a
if __name__ == '__main__':
print('0~1 2~11 ')
random_1 = RandomIJToRandomAB(0, 1)
print(random_1.random_ab(2, 11))
print('-'*50)
print('1~5 1~7 ')
random_1_5 = RandomIJToRandomAB(1, 5)
print(random_1_5.random_ab(1, 7))
print('-'*50)
print('1~7 1~5 ')
random_1_7 = RandomIJToRandomAB(1, 7)
print(random_1_7.random_ab(1, 5))
print('-'*50)
Github 원본 주소:
random5_to_random7: https://github.com/shelmingsong/algorithm_practice/blob/master/31_random5_to_random7_20170824.py
random_ij_to_random_ab: https://github.com/shelmingsong/algorithm_practice/blob/master/32_random_ij_to_random_ab_20170824.py
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.