[PYTHON] 파이썬 :`random.randint (a, b)`가`b '를 포함한 범위를 반환하는 이유는 무엇입니까?
PYTHON파이썬 :`random.randint (a, b)`가`b '를 포함한 범위를 반환하는 이유는 무엇입니까?
random.randint (a, b)는 range (...)와 같이 [a, b-1] 대신 [a, b] 범위의 정수를 반환한다는 것이 이상한 것처럼 보였습니다.
이 명백한 불일치에 대한 이유가 있습니까?
해결법
-
==============================
1.나는 몇 가지 오래된 자료를 조사하여이 밑바닥에 도달하려고 노력했다. 나는 randint가 파이썬의 긴 정수 앞에 구현되었다고 생각했다. 즉, INT_MAX가 포함 된 난수를 원한다면 overflow 된 결과로 random.randrange (0, INT_MAX + 1)를 호출해야 할 것이다. , 0) 또는 (0, INT_MIN)에 따라 다릅니다.
나는 몇 가지 오래된 자료를 조사하여이 밑바닥에 도달하려고 노력했다. 나는 randint가 파이썬의 긴 정수 앞에 구현되었다고 생각했다. 즉, INT_MAX가 포함 된 난수를 원한다면 overflow 된 결과로 random.randrange (0, INT_MAX + 1)를 호출해야 할 것이다. , 0) 또는 (0, INT_MIN)에 따라 다릅니다.
그러나 Lib / whrandom.py에서 Python 1.5.2 소스까지 거슬러 올라가 보면 다음과 같습니다 :
# # Get a random integer in the range [a, b] including both end points. # (Deprecated; use randrange below.) # def randint(self, a, b): return self.randrange(a, b+1)
whrandom.randint는 2.0, 2.1, 2.2 및 2.3에서 더 이상 사용되지 않습니다. random.randint는 2.2에서는 더 이상 사용되지 않는 것으로 표시되었지만 2.1에서는 더 이상 사용되지 않는 것으로 표시되었습니다.
또한, random.randint의 docstring에서 버전 2.1의 random.py가 처음으로 주목됩니다 :
def randrange(self, start, stop=None, step=1, int=int, default=None): """Choose a random item from range(start, stop[, step]). This fixes the problem with randint() which includes the endpoint; in Python this is usually not what you want. Do not supply the 'int' and 'default' arguments. """
그보다 더 오래된 유일한 소스는 0.9.1 소스이며, 제가 알 수있는 한 randint는 그 시점에서 구현되지 않았습니다.
따라서, 나는 종말점을 포함하는 randint에 대한 추론이 현재 Guido 자신에게만 알려져 있다고 결론을 내린다; 파이썬 2.1의 문서화 문자열을 보면, 그 이유가 단순한 실수일지도 모른다고 들린다.
-
==============================
2.random.randint는이 기능을 구현 한 첫 번째 시도였습니다. 파이썬 개발자도 이것이 문제라고 생각했기 때문에 v1.5.2에서는 표준 매개 변수가 더 많은 randrange 메서드를 추가했습니다.
random.randint는이 기능을 구현 한 첫 번째 시도였습니다. 파이썬 개발자도 이것이 문제라고 생각했기 때문에 v1.5.2에서는 표준 매개 변수가 더 많은 randrange 메서드를 추가했습니다.
놀랍게도 사람들을 피하기 위해 randint 대신 randrange를 사용할 수 있습니다.
반면에 문제가 '1에서 6 사이의 임의의 숫자를 선택하십시오'라는 문구가있는 많은 상황에서 randrange (1, 7) 또는 randrange (min) 대신 randint (1, 6)을 사용하는 것이 더 자연 스럽습니다. , max + 1).
-
==============================
3.이것은 추측이지만 'a에서 b까지 임의의 숫자를 제공합니다'라는 일반적인 인간의 사용은 포괄적입니다. 그런 식으로 구현하는 것이 더 인간이 읽을 수있는 언어가되는 파이썬의 일반적인 철학을 감안할 때 말이됩니다.
이것은 추측이지만 'a에서 b까지 임의의 숫자를 제공합니다'라는 일반적인 인간의 사용은 포괄적입니다. 그런 식으로 구현하는 것이 더 인간이 읽을 수있는 언어가되는 파이썬의 일반적인 철학을 감안할 때 말이됩니다.
-
==============================
4.나는 그 이유가 있다고 생각하지 않는다. 적어도 문서화되어 있습니다.
나는 그 이유가 있다고 생각하지 않는다. 적어도 문서화되어 있습니다.
from https://stackoverflow.com/questions/2568783/python-why-does-random-randinta-b-return-a-range-inclusive-of-b by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬 요청 인증 (access_token) (0) | 2018.11.05 |
---|---|
[PYTHON] 어떻게 파이썬의 heapq에서 감소 키 기능을 구현할 수 있습니까? (0) | 2018.11.05 |
[PYTHON] 팬더에서 색인 이름 제거 (0) | 2018.11.05 |
[PYTHON] Numpy에서 ReLU 기능을 구현하는 방법 (0) | 2018.11.05 |
[PYTHON] JavaScript 타임 스탬프 - 파이썬 날짜 / 시간 변환 (0) | 2018.11.05 |