Поглиблений курс розробки на Python
Розділ
>
Рівень
Модулі математики
Випадковий модуль
Мета
Проводьте симуляції та тести для підготовки до можливих помилок і несподіванок під час будівництва сільськогосподарського комплексу, використовуючи модуль random.
Через анекс знаходиться офіс, який займається деякими адміністративними завданнями, пов’язаними з оформленням документів щодо доставки, житла та логістики для будівництва. Буде корисно провести кілька сценаріїв, використовуючи наявні дані для розрахунку затримок та відмов обладнання. Для цього нам допомагає модуль random, активований за допомогою import random .
Цей модуль використовується для генерації випадкових значень у різних межах, що дозволяє вам проводити симуляції або додавати випадкові елементи до ваших розрахунків/завдань. Для наших потреб ми будемо використовувати наступні функції:
random.seed(): Встановлює початкове значення для генерації випадкових чисел, приймає один аргумент — число, яке ви хочете використати як seed. Це означає, що будь-яка випадкова функція, що використовується з конкретним seed, повертатиме ті самі результати. Це використовується для контролю над генерацією випадкових значень і для можливості відтворення певних результатів.random.random(): Повертає випадкове число з плаваючою крапкою від0до1.random.randint(): Приймає два аргументи, генерує число між цими двома аргументами, включаючи самі числа. Результат повертається як ціле число.random.uniform(): Подібно до попередньої функції, але повертає випадкове число з плаваючою крапкою замість цілого.random.triangular(): Подібно до попередньої функції, але має додатковий аргумент як модифікатор під назвою mode. Значення mode має бути числом між двома числами діапазону. Згенероване число буде статистично ближчим до mode, ніж до випадкового числа між першими двома аргументами.random.choice(): Приймає список як аргумент, вибирає один елемент випадковим чином з цього списку.random.choices(): Генерує випадковий список, вибраний із іншого списку, приймає три аргументи: список, з якого ви хочете вибирати, список, який визначає ваги для кожного елемента списку, і, нарешті, змінну з ім’ям k, якій ви присвоюєте значення, що визначає, скільки вибірок ви хочете зробити з цього списку. Кількість вибірок може бути більшою, ніж сам список, оскільки будуть генеруватися дублікати згідно з призначеними вагами.random.shuffle(): Приймає список як аргумент і перемішує його випадковим чином.random.sample(): Приймає два аргументи — список для вибірки та кількість вибірок, які ви хочете здійснити. Це спрощена версіяrandom.choices().
Для початку пройдіть до позначки X зі світлим фоном і зверніться до столу, використайте функцію read(), щоб прочитати записку та визначити необхідні дані для проведення симуляції з деякою випадковою варіацією. Ми збираємося провести симуляцію відмови обладнання, записка повідомить вам, який seed використовувати для генерації випадкових чисел, а також список, із якого здійснюється вибірка. Використайте функцію random.seed() і вставте значення, зазначене у записці.
Пройдіть до позначки X з темним фоном через синій килим і зверніться до столу. У нас є константа-список з ім’ям sectors, який містить райони сільськогосподарського комплексу, описані у попередній записці. Створіть змінну з ім’ям selection, щоб зберегти значення, отримане за допомогою random.choice(), використовуйте константу-список sectors для отримання зразка, наприклад так: selection = random.choice(sectors). Створіть ще одну змінну з ім’ям delay і збережіть у неї значення, отримане за допомогою random.random(), щоб змоделювати похибки, спричинені затримками.
Створіть ще одну змінну з ім’ям defect і збережіть у неї значення, отримане за допомогою random.randint(), для генерації відсотка потенційної відмови обладнання. Додайте аргументи 0 і 15, щоб згенерувати значення відсотка в цьому діапазоні. Після того, як змінні selection, delay і defect будуть налаштовані, використайте заздалегідь написану функцію write() з цими трьома змінними у вказаному порядку, щоб зафіксувати дані, які можуть бути використані для тестування потенційних проблем під час будівництва.
Пройдіть до позначки X з золотим фоном і використайте функцію read(), щоб продовжити побудову прогнозів, дані у записці міститимуть матеріали, кількості і дані для вибірки. Ми збираємося провести більшу симуляцію за даними з записки, включаючи константу-список з ім’ям materials, яка містить типи матеріалів, зазначені у записці.
Пройдіть до позначки X з темним фоном через червоний килим і зверніться до столу. Створіть список з ім’ям weights і збережіть у ньому чотири числові значення, зазначені у записці, які відповідають матеріалам у порядку їх подання. Наприклад: weights = [400, 600 , -insert value-, -insert value-]
Створіть змінну з ім’ям simulation і збережіть у неї значення, отримане за допомогою random.choices(). Додайте константу-список materials, список weights, який ви створили, і змінну k з одиницями вибірки, зазначеними у записці, наприклад так: simulation = random.choices(materials, weights , k = insert sampling units ). Використовуйте змінну simulation разом із заздалегідь написаною функцією write(), щоб зафіксувати дані.
Пройдіть до позначки X з темним фоном через зелений килим і зверніться до столу, використайте функцію random.shuffle() зі списком simulation, який ви створили, щоб перемішати його, наприклад так: random.shuffle(simulation). Це перемішує список, тому не потрібно зберігати результат, оскільки функція модифікує список напряму. Створіть список з ім’ям sample, щоб зберегти значення, отримане за допомогою random.sample(), де першим аргументом використовується список simulation, а другим — число 3 для отримання трьох випадкових елементів, наприклад так: sample = random.sample(simulation, k=3). Використовуйте simulation і sample разом із заздалегідь написаною функцією write(), щоб зафіксувати нові вибірки.
Нарешті, пройдіть до позначки X з темним фоном через фіолетовий килим і зверніться до столу, створіть змінну з ім’ям defect та збережіть у неї результат функції random.uniform(), додавши аргументи 3 і 10. Ці значення вибірки стосуються початкової симуляції та вибірки, взятої з неї; ми використаємо це для генерації потенційних марж відмов обладнання за результатами вибірки.
Створіть змінну з ім’ям losses та збережіть у неї значення, отримане за допомогою random.triangular(), додавши значення 200, 600 і 400. Це числові значення матеріалів, зазначені у попередній записці, а саме найменше, найбільше та значення, найближче до середнього. Це дозволяє отримати трикутне випадкове число, засноване на кількості матеріалів, використаних у симуляції. Використайте значення defect і losses разом із заздалегідь написаною функцією write(), щоб отримати результати і завершити рівень.