Глава 5 · Давайте поиграем с числами!
randint, randrange, uniform
Три похожих функции с тремя разными правилами насчёт границ диапазона — и одна классическая ошибка, которая случается, если их перепутать.
randint(a, b) — случайное целое, обе границы включены
randint.py
import random
kubik = random.randint(1, 6) # может быть 1, 2, 3, 4, 5 ИЛИ 6
print(kubik)
Частая ошибка «на единицу» (off-by-one)
Если нужны числа от 1 до 5 (не включая 6), а написать
random.randint(1, 6) — программа иногда будет неверно выдавать 6. Обе границы randint() включены — это стоит держать в голове каждый раз.randrange(start, stop, step) — как range(), но случайно
В отличие от randint(), у randrange()
верхняя граница не включена — совсем как у обычного range(),
который мы разберём подробно в главе 10. Плюс есть необязательный шаг:
randrange.py
import random
print(random.randrange(1, 7)) # от 1 до 6 включительно — 7 НЕ входит, аналог randint(1, 6)
print(random.randrange(0, 10, 2)) # случайное чётное число: 0, 2, 4, 6 или 8
| Функция | Верхняя граница | Шаг |
|---|---|---|
randint(a, b) | включена | нет — только соседние целые |
randrange(a, b) | НЕ включена | нет (по умолчанию 1) |
randrange(a, b, step) | НЕ включена | да — можно перескакивать |
uniform(a, b) — случайное дробное число
Работает как randint(), но для float
— любое дробное значение в диапазоне, а не только целые:
uniform.py
import random
temperatura = random.uniform(18.0, 24.0)
print(round(temperatura, 1)) # например, 21.3
Практика: randint, randrange, uniform
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки