Урок 29. Програмування випадкових процесів

Генерування випадкових чисел

«Генерація випадкових чисел занадто важлива, щоб залишати її на волю випадку»
Роберт Кав'ю
Python породжує випадкові числа на основі формули, так що вони не насправді випадкові, а, як кажуть, псевдовипадкові.

Модуль random дозволяє генерувати випадкові числа. Перш ніж використовувати модуль, необхідно підключити його за допомогою інструкції: import random

random.random 
random.random() - повертає псевдовипадкове число від 0.0 до 1.0
Наприклад
random.seed
random.seed(<Параметр>)- налаштовує генератор випадкових чисел на нову послідовність. За замовчуванням використовується системний час.
Наприклад

random.uniform
random.uniform(<Початок>, <Кінець>)- повертає псевдовипадкове дійсне число в діапазоні від <Початок>до <Кінець>
Наприклад
random.randint 
random.randint(<Початок>, <Кінець>)- повертає псевдовипадкове ціле число в діапазоні від <Початок>до <Кінець>
Наприклад
random.choince
random.choince(<Послідовність>) - повертає випадковий елемент з будь-якої послідовності (рядка, списку, кортежу)
Наприклад






random.randrangerandom.randrange(<Початок>, <Кінець>, <Крок>) - повертає випадково вибране число з послідовності.
Наприклад
random.shuffle
random.shuffle(<Список>)- перемішує послідовність (змінюється сама послідовність).
Тому функція не працює для незмінних об'єктів.
Наприклад

Приклад програми, що відображає рух об'єкта з оминанням випадково розташованих перешкод.
from tkinter import * #під"єднання бібліотеки графічних складових
import time #під'єднання таймера
import random #під'єднання генератора випадкових чисел

master = Tk() #створення екземпляру класу Tk
#задамо всі параметри ігрового поля
window_width =1200
widow_height = 600
ball_radius = 25
ball_left = 40
'''
використовуючи клас Canvas бібліотеки tkinter, створимо поле для розташування зображень об'єкта й перешкод
і розташуємо його у вікні програми, використовуючи метод pack:
'''
w = Canvas(master, width=window_width, height=widow_height, bg="orange")
w.pack()
#Створимо об'єкт
ball_x1 = ball_left
ball_y1 = widow_height/2 - ball_radius
ball_x2 = ball_left + 2 * ball_radius
ball_y2 = widow_height/2 + ball_radius
ball = w.create_oval(ball_x1, ball_y1, ball_x2, ball_y2, fill="red")
#Розташуємо перешкоди
w.create_line(100, 60,  100, 230,width=4,fill="red")
w.create_line(100, 350,  100, 520, width=4,fill="black")
w.create_line(300, random.randrange(130, 140), random.randrange(200,350), random.randrange(350, 450), width=4,fill="#f36e36")
w.create_line(500, 80,  600, 230, width=4,fill="#03c017")
w.create_line(500, 300, 500, 520,width=5,fill="yellow")
w.create_line(800, random.randrange(100, 150), random.randrange(600,950), random.randrange(350, 450), width=4,fill="#00a1ff")
w.create_line(1100, 60,  1000, 230,width=4,fill="blue")
w.create_line(1000, 350,  1100, 520, width=4, fill="#944893")
#Задамо рух об'єкта за таким алгоритмом
#описати функцію виявлення перешкоди у напрямку (0; dir):
def check_collision(circle, dir):
    (x1, y1, x2, y2) = w.coords(ball)
    result = w.find_overlapping(x1, y1 + dir, x2, y2 + dir)
    return len(result) > 1
#описати функцію руху об'єкта:
def animation():
    while (True):
        (x1, y1, x2, y2) = w.coords(ball)
        if (x1 > window_width - 2 * ball_radius):
            break

        y_move = 0
        x_move = 1
# перевірка наявності перешкоди "прямо за курсом"
        if (check_collision(ball, 0)):
            if (check_collision(ball, -15)):# перевірка наявності перешкоди ліворуч
                y_move = 1 # приріст ординати руху праворуч
                x_move = 0 # приріст абсциси  руху праворуч
            if (check_collision(ball, 15)): # перевірка наявності перешкоди праворуч
                y_move = -1
                x_move = 0

        w.move(ball, x_move, y_move)# пересування об'єкта
        w.update()    
        time.sleep(0.002) # затримка у часі
#виклик функції animation і методу запуску програми на виконання:
w.after(0, animation)
mainloop()
Джерело

Немає коментарів:

Дописати коментар

Примітка: лише член цього блогу може опублікувати коментар.