복붙노트

[PYTHON] 파이썬 :`random.randint (a, b)`가`b '를 포함한 범위를 반환하는 이유는 무엇입니까?

PYTHON

파이썬 :`random.randint (a, b)`가`b '를 포함한 범위를 반환하는 이유는 무엇입니까?

random.randint (a, b)는 range (...)와 같이 [a, b-1] 대신 [a, b] 범위의 정수를 반환한다는 것이 이상한 것처럼 보였습니다.

이 명백한 불일치에 대한 이유가 있습니까?

해결법

  1. ==============================

    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. ==============================

    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. ==============================

    3.이것은 추측이지만 'a에서 b까지 임의의 숫자를 제공합니다'라는 일반적인 인간의 사용은 포괄적입니다. 그런 식으로 구현하는 것이 더 인간이 읽을 수있는 언어가되는 파이썬의 일반적인 철학을 감안할 때 말이됩니다.

    이것은 추측이지만 'a에서 b까지 임의의 숫자를 제공합니다'라는 일반적인 인간의 사용은 포괄적입니다. 그런 식으로 구현하는 것이 더 인간이 읽을 수있는 언어가되는 파이썬의 일반적인 철학을 감안할 때 말이됩니다.

  4. ==============================

    4.나는 그 이유가 있다고 생각하지 않는다. 적어도 문서화되어 있습니다.

    나는 그 이유가 있다고 생각하지 않는다. 적어도 문서화되어 있습니다.

  5. 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