55
66
77class PseudoRandom :
8- # Переменная класса для хранения seed генератора псевдослучайных чисел
8+ # Переменная класса для хранения зерна генератора (seed) псевдослучайных чисел
99 _seed = None
1010
11- # -------------------- Основные функции генерации случайных чисел --------------------
11+ # -------------------- Основные функции генератора --------------------
1212
1313 @classmethod
1414 def set_seed (cls , seed : Any = None ) -> None :
1515 """
16- Установка нового значения seed.
16+ Установка нового значения зерна ( seed) .
1717
1818 seed - любой объект, который преобразуется в строку. Если None - сброс на время (time_ns()).
1919 """
@@ -25,8 +25,8 @@ def set_seed(cls, seed: Any = None) -> None:
2525 @staticmethod
2626 def _get_next_seed_state (current_seed : int ) -> int :
2727 """
28- Вспомогательная функция - меняет состояние зерна с помощью линейного конгруэнтного метода.
29- ( Константы взяты из Borland C/C++ runtime library.)
28+ Вспомогательная функция - меняет состояние зерна (seed) с помощью линейного конгруэнтного метода.
29+ Константы взяты из Borland C/C++ runtime library.
3030 """
3131 return (current_seed * 22695477 + 1 ) & 0xFFFFFFFF
3232
@@ -39,7 +39,7 @@ def gen_random_number(cls, length: int = 1) -> int:
3939 if cls ._seed is not None :
4040 is_seeded = True
4141 current_entropy = cls ._seed
42- # Обновление seed для следующей итерации (цифры), иначе результат будет одинаковым
42+ # Обновление seed для следующей итерации (цифры), иначе результат генерации будет одинаковым
4343 cls ._seed = cls ._get_next_seed_state (cls ._seed )
4444 else :
4545 is_seeded = False
@@ -53,9 +53,9 @@ def gen_random_number(cls, length: int = 1) -> int:
5353 # Добавление последней цифры результата
5454 number += str (int (magic_result ))[- 1 ]
5555
56- # Если нет seed, нужна задержка, чтобы время изменилось (т.к. entropy - время)
56+ # Если нет seed, то entropy - время, поэтому нужна задержка для случайности выпадения чисел
5757 if not is_seeded :
58- sleep (0.0001 )
58+ sleep (0.0000001 )
5959
6060 return int (number )
6161
@@ -100,18 +100,14 @@ def random_integer(start: int, end: int = None, step: int = 1) -> int:
100100 step (опциональный аргумент) - число должно делиться на step (относительно start)
101101 """
102102 if step == 0 :
103- raise ValueError ("Step (шаг ) не может быть равен 0" )
103+ raise ValueError ("Шаг (step ) не может быть равен 0" )
104104
105- # Длина диапазона
106105 width = end - start
107-
108- # Количество шагов = (разница / шаг) + 1
109106 n_steps = int (width / step ) + 1
110107
111108 if n_steps <= 0 :
112109 raise ValueError ("Неверные границы диапазона для заданного шага" )
113110
114- # Выбор случайного индекса шага
115111 random_step_index = int (PseudoRandom .random () * n_steps )
116112
117113 return start + (random_step_index * step )
@@ -183,8 +179,7 @@ def choice(array: list[Any]) -> Any:
183179 """Возвращает случайно выбранный элемент из массива."""
184180 if not array :
185181 return None
186- index = PseudoRandom .randrange (len (array ))
187- return array [index ]
182+ return array [PseudoRandom .randrange (len (array ))]
188183
189184 @staticmethod
190185 def choices (array : list [Any ], k : int , weights : list [int ] = None ) -> list [Any ]:
@@ -248,7 +243,7 @@ def sample(array: list[Any], k: int, counts: list[int] = None) -> list[Any]:
248243 def binomialvariate (n : int = 1 , p : float = 0.5 ) -> int :
249244 """
250245 Возвращает случайное число, распределённое по биномиальному закону.
251- Простейшая реализация, неоптимизированная.
246+ Простейшая реализация ( неоптимизированная) .
252247
253248 n - количество испытаний (целое число >= 0).
254249 p - вероятность успеха в каждом испытании (0.0 <= p <= 1.0).
@@ -275,8 +270,7 @@ def random_uuid4() -> str:
275270 Пример: 'f47ac10b-58cc-4372-a567-0e02b2c3d479'
276271 """
277272 # Генерирация 32 hex-цифры
278- chars = [hex (PseudoRandom .random_integer (0 , 15 ))[2 :]
279- for _ in range (32 )]
273+ chars = [hex (PseudoRandom .random_integer (0 , 15 ))[2 :] for _ in range (32 )]
280274
281275 # Согласно стандарту UUID v4:
282276 chars [12 ] = '4' # 13-й символ всегда '4'
0 commit comments