HTML Diff
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>