Диапазон в python - это то, что включает нижнюю границу, но не включает верхнюю границу . Вначале это может показаться запутанным, но оно преднамеренно и используется во всех python.
list(range(4, 10))
# [4, 5, 6, 7, 8, 9]
# does not include 10!
xs = ['a', 'b', 'c', 'd', 'e']
xs[1:4]
# [xs[1], xs[2], xs[3]]
# does not include xs[4]!
bisect.bisect_left('jack', names, 2, 5)
# perform a binary search on names[2], names[3], names[4]
# does not include names[5]!
random.randrange(4, 8)
# picks a random number from 4, 5, 6, 7
# does not include 8!
В математике это называется полуоткрытым интервалом . Python предпочитает использовать полуинтервалы, потому что они избегают ошибок по отдельности :
[во избежание ошибок по очереди] ... диапазоны в вычислениях часто представлены полуоткрытыми интервалами; диапазон от m до n (включительно) представлен диапазоном от m (включительно) до n + 1 (эксклюзивный)
blockquote>. В результате большинство функций библиотеки python будут использовать это идея полуоткрытых диапазонов, когда это возможно.
Однако randint является тем, что не использует полуоткрытые интервалы.
random.randint(4, 8) # picks a random number from 4, 5, 6, 7, 8 # it does indeed include 8!
Причина историческая:
- randint был добавлен в начале v1.5 около 1998 года, и это имя функции использовалось для генерации случайные числа с плавающей запятой случайным образом и целые числа случайным образом
- randrange были добавлены в python в версии 1.5.2. В v2.0 добавлено уведомление о том, что randint является устаревшим .
- уведомление об исключении для randint с тех пор было удалено
randint началось как более ранняя библиотечная функция, которая не включала полуоткрытый интервал, потому что эта идея в то время была менее цементирована на python.