Напишите программу, которая проверяет, принадлежит ли введенное с клавиатуры число интервалу 0 5

Обновлено: 06.07.2024

Операция модуля работает с целыми числами (и целочисленными выражениями) и дает остаток при делении первого операнда на второй. В Python оператор модуля представляет собой знак процента ( % ). Синтаксис такой же, как и для других операторов:

Таким образом, 7 разделить на 3 равно 2 с остатком 1.

Оператор модуля оказывается на удивление полезным. Например, вы можете проверить, делится ли одно число на другое: если x % y равно нулю, то x делится на y .< /p>

Кроме того, вы можете извлечь крайнюю правую цифру или цифры из числа. Например, x % 10 дает крайнюю правую цифру x (по основанию 10). Точно так же x % 100 дает две последние цифры.

4.2. Логические значения и выражения¶

Тип Python для хранения значений true и false называется bool в честь британского математика Джорджа Буля. Джордж Буль создал булеву алгебру, которая является основой всей современной компьютерной арифметики.

Есть только два логических значения: True и False. Использование заглавных букв важно, поскольку true и false не являются логическими значениями.

Логическое выражение – это выражение, результатом которого является логическое значение. Оператор == сравнивает два значения и возвращает логическое значение:

В первом операторе два операнда равны, поэтому выражение оценивается как True ; во втором утверждении 5 не равно 6, поэтому мы получаем False .

Хотя эти операции, вероятно, вам знакомы, символы Python отличаются от математических символов. Распространенной ошибкой является использование одного знака равенства ( = ) вместо двойного знака равенства ( == ). Помните, что = — это оператор присваивания, а == — оператор сравнения. Кроме того, не существует такого понятия, как = или => .

4.3. Логические операторы¶

Существует три логических оператора: и , или и не . Семантика (значение) этих операторов аналогична их значению в английском языке. Например, x > 0 и x 10 верно, только если x больше 0 и меньше 10.

n % 2 == 0 или n % 3 == 0 истинно, если верно любое из условий, то есть если число делится на 2 или 3.

Наконец, оператор not инвертирует логическое выражение, поэтому not(x > y) истинно, если (x > y) равно false, то есть если x меньше или равно y .

4.4. Условное выполнение¶

Чтобы писать полезные программы, нам почти всегда нужна возможность проверять условия и соответствующим образом изменять поведение программы. Условные операторы дают нам эту возможность. Простейшей формой является оператор ** if**:

Логическое выражение после оператора if называется условием. Если это правда, то выполняется оператор с отступом. Если нет, ничего не происходит.

Синтаксис оператора if выглядит следующим образом:

Как и в случае с определением функции из предыдущей главы и другими составными операторами, оператор if состоит из заголовка и тела. Заголовок начинается с ключевого слова if, за которым следует логическое выражение и заканчивается двоеточием (:).

Следующие операторы с отступом называются блоками. Первый оператор без отступа отмечает конец блока. Блок операторов внутри составного оператора называется телом оператора.

Каждый из операторов внутри тела выполняется в том порядке, в котором логическое выражение оценивается как True . Весь блок пропускается, если логическое выражение оценивается как False .

Нет ограничений на количество операторов, которые могут появляться в теле оператора if, но он должен быть хотя бы один. Иногда бывает полезно иметь тело без операторов (обычно в качестве места хранения кода, который вы еще не написали). В этом случае вы можете использовать оператор pass, который ничего не делает.

4.5. Альтернативное исполнение¶

Второй формой оператора if является альтернативное выполнение, при котором есть две возможности, и условие определяет, какая из них будет выполнена. Синтаксис выглядит следующим образом:

Если остаток при делении x на 2 равен 0, то мы знаем, что x четно, и программа выводит соответствующее сообщение. Если условие ложно, выполняется второй набор операторов. Поскольку условие должно быть истинным или ложным, будет выполнена ровно одна из альтернатив. Альтернативы называются ветвями, потому что они являются ветвями в потоке выполнения.

