(495)240-8280ПН-СБ с 12:00 до 20:00
We speak English

Урок 4.3. Немного о рандомности

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

Вы научитесь:

  • Использовать функцию randint(a,b)
  • Создавать список рандомных (случайных) целых чисел
  • Анализировать характеристики списка

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

Введение

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

Обратите внимание на выражение [0] * 3, с помощью которого можно продублировать элемент 3 раза.

Что произойдет при введении выражения 3 * [1,2,3]? То же самое выражение в приложении Калькулятор (Calculator) выдаст совершенно другой результат, как показано в примере.

Всегда будьте внимательны при работе со списками, программируя на языке Python, потому что результаты отображения могут быть не совсем такими, как вы привыкли их видеть!

В данном уроке мы рассмотрим основы работы со списками...

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

1. В рамках данного проекта при создании новой программы Python из выпадающего списка типов выбирайте Random Simulations (Случайное моделирование) в пункте Type:.

2. Шаблон "Случайное моделирование" позволяет работать с двумя модулями: math и random. Вы уже знакомы с такими функциями модуля math как sqrt(), тригонометрические функции, exp(), log() и так далее.

В модуле random есть функции для работы с рандомными числами.

Еще одна полезная функция - это randint(a, b), которая отображает рандомное целое число между значениями а и b (включительно). В качестве аргументов могут быть числа, переменные или выражения, которые образуют число.

Примечание для учителя: Компьютеры используют алгоритмы высокой сложности для генерирования "псевдо-рандомных" чисел. Их методы предсказуемые: ввод одного и того же значения для функции seed(), которая включена в модуль random, выдает одну и ту же последовательность рандомных чисел каждый раз, когда пользователь запускает программу. Это может быть полезно при тестировании, но не при моделировании фактических рандомных событий. Существуют способы (в большинстве случаев с использованием встроенных часов) для отбора рандомных чисел с рандомным числом попыток для большего ощущения рандомности.

3. Для начала создайте пустой список:

nums=[] (в скобках ничего не указывайте)

Используйте цикл с оператором for для создания списка из 100 рандомных чисел, каждое из которых находится в диапазоне от 0 до 25 (вы выбираете индексную переменную (index) и диапазон (size)).

Блок (block) цикла выглядит следующим образом:

nums.append(randint(1,25))

Обратите внимание на две закрывающих скобки справа в конце выражения - это типичная синтаксическая ошибка.

Примечание для учителя:
Еще один способ понять лучше, как работают списки, кроется в следующем выражении:
num=[randint(1,25) for i in range(100)]

4. Добавьте выражение print в программу (после цикла с оператором for), чтобы отобразить список после создания чисел:

print(nums)

Теперь запустите программу, чтобы убедиться в том, что она работает. Нажатие на ctrl+R в приложении Shell позволить запустить программу повторно, и вы будете видеть разный набор чисел с каждым последующим запуском.

5. Вот пример запуска программы.

Добавьте в свою программу код, чтобы определить среднее значение чисел. Попробуйте сделать это сначала самостоятельно (Вспомните предыдущий урок!)

Отобразите минимальное и максимальное значения списка (Совет: используйте меню: menu > Built-ins > Lists)

Сможете ли вы отсортировать элементы?

6. Немного про сортировку...

В языке программирования Python есть два инструмента сортировки списков:

  • nums.sort() упорядочивает элементы по возрастанию;
  • sorted(n) отображает отсортированный список, при этом не изменяет исходный список.

Используйте функцию nums2 = sorted(n), чтобы сохранить исходный список и создать новый отсортированный список, который называется nums2.

Примечание для учителя:
Функции list.sort() и sorted(list) являются двумя разными методами спискового класса.
.sort() изменяет список и отображает None.
sorted() не изменяет список, но отображает отсортированный список.
Обратите внимание на разный синтаксис. Более подробную информацию вы можете найти на сайте.

Дополнительное упражнение

7. После сортировки списка можно определить срединное значение выборки median и диапазон range (разница между минимальным и максимальным значением) набора данных.

Добавьте выражения в свою программу, чтобы отобразить эти значения. Обратите внимание: если длина списка (size) является четным числом, то срединное значение выборки будет являться средним значением двух чисел, находящихся в середине списка.

Используйте функцию len(<list>) из меню: menu > Built-ins > Lists, чтобы посмотреть длину списка.

Можете ли вы также определить значения Q1(первого квартиля) и Q3 (третьего квартиля)?

Примечание для учителя: Решение для дополнительного упражнения (будьте внимательны и не используйте ключевые слова!):

lenth = len(nums2)
if lenth % 2 == 0:
     medi = (nums2[lenth // 2] + nums2[lenth // 2 + 1]) / 2
else
     medi = (nums2[lenth // 2])
print("Median=",medi)
rang = max(nums2) - min(nums2)
print("Range = ",rang)

Дополнительное задание: определить режим(ы) (mode)!