Невипадкові випадковості з модулем random у python
На цьому уроці ми створимо різноманітні випадкові події. Random у python допоможе згенерувати випадкове число чи обрати випадкову дію і, навіть, створити випадкову історію!
У комп’ютерних програмах часто потрібна емуляція випадкових подій. Наприклад, при розробці ігор або тестування. Такі події й створює модуль random у python. Насправді комп’ютер не може створити абсолютну випадковість, але в середині працюють алгоритми, котрі забезпечують досить гарний рівень випадковості. Для звичайного користувача подія чи число буде виглядати випадковим і лише математики, можуть називати цей процес “майже випадковим”.
Модуль random надає безліч функцій, корисних у різних ситуаціях, але ми поки що зупинимося на кількох:
random (): генерує випадкове число від 0.0 до 1.0
randint(min, max) – генерація цілого числа в заданому діапазоні між min та max.
randrange (start, stop, step): повертає випадкове число з певного набору чисел у діапазоні між start (включно) та stop (не включно) з кроком step
shuffle() – бере послідовність і повертає її в перемішаному стані.
choice() – вибір випадкового елемента із заданого набору.
import random
print(random.random()) # значення від 0.0 до 1.0
print(random.random() * 100) #значення від 0.0 до 100.0
print(random.randint(20, 35)) # значення від 20 до 35
print(random.randrange(30, 90, 10)) # повертає кругле число (бо крок 10) від 30 до 90 (90 не включається)
list1=["a","b","c","d"]
print(random.shuffle(list1)) # перемішує елементи списку випадковим чином
print(random.choice(list1)) # повертає випадковий елемент списку
Випадкове ціле число randint()
1: Зробимо програму особистого тренера, яка буде випадково генерувати нам тренування і казати скільки разів робити кожну вправу.
import random
print (“Програма-тренер”)
a=random.randint(20,50)
print (f”Стрибай {a} разів”)
Важливо! Підключення бібліотеки import random достатньо робити один раз на початку програми.
Як ви, мабуть, вже зрозуміли, у random.randint передається два числа. Команда генерує випадкове число від першого до другого (включно)
2: Додайте ще 2 вправи так, щоб діапазон випадкових значень відрізнявся.
3: Напишімо тренажер з таблички множення. Програма буде генерувати два випадкових числа 12 разів і видавати приклад. Користувач вводитиме відповідь, а програма казатиме чи вона правильна. Ось план програми
цикл від 1 до 🤖:
a=випадкове_число_від_1до_10
b=випадкове_число_від_1до_10
res=одне_число_помножене_на_інше
answer=int(input(f"{a} * {b}="))
якщо (відповідь користувача дорівнює результату):
вивести "Вірно!Молодець!"
якщо ні:
вивести "Не вірно"
4: Додайте до завдання 3 змінну, яка буде рахувати кількість правильних відповідей. Після всіх запитань програма показує, скільки правильних відповідей дав юзер.
Випадкова послідовність shuffle()
Фристайл— зимовий олімпійський вид спорту, загальна назва для різноманітних дисциплін, в яких лижники змагаються не тільки на швидкість проходження певної дистанції, а й у виконанні лижних трюків.
5: Уявіть собі, що на участь у змаганні з фристайлу зареєструвалися спортсмени з багатьох країн. І нам треба випадково визначити хто за ким буде виступати та показувати свої трюки. Для цього створіть список з 3-5 країн. І випадковим чином визначте послідовність виступів.
import random
countries=["Японія","Швеція","Україна","Данія","Мексика"]
random.shuffle(countries)
print(countries)
Випадковий елемент списку choice()
Випадкові фантастичні програми з Random у Python
6: Зараз ми створимо випадкову історію за допомогою random.choice(). Ця функція обирає один випадковий елемент зі списку. Подивімось, як вона працює, на наступному прикладі
6.1: Для цього спершу додайте такі списки:
woman = [ "Вчена", "Королева", "Піратка", "Гігантська кролиця"]
man = [ "поліцейського", "художника", "дідуся", "робота-кіборга"]
place = [ "на Плутоні", "в супермаркеті", "в страшній печері з кажанами"]
she_wore = [ "Коcтюм для підводного плавання", "крила феї", "паперовий пакет"]
he_wore = [ "фіолетовий костюм.", "костюм акули.", "пляжний рушник."]
womanSays = [ "Хто ти?", "Розумієш, в чому справа?", "Котра година?"]
manSays = [ "біп-буп", "Не їж жаб!", "За що?"]
consequence = [ "мир у всьому світі.", "хаос.", "гиганская нога розчавила їх.", "веселки"]
worldSays = [ "Безглузда нісенітниця!", "Сир зараз в моді!", "Я тану!"]
6.2: Для початку історії потрібно вибрати персонажів. Для цього після списків додайте:
print (f"{random.choice (woman)} зустріла {random.choice (man)} {random.choice (place)}")
6.3: Аналогічно зробіть з іншими списками, щоб вийшла історія:
{Woman} зустріла {man} {place}
Вона була одягнена в {she_wore}
Він був одягнений в {he_wore}
Вона сказала: {womanSays}
Він сказав: {manSays}
В результаті сталося: {consequence}
Світ сказав: {worldSays}
6.4: Видаліть з кожного списку по одному елементу, який вам найменше подобається
6.5: Додайте в кожен список ще один або кілька елементів на ваш смак для ще цікавіших історій
Якщо призабути функції списків, перейдіть на урок по списках, щоб згадати.
У грі з казино виграє тільки казино. Програма, яка покаже, чому ніколи не можна виграти у казино.
7: Слот-маши́на. Напишімо програму грального автомата. Це така гра, в якій автомат 3 рази генерує випадковий фрукт. І:
Якщо випало 3 однакових фрукти, то юзер виграв 3 долари.
Якщо випало 2 однакові фрукти, то юзер виграв 1 долар.
Якщо випали різні фрукти – юзер втратив 10 доларів.
Програма має писати суму, яку виграв або програв юзер. Фруктів має бути не менше 5-ти (обери фрукти самостійно).
Якщо не знаєте з чого почати ось план програми, який може допомогти:
import random
fruits=['список','з','різних','фруктів','які','виводить','гральний','автомат']
a1=випадковий елемент зі списку фруктів
a2=випадковий елемент зі списку фруктів
a3=випадковий елемент зі списку фруктів
Вивести "Тобі випало a1 a2 a3"
якщо всі елементи однакові:
написати "Ви виграли 3 долари!"
якщо є два однакових елементи з трьох:
написати "Ви виграли 1 долар!"
якщо ні:
написати "Ви програли 10 доларів!"
Додаткові завдання: Random у python
8: Ускладнюємо ігровий автомат: Додайте програмі можливість грати багато разів за допомогою циклу. В циклі кожного разу запитують користувача “Грати ще?”, відповідь “так”, то програма генерує фрукти ще раз. Якщо відповідь інша – то програма зупиняється.
9: Ускладнюємо попередню гру: Перед початком гри запитай у користувача, скільки грошей той хоче поставити. Кожен раз, коли користувач виграв до поставленої суми додаються відповідні долари. Кожен раз коли програв – віднімаються. Виводьте суму на рахунку користувача на екран після кожної гри.
10: “Нечесне казино”. Змініть гру так, щоб наше “казино” стало нечесним, тобто воно має створювати такі фрукти, щоб користувач завжди програвав. (Як це зробити придумайте самостійно)
11 LU: Напишіть програму-тренажер з математики. Програма має випадково генерувати числа й обирати випадкову математичну дію (додавання, віднімання, множення або ділення). Для додавання і віднімання числа мають генеруватися в межах 100. Для множення і ділення приклади мають бути з таблички множення. Програма виводить приклад і каже чи правильно порахував користувач. В кінці програма має написати кількість правильних відповідей.
12: Випадкове привітання: створіть список своїх друзів чи родичів. Створіть інший список з привітаннями та побажаннями (вітати можна з якимось святом, чи просто з гарним днем).
Нехай програма обирає випадкову людину зі списку і випадкове привітання і друкує це привітання та кому воно адресоване.
Відео по темі
Домашня робота
1: Закінчи випадкову історію, яку робили на занятті. Допиши по 2 своїх варіанти у кожен список (персонажі, дії…).
2: Орел чи решка? Уявіть себе новим ведучим тревел-шоу Орел і Решка (це програма, де двоє ведучих подорожують і в одного є лише 100 доларів на два дні у якомусь місці, а у іншого необмежені кошти на золотій картці. )
- Запишіть в змінну day випадкове число від 20 до 40. Це буде кількість днів для зйомок нового сезону програми, а отже, для подорожей!
- Створіть список міст, в які будемо подорожувати (3-4 шт). Перемішайте список за допомогою shuffle(), щоб маршрут був випадковим.
- Створіть список друзів (3-4) і випадково оберіть одного друга на роль другого ведучого. Його ім’я запишіть в змінну friend.
- Створіть список з двох слів: “Орел”, “Решка”.
Якщо випаде Орел, запиши в змінну coin=”В першому місті я буду з золотою карткою!”
Якщо випаде Решка, запиши в змінну coin=”В першому місті я буду зі 100 доларами” - Виведіть на екран отримані дані, наприклад так:
“Це новий сезон шоу Орел і Решка з новими ведучими!! За 25 днів я і Мілана відвідаємо такі міста: [‘Одеса’, ‘Барселона’, ‘Осло’, ‘Нью-Йорк’]. В першому місті я буду зі 100 доларами”
Підказка: все, що написано синім береться зі змінних
3: Напишіть програму, яка запитує користувача, як його звуть i визначає, в який факультет потрапить користувач: Ґрифіндор, Хафелпаф, Рейвенкло чи Слизерин (Gryffindor, Slytherin, Ravenclaw, and Hufflepuff) . Твоя програма повинна визначати факультет випадково.
4: Створіть два списки: в перший запишіть членів вашої родини. В другий – список домашніх обов’язків. Програма повинна випадковим чином розподілити обов’язки між членами сім’ї.
Підказка:
family=['me', 'mom', 'dad', 'sister Zlata', 'brother Danya']
print (family[0])
family[0] – так можна працювати з першим членом родини. family[1] – другий член родини
5 (Додаткове-Необов’язкове): Напишіть програму Магічної Восьмої Кулі (деталі нижче).
Magic 8 ball (Магічна восьма куля) – це така куля передбачень, жартівливий спосіб передбачити майбутнє. У цій кулі є віконце, в якому з’являється відповідь, на питання, яке задає людина. У кулі всього 20 варіантів відповідей.
Ось приклад такого кулі онлайн: https://8-gund.com/en/
У вашій програмі має бути можливість поставити запитання. Куля має випадково вибрати відповіді на ці питання. Питання ставить користувач. Можливі відповіді, які може дати ваша куля українською та англійською(мову оберіть самі):
answersUa=[
# Позитивні:
'Безперечно', 'Очевидно, що так', 'Ніяких сумнівів',
'Безумовно так', 'Можеш бути впевнений в цьому',
# Нерішуче позитивні
'Мені здається - «так»', 'Найімовірніше', 'Хороші перспективи',
'Знаки кажуть - «так»', 'Так',
# Нейтральні
'Поки не ясно, спробуй знову', 'Запитай пізніше', 'Краще я промовчу',
'Зараз не можна передбачити', 'Сконцентруйся і запитай знову',
# Негативні
'Навіть не думай »,« Моя відповідь - «ні»', 'За моїми даними - «ні»',
'Перспективи не дуже хороші', 'Дуже сумнівно']
answersEng=[
#Позитивні:
'It is certain', 'It is decidedly so', 'Without a doubt',
'Yes — definitely', 'You may rely on it',
#Нерішуче позитивні
'As I see it, yes', 'Most likely', 'Outlook good', 'Signs point to yes', 'Yes',
#Нейтральні
'Reply hazy, try again', 'Ask again later', 'Better not tell you now',
'Cannot predict now', 'Concentrate and ask again',
#Негативні
'Don’t count on it', 'My reply is no', 'My sources say no',
'Outlook not so good', 'Very doubtful']
Приклад роботи:
Задайте питання кулі: Чи варто мені почати робити зарядку вранці?
Куля пророкує: Знаки кажуть - «так»
Задайте питання кулі: Чи варто мені піти на балет?
Куля пророкує: Перспективи не дуже хороші
Level Up!
1: Математики кажуть, що сума кутів трикутника завжди дорівнює 180 градусів. Створіть програму, яка випадковим чином генерує два числа від 1 до 180. Якщо їх сума <=179, то програма визначає, якому числу дорівнює третій кут. Якщо їх сума >179, то програма пише числа і каже, що трикутник створити неможливо.
2: Напишіть програму вгадування числа. Комп’ютер записує в змінну випадкове число від 1 до 100. Юзер намагається вгадати число. Програма пише чи загадане число більше ніж здогадка користувача чи менше і пропонує вгадати ще раз. Якщо користувач вгадав – програма про це пише і не запитує більше.
Підказка1: Тестувати програму варто на діапазоні чисел від 1 до 10. І, вже коли все працює, змінити діапазон чисел на від 1 до 100.
Підказка2: Краще використати цикл while, ніж for.
Приклад роботи:
Вгадай число від 1 до 100. Яке число я загадав? 50
твоє число замале
Вгадай число від 1 до 100. Яке число я загадав? 75
твоє число завелике
Вгадай число від 1 до 100. Яке число я загадав? 63
твоє число завелике
Вгадай число від 1 до 100. Яке число я загадав? 57
твоє число завелике
Вгадай число від 1 до 100. Яке число я загадав? 53
твоє число завелике
Вгадай число від 1 до 100. Яке число я загадав? 52
твоє число завелике
Вгадай число від 1 до 100. Яке число я загадав? 51
Супер!!! Число відгадано!
Не зупиняйтесь у вивченні Python! До зустрічі на наступних уроках!