Skip to content

Commit bf2fac8

Browse files
committed
feat: add random_integer func + minor formatting
1 parent 7b42689 commit bf2fac8

1 file changed

Lines changed: 30 additions & 5 deletions

File tree

pycustomrand/random_generator.py

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,8 @@ def random() -> float:
7373
def randrange(start: int, stop: int = None, step: int = 1) -> int:
7474
"""
7575
Возвращает случайное число из диапазона [start, stop).
76-
Верхняя граница НЕ включается.
77-
76+
Верхняя граница НЕ включается. Можно указывать один аргумент.
77+
7878
Примеры:
7979
randrange(10) -> от 0 до 9
8080
randrange(1, 10) -> от 1 до 9
@@ -84,14 +84,39 @@ def randrange(start: int, stop: int = None, step: int = 1) -> int:
8484
# Если передан один аргумент, например randrange(10), то считаем его за stop, а start за 0
8585
stop = start
8686
start = 0
87-
87+
8888
range_object = range(start, stop, step)
89-
89+
9090
if not range_object:
9191
raise ValueError("Пустой диапазон для генерации")
92-
92+
9393
return range_object[int(PseudoRandom.random() * len(range_object))]
9494

95+
@staticmethod
96+
def random_integer(start: int, end: int = None, step: int = 1) -> int:
97+
"""
98+
Возвращает случайное число из диапазона [start, end].
99+
Включительны и обязательны обе границы.
100+
101+
step (опциональный аргумент) - число должно делиться на step (относительно start)
102+
"""
103+
if step == 0:
104+
raise ValueError("Step (шаг) не может быть равен 0")
105+
106+
# Длина диапазона
107+
width = end - start
108+
109+
# Количество шагов = (разница / шаг) + 1
110+
n_steps = int(width / step) + 1
111+
112+
if n_steps <= 0:
113+
raise ValueError("Неверные границы диапазона для заданного шага")
114+
115+
# Выбор случайного индекса шага
116+
random_step_index = int(PseudoRandom.random() * n_steps)
117+
118+
return start + (random_step_index * step)
119+
95120

96121
# -------------------- Функции для чисел с плавающей точкой --------------------
97122

0 commit comments

Comments
 (0)