파이썬에서 0에서 9 사이의 난수를 생성하는 두 가지 확실한 방법이 있습니다. 0과 1 사이의 임의의 부동 소수점 수를 생성하고 10을 곱한 다음 내림 할 수 있습니다. 또는 random.randint방법을 사용할 수 있습니다 .
import random
def random_digit_1():
return int(10 * random.random())
def random_digit_2():
return random.randint(0, 9)
0과 1 사이의 난수를 생성하고 마지막 숫자를 유지하면 어떻게 될지 궁금했습니다 . 필자는 분포가 반드시 균일 할 것으로 기대하지는 않았지만 결과는 매우 놀랍습니다.
from random import random, seed
from collections import Counter
seed(0)
counts = Counter(int(str(random())[-1]) for _ in range(1_000_000))
print(counts)
산출:
Counter({1: 84206,
5: 130245,
3: 119433,
6: 129835,
8: 101488,
2: 100861,
9: 84796,
4: 129088,
7: 120048})
히스토그램은 아래와 같습니다. 후행 0이 잘 리므로 0이 표시되지 않습니다. 그러나 왜 숫자 4, 5 및 6이 나머지보다 더 일반적인지 설명 할 수 있습니까? Python 3.6.10을 사용했지만 결과는 Python 3.8.0a4와 비슷했습니다.
str문제를 일으킬 수있는 10 진법으로 변환합니다. 예를 들어 1 비트 부동 가수 b0 -> 1.0및 b1 -> 1.5. "마지막 숫자"는 항상 0또는 5입니다.
random.randrange(10)더 분명하다, IMHO. random.randint( random.randrange후드에서 호출 )는 random파이썬에서 범위가 어떻게 작동하는지 이해하지 못하는 사람들을 위해 나중에 모듈에 추가되었습니다 . ;)
randrange후 실제로 2 위를 차지했습니다 randint.
