When researching for this question and reading the sourcecode in random.py, I started wondering whether randrange and randint really behave as “advertised”. I am very much inclined to believe so, but the way I read it, randrange is essentially implemented as
start + int(random.random()*(stop-start))
(assuming integer values for start and stop), so randrange(1, 10) should return a random number between 1 and 9.
randint(start, stop) is calling randrange(start, stop+1), thereby returning a number between 1 and 10.
My question is now:
If random() were ever to return 1.0, then randint(1,10) would return 11, wouldn’t it?
From
random.pyand the docs:The
)indicates that the interval is exclusive 1.0. That is, it will never return 1.0.This is a general convention in mathematics,
[and]is inclusive, while(and)is exclusive, and the two types of parenthesis can be mixed as(a, b]or[a, b). Have a look at wikipedia: Interval (mathematics) for a formal explanation.