Кроме того, если вам нужно часто проверять четность (четность или нечетность) чисел, вы можете обернуть этот код в функцию:

Для любого значения x print_parity отображает соответствующее сообщение. При ее вызове в качестве аргумента можно указать любое целочисленное выражение.

4.6. Связанные условные операторы¶

Иногда существует более двух возможностей, и нам нужно более двух ветвей. Одним из способов выражения подобных вычислений является связанное условие:

elif — это сокращение от else if. Опять же, будет выполнена ровно одна ветвь. Количество операторов elif не ограничено, но разрешен только один (и необязательный) оператор else, и он должен быть последней ветвью в операторе:

Каждое условие проверяется по порядку. Если первое ложно, проверяется следующее и так далее. Если хотя бы одно из них истинно, выполняется соответствующая ветвь, и оператор завершается. Даже если выполняется более одного условия, выполняется только первая истинная ветвь.

4.7. Вложенные условия¶

Одно условное выражение может быть вложено в другое. Мы могли бы написать пример трихотомии следующим образом:

Внешнее условное предложение содержит две ветви. Первая ветвь содержит простой оператор вывода. Вторая ветвь содержит другой оператор if, который имеет две собственные ветви. Обе эти ветки являются операторами вывода, хотя они могли бы быть и условными операторами.

Хотя отступы операторов делают структуру очевидной, вложенные условные операторы очень быстро становятся трудными для чтения. Как правило, рекомендуется избегать их, когда это возможно.

Логические операторы часто позволяют упростить вложенные условные операторы. Например, мы можем переписать следующий код, используя одно условие:

Операция print выполняется только в том случае, если мы проходим оба условия, поэтому мы можем использовать оператор and:

Такого рода условия распространены, поэтому Python предоставляет альтернативный синтаксис, похожий на математическую нотацию:

Это условие семантически такое же, как составное логическое выражение и вложенное условное выражение.

4.8. Оператор return

Инструкция return позволяет вам прервать выполнение функции до того, как вы достигнете конца. Одной из причин его использования является обнаружение ошибки:

Функция print_square_root имеет параметр с именем x . Первое, что он делает, это проверяет, меньше или равно ли x 0, и в этом случае он отображает сообщение об ошибке, а затем использует return для выхода из функции. Поток выполнения немедленно возвращается вызывающей стороне, а остальные строки функции не выполняются.

4.9. Ввод с клавиатуры¶

В разделе Ввод мы познакомились со встроенными функциями Python, которые получают ввод с клавиатуры: raw_input и input . Теперь давайте еще раз рассмотрим их более подробно.

При вызове любой из этих функций программа останавливается и ждет, пока пользователь что-нибудь введет. Когда пользователь нажимает клавишу Return или Enter, программа возобновляет работу, и raw_input возвращает то, что пользователь ввел в виде строки :

Перед вызовом raw_input рекомендуется напечатать сообщение, сообщающее пользователю, что вводить. Это сообщение называется подсказкой. Мы можем указать приглашение в качестве аргумента для raw_input :

Обратите внимание, что подсказка представляет собой строку, поэтому она должна быть заключена в кавычки.

Если мы ожидаем, что ответ будет целым числом, мы можем использовать функцию input, которая оценивает ответ как выражение Python:

Если пользователь вводит строку цифр, она преобразуется в целое число и присваивается скорость . К сожалению, если пользователь вводит символы, которые не составляют корректное выражение Python, программа аварийно завершает работу:

В последнем примере, если бы пользователь сделал ответ допустимым выражением Python, заключив его в кавычки, это не привело бы к ошибке:

Чтобы избежать подобных ошибок, рекомендуется использовать raw_input для получения строки, а затем использовать команды преобразования для ее преобразования в другие типы.

4.10. Преобразование типов¶

Каждый тип Python поставляется со встроенной командой, которая пытается преобразовать значения другого типа в этот тип. Команда int(ARGUMENT), например, принимает любое значение и преобразует его в целое число, если это возможно, или выдает ошибку в противном случае:

