0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<ul><li><a>Применение random в Python</a><ul><li><a>random.random</a></li>
1
<ul><li><a>Применение random в Python</a><ul><li><a>random.random</a></li>
2
<li><a>random.seed</a></li>
2
<li><a>random.seed</a></li>
3
<li><a>random.uniform</a></li>
3
<li><a>random.uniform</a></li>
4
<li><a>random.randint</a></li>
4
<li><a>random.randint</a></li>
5
<li><a>random.randrange</a></li>
5
<li><a>random.randrange</a></li>
6
<li><a>random.choice</a></li>
6
<li><a>random.choice</a></li>
7
<li><a>Sample и choices</a></li>
7
<li><a>Sample и choices</a></li>
8
<li><a>random.shuffle</a></li>
8
<li><a>random.shuffle</a></li>
9
</ul></li>
9
</ul></li>
10
</ul><p>В процессе программирования на Python может понадобиться случайное число. О том, как создать собственный простейший генератор псевдослучайных чисел, пойдет разговор в этой статье. Будут рассмотрены некоторые популярные методы и функции, которые включены в модуль<strong>random</strong>для Python 3 и позволяют получать значения случайным образом (randomly).</p>
10
</ul><p>В процессе программирования на Python может понадобиться случайное число. О том, как создать собственный простейший генератор псевдослучайных чисел, пойдет разговор в этой статье. Будут рассмотрены некоторые популярные методы и функции, которые включены в модуль<strong>random</strong>для Python 3 и позволяют получать значения случайным образом (randomly).</p>
11
<p>В качестве лирического отступления следует сказать, что, согласно специфике внутреннего состояния генератора, модуль для Python под названием random позволяет сгенерировать<strong>не случайный, а псевдослучайный элемент</strong>, то есть значения и их последовательности формируются на основе формулы. Раз последовательность зависит от нескольких параметров, она не является случайной в полном смысле этого слова. Если нужна истинная случайность, генерация может основываться, к примеру, на принципах квантовой механики, однако на практике это слишком дорого и сложно, да и не всегда экономически целесообразно, ведь для многих задач программирования вполне подойдут и псевдослучайные генераторы (если речь не про онлайн-казино). Вдобавок к этому, случайность (randomness) - вещь капризная, поэтому, как тут не вспомнить прекрасное высказывание американского математика Роберта Кавью:</p>
11
<p>В качестве лирического отступления следует сказать, что, согласно специфике внутреннего состояния генератора, модуль для Python под названием random позволяет сгенерировать<strong>не случайный, а псевдослучайный элемент</strong>, то есть значения и их последовательности формируются на основе формулы. Раз последовательность зависит от нескольких параметров, она не является случайной в полном смысле этого слова. Если нужна истинная случайность, генерация может основываться, к примеру, на принципах квантовой механики, однако на практике это слишком дорого и сложно, да и не всегда экономически целесообразно, ведь для многих задач программирования вполне подойдут и псевдослучайные генераторы (если речь не про онлайн-казино). Вдобавок к этому, случайность (randomness) - вещь капризная, поэтому, как тут не вспомнить прекрасное высказывание американского математика Роберта Кавью:</p>
12
<p>Также на ум приходит еще одно интересное высказывание, но уже с уклоном в философию:</p>
12
<p>Также на ум приходит еще одно интересное высказывание, но уже с уклоном в философию:</p>
13
<h2>Применение random в Python</h2>
13
<h2>Применение random в Python</h2>
14
<p>В языке программирования "Пайтон" модуль<strong>random</strong>позволяет реализовывать генератор псевдослучайных чисел для разных распределений, куда входят как целые (integers), так и вещественные числа, то есть числа с плавающей запятой.</p>
14
<p>В языке программирования "Пайтон" модуль<strong>random</strong>позволяет реализовывать генератор псевдослучайных чисел для разных распределений, куда входят как целые (integers), так и вещественные числа, то есть числа с плавающей запятой.</p>
15
<p>Общий список <strong>методов, поддерживаемых модулем random,</strong> можно посмотреть в таблице ниже. Тут стоит обратить внимание, что возврат значений может осуществляться на основе разных распределений (распределение Парето, распределение Вейбулла и т. д.), выбор которых зависит от области применения генератора случайных чисел (статистика, теория вероятности).</p>
15
<p>Общий список <strong>методов, поддерживаемых модулем random,</strong> можно посмотреть в таблице ниже. Тут стоит обратить внимание, что возврат значений может осуществляться на основе разных распределений (распределение Парето, распределение Вейбулла и т. д.), выбор которых зависит от области применения генератора случайных чисел (статистика, теория вероятности).</p>
16
<p>Но мы не будем углубляться в распределения, а рассмотрим самые простые методы. А так как разглядывать их в таблице совершенно неинтересно, давайте попрактикуемся и выясним, как может быть использован тот или иной метод в деле.</p>
16
<p>Но мы не будем углубляться в распределения, а рассмотрим самые простые методы. А так как разглядывать их в таблице совершенно неинтересно, давайте попрактикуемся и выясним, как может быть использован тот или иной метод в деле.</p>
17
<p>Но прежде чем это сделать и иметь возможность полноценно использовать модуль, его надо импортировать. Делается это предельно просто: нужно прописать в начале кода import random.</p>
17
<p>Но прежде чем это сделать и иметь возможность полноценно использовать модуль, его надо импортировать. Делается это предельно просто: нужно прописать в начале кода import random.</p>
18
<h3>random.random</h3>
18
<h3>random.random</h3>
19
<p>У модуля random есть одноименный метод-тезка - функция random. Она возвращает случайное число в диапазоне 0 - 1.0:</p>
19
<p>У модуля random есть одноименный метод-тезка - функция random. Она возвращает случайное число в диапазоне 0 - 1.0:</p>
20
<p>import random</p>
20
<p>import random</p>
21
<p>print("Выводим случайное число с помощью random.random():")</p>
21
<p>print("Выводим случайное число с помощью random.random():")</p>
22
<p>print(random.random())</p>
22
<p>print(random.random())</p>
23
<p>Если вы скопируете этот простейший код себе (можно использовать любой онлайн-компилятор), вы получите другое число.</p>
23
<p>Если вы скопируете этот простейший код себе (можно использовать любой онлайн-компилятор), вы получите другое число.</p>
24
<p>Также вывести можно не одно, а, к примеру, три (three) числа (используется<strong>for i in range</strong>), причем прекрасным решением будет ограничить вывод до двух знаков после запятой (за это отвечает<strong>‘%.2f’</strong>):</p>
24
<p>Также вывести можно не одно, а, к примеру, три (three) числа (используется<strong>for i in range</strong>), причем прекрасным решением будет ограничить вывод до двух знаков после запятой (за это отвечает<strong>‘%.2f’</strong>):</p>
25
<p>import random</p>
25
<p>import random</p>
26
<p>print("Выводим 3 случайных числа; не более 2 знаков после запятой:")</p>
26
<p>print("Выводим 3 случайных числа; не более 2 знаков после запятой:")</p>
27
<p>print(['%.2f' % random.random() for i in range(3)])</p>
27
<p>print(['%.2f' % random.random() for i in range(3)])</p>
28
<h3>random.seed</h3>
28
<h3>random.seed</h3>
29
<p>Метод seed может показаться более сложным для понимания. Фишка в том, что, как уже было сказано выше, используется генератор псевдослучайных чисел, то есть выдача этих чисел происходит в соответствии с алгоритмом. Алгоритм вычисляет значение на основе другого числа, но это число берется не с потолка - оно вычисляется<strong>на основании текущего системного времени</strong>. В результате, если вы будете пробовать на своем компьютере один из кодов, рассмотренных выше, вы будете получать<strong>каждый раз новые числа</strong>.</p>
29
<p>Метод seed может показаться более сложным для понимания. Фишка в том, что, как уже было сказано выше, используется генератор псевдослучайных чисел, то есть выдача этих чисел происходит в соответствии с алгоритмом. Алгоритм вычисляет значение на основе другого числа, но это число берется не с потолка - оно вычисляется<strong>на основании текущего системного времени</strong>. В результате, если вы будете пробовать на своем компьютере один из кодов, рассмотренных выше, вы будете получать<strong>каждый раз новые числа</strong>.</p>
30
<p>Если же задействовать seed с одним и тем же<strong>параметром</strong>, то вычисление будет производиться на основании этого<strong>параметра</strong>. Итог - на выходе будут получаться одинаковые "случайные" значения. Возьмем для примера параметр 5 и сделаем так, чтобы метод отработал дважды:</p>
30
<p>Если же задействовать seed с одним и тем же<strong>параметром</strong>, то вычисление будет производиться на основании этого<strong>параметра</strong>. Итог - на выходе будут получаться одинаковые "случайные" значения. Возьмем для примера параметр 5 и сделаем так, чтобы метод отработал дважды:</p>
31
<p>import random</p>
31
<p>import random</p>
32
<p>random.seed(5)</p>
32
<p>random.seed(5)</p>
33
<p>print(random.random())</p>
33
<p>print(random.random())</p>
34
<p>random.seed(5)</p>
34
<p>random.seed(5)</p>
35
<p>print(random.random())</p>
35
<p>print(random.random())</p>
36
<h3>random.uniform</h3>
36
<h3>random.uniform</h3>
37
<p>С<strong>uniform</strong>все проще: возвращается псевдослучайное вещественное число, находящееся в определенном диапазоне, который указывается разработчиком:</p>
37
<p>С<strong>uniform</strong>все проще: возвращается псевдослучайное вещественное число, находящееся в определенном диапазоне, который указывается разработчиком:</p>
38
<p>import random</p>
38
<p>import random</p>
39
<p>print("Находим число с плавающей точкой в заданном диапазоне:")</p>
39
<p>print("Находим число с плавающей точкой в заданном диапазоне:")</p>
40
<p>print(random.uniform(5, 10))</p>
40
<p>print(random.uniform(5, 10))</p>
41
<h3>random.randint</h3>
41
<h3>random.randint</h3>
42
<p><strong>Randint</strong>в Python тоже позволяет вернуть псевдослучайное число в определенном диапазоне, но тут уже речь идет о целом значении (int, integer):</p>
42
<p><strong>Randint</strong>в Python тоже позволяет вернуть псевдослучайное число в определенном диапазоне, но тут уже речь идет о целом значении (int, integer):</p>
43
<p>import random</p>
43
<p>import random</p>
44
<p>print("Используем randint для генерации целого числа int из диапазона:")</p>
44
<p>print("Используем randint для генерации целого числа int из диапазона:")</p>
45
<p>print(random.randint(10, 20))</p>
45
<p>print(random.randint(10, 20))</p>
46
<h3>random.randrange</h3>
46
<h3>random.randrange</h3>
47
<p>Следующий метод, называемый<strong>randrange</strong>, похож на предыдущий<strong>randint</strong>, но тут, кроме диапазона целых значений int, можно добавить еще и шаг выборки (в качестве третьего параметра):</p>
47
<p>Следующий метод, называемый<strong>randrange</strong>, похож на предыдущий<strong>randint</strong>, но тут, кроме диапазона целых значений int, можно добавить еще и шаг выборки (в качестве третьего параметра):</p>
48
<p>import random</p>
48
<p>import random</p>
49
<p>print("Генерируем случайное целое число в заданном диапазоне с шагом")</p>
49
<p>print("Генерируем случайное целое число в заданном диапазоне с шагом")</p>
50
<p>print(random.randrange(10, 100, 2))</p>
50
<p>print(random.randrange(10, 100, 2))</p>
51
<p>Судя по результату ниже и в соответствии с выбранным диапазоном от 10 до 100, установив шаг 2, мы будем получать<strong>лишь четные значения</strong>:</p>
51
<p>Судя по результату ниже и в соответствии с выбранным диапазоном от 10 до 100, установив шаг 2, мы будем получать<strong>лишь четные значения</strong>:</p>
52
<h3>random.choice</h3>
52
<h3>random.choice</h3>
53
<p>Применение<strong>choice</strong>позволит вернуть элемент из какой-нибудь последовательности - это может быть список, строка, кортеж.</p>
53
<p>Применение<strong>choice</strong>позволит вернуть элемент из какой-нибудь последовательности - это может быть список, строка, кортеж.</p>
54
<p>И это уже интереснее, т. к. напрашивается<strong>аналогия с броском игрального кубика</strong>:</p>
54
<p>И это уже интереснее, т. к. напрашивается<strong>аналогия с броском игрального кубика</strong>:</p>
55
<p>import random</p>
55
<p>import random</p>
56
<p>list = [1, 2, 3, 4, 5, 6]</p>
56
<p>list = [1, 2, 3, 4, 5, 6]</p>
57
<p>print("Выборка одного элемента из списка с помощью choice:")</p>
57
<p>print("Выборка одного элемента из списка с помощью choice:")</p>
58
<p>print(random.choice(list))</p>
58
<p>print(random.choice(list))</p>
59
<p>Ура, выпало шесть!</p>
59
<p>Ура, выпало шесть!</p>
60
<p>Проверьте, повезет ли так и вам. Но вообще, перечень может состоять из других цифр<strong>и даже слов</strong>.</p>
60
<p>Проверьте, повезет ли так и вам. Но вообще, перечень может состоять из других цифр<strong>и даже слов</strong>.</p>
61
<p>Сыграйте в игру и попробуйте погадать,<a>какой язык программирования</a>вам лучше учить в Otus:</p>
61
<p>Сыграйте в игру и попробуйте погадать,<a>какой язык программирования</a>вам лучше учить в Otus:</p>
62
<p>import random</p>
62
<p>import random</p>
63
<p>list = ['Python','Java','C#','C++','PHP','C','JavaScript','Scala']</p>
63
<p>list = ['Python','Java','C#','C++','PHP','C','JavaScript','Scala']</p>
64
<p>print("Какой язык программирования будешь учить?")</p>
64
<p>print("Какой язык программирования будешь учить?")</p>
65
<p>print(random.choice(list))</p>
65
<p>print(random.choice(list))</p>
66
<h3>Sample и choices</h3>
66
<h3>Sample и choices</h3>
67
<p>Начиная с Python 3.6, появился метод<strong>choices</strong>. Его отличие в том, что он позволяет сделать выборку нескольких элементов из последовательности, а вот сколько именно будет значений, можно указать. В отличие от схожего метода<strong>sample</strong>, в<strong>choices</strong>возможно получение одинаковых цифр.</p>
67
<p>Начиная с Python 3.6, появился метод<strong>choices</strong>. Его отличие в том, что он позволяет сделать выборку нескольких элементов из последовательности, а вот сколько именно будет значений, можно указать. В отличие от схожего метода<strong>sample</strong>, в<strong>choices</strong>возможно получение одинаковых цифр.</p>
68
<p>Вернемся к нашему виртуальному кубику. Вот работа<strong>sample</strong>:</p>
68
<p>Вернемся к нашему виртуальному кубику. Вот работа<strong>sample</strong>:</p>
69
<p>import random</p>
69
<p>import random</p>
70
<p>list = [1, 2, 3, 4, 5, 6]</p>
70
<p>list = [1, 2, 3, 4, 5, 6]</p>
71
<p>print ("Выборка двух случайных значений:")</p>
71
<p>print ("Выборка двух случайных значений:")</p>
72
<p>print (random.sample(list,2))</p>
72
<p>print (random.sample(list,2))</p>
73
<p>Все бы ничего, но<strong>этот метод будет постоянно выводить 2 разных значения</strong>. Если же мы захотим сымитировать бросок двух игральных кубиков, код придется менять, ведь в реальной жизни выкинуть дубль все-таки можно. Но зачем менять код, если есть<strong>choices</strong>? Он обеспечит вывод двух случайных значения из заданного диапазона, причем они могут повторяться. Это уже<strong>максимально приближено к реальному броску двух кубиков</strong>, причем профит достигается и за счет того, что объем кода не увеличивается. Ради интереса мы его даже уменьшили - оптимизировали (List превратился в l, да и лишний текст выкинули):</p>
73
<p>Все бы ничего, но<strong>этот метод будет постоянно выводить 2 разных значения</strong>. Если же мы захотим сымитировать бросок двух игральных кубиков, код придется менять, ведь в реальной жизни выкинуть дубль все-таки можно. Но зачем менять код, если есть<strong>choices</strong>? Он обеспечит вывод двух случайных значения из заданного диапазона, причем они могут повторяться. Это уже<strong>максимально приближено к реальному броску двух кубиков</strong>, причем профит достигается и за счет того, что объем кода не увеличивается. Ради интереса мы его даже уменьшили - оптимизировали (List превратился в l, да и лишний текст выкинули):</p>
74
<p>import random</p>
74
<p>import random</p>
75
<p>l = [1,2,3,4,5,6]</p>
75
<p>l = [1,2,3,4,5,6]</p>
76
<p>print(random.choices(l, k=2))</p>
76
<p>print(random.choices(l, k=2))</p>
77
<p>Кстати, вот и дубль - результат равен [6, 6], причем всего лишь с 5-й попытки (можете поверить на слово):</p>
77
<p>Кстати, вот и дубль - результат равен [6, 6], причем всего лишь с 5-й попытки (можете поверить на слово):</p>
78
<p>Правда, тут нюанс: пришлось<a>сменить</a>онлайн-компилятор, так как на<a>предыдущем</a>компиляторе Python версии 3.6 не поддерживался.</p>
78
<p>Правда, тут нюанс: пришлось<a>сменить</a>онлайн-компилятор, так как на<a>предыдущем</a>компиляторе Python версии 3.6 не поддерживался.</p>
79
<h3>random.shuffle</h3>
79
<h3>random.shuffle</h3>
80
<p>Функция с интересным названием<strong>shuffle</strong>может перемешивать последовательность, меняя местами значения (она не подходит для неизменяемых объектов). Здесь важна именно последовательность выпадения определенных значений, как в<strong>лото</strong>. </p>
80
<p>Функция с интересным названием<strong>shuffle</strong>может перемешивать последовательность, меняя местами значения (она не подходит для неизменяемых объектов). Здесь важна именно последовательность выпадения определенных значений, как в<strong>лото</strong>. </p>
81
<p>import random</p>
81
<p>import random</p>
82
<p>list = [1,2,3,4,5,6,7,8,9,10]</p>
82
<p>list = [1,2,3,4,5,6,7,8,9,10]</p>
83
<p>random.shuffle(list)</p>
83
<p>random.shuffle(list)</p>
84
<p>print ("Крутим барабан и достаем шары наугад: ", list)</p>
84
<p>print ("Крутим барабан и достаем шары наугад: ", list)</p>
85
<p>Остается добавить, что английское слово<strong>shuffle</strong>означает "тасовать, перемешивать". Как тут не вспомнить картежного шулера или лопату-шуфлю для перемешивания бетонного раствора. Но это так, для общего развития.</p>
85
<p>Остается добавить, что английское слово<strong>shuffle</strong>означает "тасовать, перемешивать". Как тут не вспомнить картежного шулера или лопату-шуфлю для перемешивания бетонного раствора. Но это так, для общего развития.</p>
86
<p>Успехов вам, друзья!</p>
86
<p>Успехов вам, друзья!</p>
87
<a></a>
87
<a></a>