Ho cercato di arrivare a fondo esaminando alcune vecchie fonti. Ho il sospetto che randint
è stato attuato prima intero long di Python: il che significa che se si voleva un numero casuale che comprendeva INT_MAX
, si avrebbe bisogno di chiamare random.randrange(0, INT_MAX + 1)
che sarebbe traboccato e ha portato in argomenti di (0, 0)
o (0, INT_MIN)
seconda.
Tuttavia, guardando nel lontano anche the Python 1.5.2 sources, in Lib/whrandom.py
vediamo:
#
# 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
è stato continuato ad essere obsoleta in 2.0, 2.1, 2.2 e 2.3; ma random.randint
è stato contrassegnato come deprecato in 2.1, anche se non è più contrassegnato come deprecato in 2.2.
Inoltre, random.py
from version 2.1 è il primo a notare in docstring random.randint
's:
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.
"""
L'unica fonte disponibile di età superiore cioè the 0.9.1 source, e per quanto ne so, randint
non è stato attuato in quel punto .
Quindi, concludo che il ragionamento per randint
incluso l'endpoint è noto al solo Guido stesso a questo punto; data la docstring di Python 2.1, sembra che il motivo potrebbe essere stato un semplice errore.
(Non risponde alla domanda :) Bene, è possibile utilizzare 'randrange'. – kennytm
Forse non sono così esperto come te, ma non lo vedo come un'incoerenza. Lo vedo come un semplice metodo per i programmatori di chiamare un numero compreso casualmente senza bisogno di usare operatori e numeri magici. Le lingue migliori offrono ai loro utenti le strade attraverso le quali possono essere creativi. – Musixauce3000
@ Musixauce3000 è un'incoerenza perché entrambi i metodi - 'range' e' randint' - accettano lo stesso valore logico (cioè un intervallo di numeri), ma quel valore è specificato in due modi diversi - incoerenti - (uno è compreso del punto finale, l'altro è esclusivo). –