int также может преобразовывать значения с плавающей запятой в целые числа, но помните, что дробная часть усекается:

Команда float(ARGUMENT) преобразует целые числа и строки в числа с плавающей запятой:

Может показаться странным, что Python различает целочисленное значение 1 от значения с плавающей запятой 1.0 . Они могут представлять одно и то же число, но принадлежат к разным типам.Причина в том, что внутри компьютера они представлены по-разному.

Команда str(ARGUMENT) преобразует любой переданный ей аргумент в тип string :

str(ARGUMENT) будет работать с любым значением и преобразовывать его в строку. Как упоминалось ранее, True — это логическое значение; правда — нет.

Для логических значений ситуация особенно интересна:

Python присваивает логические значения значениям других типов. Для числовых типов, таких как целые числа и числа с плавающей запятой, нулевые значения являются ложными, а ненулевые значения — истинными. Для строк пустые строки считаются ложными, а непустые строки — истинными.

4.11. ГАСП¶

После установки gasp попробуйте следующий скрипт Python:

Предпоследняя команда делает паузу и ждет, пока не будет нажата клавиша. Без него экран мигал бы так быстро, что вы бы его не увидели.

Запустив этот скрипт, вы должны увидеть графическое окно, которое выглядит следующим образом:

GASP illustration 1

С этого момента мы будем использовать вздох, чтобы проиллюстрировать (каламбур) концепции компьютерного программирования и добавить веселья во время обучения. Вы можете узнать больше о модуле GASP, прочитав Приложение B.

4.12. Глоссарий¶

блок Группа последовательных операторов с одинаковым отступом. body Блок инструкций в составной инструкции, следующий за заголовком. логическое выражение Выражение, которое либо истинно, либо ложно. логическое значение Существует ровно два логических значения: True и False . Логические значения получаются, когда логическое выражение оценивается интерпретатором Python. Они имеют тип bool . ветвь Один из возможных путей потока выполнения, определяемый условным выполнением. цепочка условная Условная ветвь с более чем двумя возможными потоками выполнения. В Python связанные условные операторы записываются с помощью if . Элиф. операторы else. оператор сравнения Один из операторов, который сравнивает два значения: == , != , > , , >= , а также . условие Логическое выражение в условном операторе, определяющее, какая ветвь выполняется. условный оператор Оператор, управляющий потоком выполнения в зависимости от некоторого условия. В Python ключевые слова if , elif и else используются для условных операторов. логический оператор Один из операторов, который объединяет логические выражения: и , или и не . модульный оператор Оператор, обозначаемый знаком процента ( % ), который работает с целыми числами и дает остаток при делении одного числа на другое. вложение одной структуры программы в другую, например условный оператор внутри ветви другого условного оператора. приглашение Визуальная подсказка, сообщающая пользователю о необходимости ввода данных. преобразование типов Явный оператор, который принимает значение одного типа и вычисляет соответствующее значение другого типа. Оборачивание кода в функцию Процесс добавления заголовка функции и параметров к последовательности операторов программы часто называют «обертыванием кода в функции». Этот процесс очень полезен, когда рассматриваемые операторы программы будут использоваться несколько раз.

4.13. Упражнения¶

Попробуйте вычислить в уме следующие числовые выражения, а затем используйте интерпретатор Python, чтобы проверить свои результаты:

Что случилось с последним примером? Почему? Если вы смогли правильно предвидеть реакцию компьютера во всех случаях, кроме последнего, пора двигаться дальше. Если нет, найдите время, чтобы придумать собственные примеры. Изучайте оператор модуля, пока не будете уверены, что понимаете, как он работает.

Оберните этот код в функцию compare(x, y) . Вызовите compare три раза: по одному, если первый аргумент меньше, больше и равен второму аргументу.

Чтобы лучше понять логические выражения, полезно составить таблицы истинности. Два логических выражения логически эквивалентны тогда и только тогда, когда они имеют одну и ту же таблицу истинности.

Следующий скрипт Python выводит таблицу истинности для любого логического выражения в двух переменных: p и q:

Вы узнаете, как работает этот скрипт, в последующих главах. Сейчас вы будете использовать его для изучения логических выражений. Скопируйте эту программу в файл с именем p_and_q.py , затем запустите ее из командной строки и введите: p или q , когда будет предложено ввести логическое выражение. Вы должны получить следующий вывод:

Теперь, когда мы видим, как это работает, давайте поместим его в функцию, чтобы упростить использование:

Мы можем импортировать его в оболочку Python и вызвать truth_table со строкой, содержащей наше логическое выражение в p и q в качестве аргумента:

Используйте функции truth_table со следующими логическими выражениями, каждый раз записывая создаваемую таблицу истинности:

  1. не(p или q)
  2. p и q
  3. не(p и q)
  4. нет(р) или нет(q)
  5. не(р) и не(q)

Какие из них логически эквивалентны?

Введите следующие выражения в оболочку Python:

Проанализируйте эти результаты. Какие наблюдения вы можете сделать о значениях разных типов и логических операторах? Можете ли вы записать эти наблюдения в виде простых правил о и и или выражениях?

Поместите этот код в функцию dispatch(choice) . Затем определите function_a , function_b и function_c, чтобы они выводили сообщение о том, что они были вызваны. Например:

Поместите четыре функции ( dispatch , function_a , function_b и function_c в скрипт с именем ch04e05.py . Внизу этого скрипта добавьте вызов dispatch('b') . Вывод должен быть таким:

Наконец, измените сценарий, чтобы пользователь мог вводить «a», «b» или «c». Протестируйте его, импортировав свой скрипт в оболочку Python.

Напишите функцию с именем is_divisible_by_3, которая принимает одно целое число в качестве аргумента и печатает «Это число делится на три». если аргумент делится на 3 без остатка и «Это число не делится на три». иначе.

Теперь напишите аналогичную функцию с именем is_divisible_by_5 .

Обобщите функции, которые вы написали в предыдущем упражнении, в функцию с именем is_divisible_by_n(x, n), которая принимает два целочисленных аргумента и выводит, делится ли первый на второй. Сохраните это в файле с именем ch04e07.py. Импортируйте его в оболочку и попробуйте. Пример сеанса может выглядеть следующим образом:

Каков будет вывод следующего?

Объясните, что произошло и почему это произошло.

Следующий скрипт в файле house.py рисует простой дом на холсте:

Запустите этот скрипт и убедитесь, что у вас появилось окно, похожее на это:

  1. Поместите код дома в функцию с именем draw_house().
  2. Запустите скрипт сейчас. Ты видишь дом? Почему бы и нет?
  3. Добавьте вызов draw_house() в нижней части скрипта, чтобы дом вернулся на экран.
  4. Параметризируйте функцию с параметрами x и y — тогда заголовок должен стать def draw_house(x, y): , чтобы вы могли передать расположение дом на холсте.
  5. Используйте draw_house, чтобы разместить на холсте пять домов в разных местах.

Исследование: Прочтите Приложение B и напишите сценарий с именем houses.py, который при запуске выдает следующее:

GASP illustration 3

Подсказка: вам нужно будет использовать Polygon для крыши вместо двух Line, чтобы получить filled=True< /tt> для работы с ним.

Пользовательские функции

Как следует из названия, эти функции определяются и создаются пользователями. Функции в C++ согласуются с понятием функций в математике. Например, они допускают функциональную композицию, такую ​​как f(f(p),q,f(f)). Однако функции C++ либо возвращают одно значение, либо не возвращают никакого значения. Рассмотрим следующий пример. Это определяемая пользователем функция, которая вычисляет значение факториала небольшого целого числа.

Целочисленная переменная n является входом функции и также называется параметром функции.

Если функция определена после функции main(), то ее прототип должен быть указан int fact (int);

вверху, чтобы компилятор не помечал ошибку прямой ссылки. В определении прототипа указывается имя функции, количество и тип каждого параметра, а также тип выходных данных.

Все фрагменты кода, такие как прототип функции, вызывающая основная программа и полное определение функции, показаны ниже

Обычные результаты выполнения этого кода показаны ниже:

Примеры функций
Пример 1

Напишите функцию для определения максимума двух целых чисел x и y. Ответ:

Эта функция принимает на вход два целых числа x и y. Он выбирает x как результат, если x больше, чем y; в противном случае для результата выбирается y.

Пример 2:

Напишите функцию, которая находит максимальное из трех целых чисел x, y и z. Ответ:

Чтобы начать с x, предполагается, что это результат. Затем результат сравнивается с y и z. если y или z больше, чем результат, y или z выбирается для результата соответственно.

Одна и та же функция может состоять из функции max2, как показано ниже:

Этот расчет показывает использование функциональной композиции max(x, y, z) = max(x, max(y,z))

Пример 3

Напишите функцию, которая возвращает количество трехзначных натуральных чисел, которые делятся либо на 4, либо на 5, но не на оба числа.

Ответ: эта функция сначала просматривает все возможности для трехзначных чисел, затем проверяет, делится ли это текущее значение «i» на 4 ИЛИ 5, и в то же время проверяет, не является ли оно двойным подсчетом другого числа. .

Пример 4

Напишите функцию, которая будет возвращать истину, если заданное число n является простым, иначе она должна возвращать ложь.

Ответ: Эта функция проверяет все делители от 2 до n/2 -1 включительно. Он выйдет заранее, если найдет делитель до завершения цикла. Если код завершает цикл, это означает, что число не имеет делителя и, следовательно, является простым числом.

Пример 5

Напишите функцию, которая будет возвращать true, если заданное число является палиндромом, в противном случае она должна возвращать false. Число называется палиндромом, если оно читается одинаково независимо от того, просматривается ли оно слева направо или наоборот. Например, 506605 — это палиндром, а 5123 — нет.

Ответ: Логика палиндрома состоит в том, чтобы перевернуть заданное число n. Это делается циклом while. Заданное число n является палиндромом тогда и только тогда, когда исходное n и его обращение идентичны.

MATLAB ® использует алгоритмы для генерации псевдослучайных и псевдонезависимых чисел. Эти числа не являются строго случайными и независимыми в математическом смысле, но они проходят различные статистические тесты на случайность и независимость, и их расчет можно повторять в целях тестирования или диагностики.

Функции rand , randi , randn и randperm являются основными функциями для создания массивов случайных чисел. Функция rng позволяет управлять начальным числом и алгоритмом, генерирующим случайные числа.

Функции случайных чисел

Существует четыре основных функции случайных чисел: rand , randi , randn и randperm . Функция rand возвращает числа с плавающей запятой от 0 до 1, взятые из равномерного распределения. Например:

r1 — это вектор-столбец размером 1 000 на 1, содержащий действительные числа с плавающей запятой, взятые из равномерного распределения. Все значения в r1 находятся в открытом интервале (0, 1). Гистограмма этих значений примерно плоская, что указывает на довольно равномерную выборку чисел.

Функция randi возвращает двойные целые значения, взятые из дискретного равномерного распределения. Например,

r2 — это вектор-столбец размером 1000 на 1, содержащий целые значения, взятые из дискретного равномерного распределения, диапазон которого находится в близком интервале [1, 10]. Гистограмма этих значений примерно плоская, что указывает на довольно равномерную выборку целых чисел от 1 до 10.

Функция randn возвращает массивы действительных чисел с плавающей запятой, полученные из стандартного нормального распределения. Например:

r3 – это вектор-столбец размером 1 000 на 1, содержащий числа, взятые из стандартного нормального распределения. Гистограмма r3 выглядит примерно как нормальное распределение со средним значением 0 и стандартным отклонением 1.

Вы можете использовать функцию randperm для создания двойного массива случайных целочисленных значений, не имеющих повторяющихся значений. Например,

r4 — это массив 1 на 5, содержащий целые числа, случайно выбранные из диапазона [1, 15]. В отличие от randi , который может возвращать массив, содержащий повторяющиеся значения, массив, возвращаемый randperm, не имеет повторяющихся значений.

Последовательные вызовы любой из этих функций возвращают разные результаты. Такое поведение полезно для создания нескольких разных массивов случайных значений.

Генераторы случайных чисел

MATLAB предлагает несколько вариантов алгоритма генератора, которые перечислены в таблице.

< td>Быстрый вихрь Мерсенна, ориентированный на SIMD
ЗначениеИмя генератораКлючевое слово генератора
' Twister' Mersenne Twister (используется потоком по умолчанию при запуске MATLAB)mt19937ar
'simdTwister'dsfmt19937
'combRecursive' Комбинированный множественный рекурсивный mrg32k3a
'multFibonacci' Мультипликативный лаговый Фибоначчиmlfg6331_64
'philox' Генератор Philox 4x32 с 10 патронамиphilox4x32_10
'threefry' Threefry 4x64 генератор на 20 цикловthreefry4x64_20
'v4' Устаревший генератор MATLAB версии 4.0mcg16807< /td>
'v5uniform' Устаревший универсальный генератор MATLAB версии 5.0swb2712
'v5normal' Устаревший генератор нормалей MATLAB версии 5.0shr3cong

Используйте функцию rng, чтобы установить начальное число и генератор, используемые функциями rand , randi , randn и randperm .Например, rng(0,'twister') сбрасывает генератор в состояние по умолчанию. Чтобы избежать повторения массивов случайных чисел при перезапуске MATLAB, см. раздел Почему случайные числа повторяются после запуска?

Дополнительную информацию об управлении состоянием генератора случайных чисел для повторения вычислений с использованием одних и тех же случайных чисел или обеспечения использования разных случайных чисел в повторяющихся вычислениях см. в разделе Управление генерацией случайных чисел.

Типы данных со случайными числами

Функции rand и randn по умолчанию генерируют значения с двойной точностью.

Случайные числа на компьютере не являются случайными. Они представляют собой последовательность «псевдо» случайных чисел.

Во-первых, на самом деле невозможно (да и нежелательно) иметь настоящие случайные числа. Нам нужна повторяющаяся последовательность кажущихся случайными чисел, удовлетворяющая определенным свойствам, таким как среднее значение списка случайных чисел от, скажем, от 0 до 1000, должно быть равно 500. Другие свойства, такие как отсутствие (предсказуемой) связи между текущее случайное число и желательно следующее случайное число.

В любой программе, где необходимы случайные значения (например, в большинстве симуляций), язык программирования должен предоставлять нам генератор случайных чисел. Это будет функция, которая при вызове предоставит нам одно случайное число. при повторном вызове предоставить нам другой случайный номер.

«Псевдо» случайные числовые последовательности

Сгенерировать одно случайное число очень просто. 27. Вот!

Сгенерировать последовательность случайных чисел довольно сложно, потому что мы хотим, чтобы определенные предположения об этой последовательности были верными!

Обратите внимание, что генераторы "случайных" чисел производят так называемые "псевдослучайные" числа, что означает, что числа только "аппроксимируют" реальную случайность.

  1. Повторяемость: почему?
  2. Скорость (быстрый расчет): почему?
  3. Среднее значение – это среднее значение диапазона.
  4. За нечетным следует четное, равно как и четное, за которым следует нечетное.
  5. Выбирая 1000 номеров от 0 до 1000, мы не попадем в каждое число.
  6. Выбирая числа от 0 до 1000, мы с равной вероятностью получим любое число.
  7. При выборе 10 000 чисел от 0 до 1000 мы, скорее всего, получим примерно по 10 каждого числа.

Некоторые возможные методы создания случайной последовательности:

  1. Время – используйте часы компьютера.
  2. Радиация. Установите в компьютер излучение и вычислите, как часто распадаются атомы. (угу)
  3. Математика — используйте формулу (см. ниже)

Преимущество использования математики для генерации случайных чисел (последовательности) заключается в том, что они ПОВТОРЯЕМЫ. Это важно по следующей причине: отладка программы. Представьте, какие проблемы у вас уже есть с поиском ошибок в коде. Что произойдет, если «путь» (или поток программы) каждый раз будет другим (случайным)? Отладка была бы кошмаром! В конце концов, программисту каждый раз нужна одна и та же последовательность случайных чисел, но пользователю может потребоваться другая последовательность. Чтобы сгенерировать другую последовательность случайных чисел, мы используем функцию «затравки». Для целей этого курса вам, скорее всего, не потребуется «задавать» генератор случайных чисел.

Специфические языковые функции.

В случае Matlab и C этим генератором является функция rand(). В случае с Java или Actionscript есть случайная функция, связанная с библиотекой Math.

Matlab: ранд

Функция rand в Matlab

Функция генерации случайных чисел в Matlab называется rand. В Matlab функция rand возвращает число с плавающей запятой от 0 до 1 (например, .01, .884, .123 и т. д.).

Чтобы создать логическое значение (true/false) для подбрасывания монеты! р

C: ранд

Функция rand в C

В C rand() возвращает значение от 0 до большого целого числа (вызывается по имени "RAND_MAX", найденному в stdlib.h).

Чтобы преобразовать формат C в формат Matlab, в C мы должны сказать: "rand() / (float)RAND_MAX".

Чтобы создать логическое значение (true/false) для подбрасывания монеты!

ActionScript: Math.random.

Случайная функция в ActionScript

Функция Math.random() генерирует значение больше или равное 0 и меньше 1,0.

Чтобы создать логическое значение (true/false) для подбрасывания монеты!

Чтобы создать число от 1 до 10, нужно сделать следующее:

Примеры

Ниже приведены примеры генерации значений с помощью генератора случайных чисел.

Для краткости в этих примечаниях используется функция rand, которая вычисляет случайное число от 0 до (меньше) 1. Если используемая вами функция не выдает число от 0 до 1, вы должны иметь возможность преобразовать свое число генератора в этот формат путем деления на большое целое число.

Дано случайное число от 0 до 1, относительно легко сгенерировать случайные числа или значения любого типа. Например:

Случайное число от 0 до 100

Случайное значение true или false

Случайное число от 50 до 100

Случайное целое число от 1 до 10

Чтобы получить целое число из значения с плавающей запятой, мы можем использовать такие функции, как round, ceil или floor. Функция round возвращает ближайшее целое число, ceil — следующее большее целое число, а floor — следующее меньшее целое число. Таким образом, потолок 1,001 равен 2, а потолок 1,999 также равен 2. Раунд 1,001 равен 1, а раунд 1,999 равен 2. Пол 1,999 равен 1 и т. д. Максимум 1,9 равен 2, как и потолок 1,1 или 1,0001. .

Генерация случайных чисел

Маловероятно, что вам когда-либо придется писать собственный генератор случайных чисел. Для большинства/всех языков, которые вы когда-либо будете использовать, уже есть один, написанный для вас. При этом есть некоторая ценность в знании возможных способов генерации чисел. Эта ценность заключается в том, чтобы знать, чего ожидать, когда вы получаете последовательность случайных чисел. Вы бы не хотели, чтобы ваши призраки Pac-Man всегда смещались в правый верхний угол экрана, что могло случиться, если бы случайные числа, которые они использовали для перемещения, были не такими уж случайными.

Следующая идея представляет собой простой, быстрый и эффективный генератор случайных чисел, но очень чувствительный к выбору констант:

next_number = (previous_number * Constant1) Mod Constant2

Нам действительно не нужны переменные next и previous, поэтому мы можем сказать:

число = (число * Константа1) Mod Константа2

Константа2 обычно выбирается в качестве простого числа. Почему? (думаю, next_number = 0)

Проблема: переполнение!

Решение: больше математики!

Идея приведенного выше кода состоит в том, чтобы избежать переполнения путем перестановки уравнения таким образом, чтобы никакая часть не могла быть больше M.

Читайте также: