Рубрики
Без рубрики

Исследуя случайные прогулки с Python Turtle Graphics

Исследуйте случайные прогулки с Python Turtle Graphics. Увлекательная тема, сочетающая в себе программирование Python, математики и информатики.

Автор оригинала: Robin Andrews.

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

  • Движение молекул в жидкостях и газах
  • Изменения в ценах на акцию
  • Спортивные результаты за данный период, такие как футбольный сезон
  • Биологическая эволюция через изменение гена
  • Оценка размера всемирной паутины

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

Уокер начинается определенное место в очень проложенном городе (например, многие в Соединенных Штатах), где каждый блок такой же размер, и дороги пересекаются под прямым углом.

На каждом пересечении ходунка достигает, они могут продолжать в одном направлении, либо выбрать один из других направлений с севера, Юго-Востока или Запада.

Мы можем решить, сколько блокирует ходунок, но направления на каждом пересечении определяются случайным образом (возможно, Walker бросает 4-х сторонние кубики …)

Как далеко от начальной точки будет в конечном итоге Уокер?

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

На данный момент я предоставил код для того, чтобы вы запустили симуляцию случайной прогулки. Вам нужно будет запустить его на «правильной» версии Python, установленной на вашем компьютере, в отличие от одной из реализации на основе браузера, таких как https://trinket.io/ , поскольку он использует некоторые довольно расширенные функции Модуль черепахи Python Отказ

Список кодов для симулятора случайного хода Python

"""
Random Walk Demonstration using Python Turtle Module
Compucademy - https://compucademy.net/
"""

import turtle
import random

BLOCK_SIZE = 60
BORDER = 13
STAMP_SIZE = 20  # Defualt value used to get pixel-level control of turtle size
ROWS = 8
COLUMNS = 10
SPEED = 10


def up():
    # Don't let walker off grid
    new_y = walker.ycor() - (BLOCK_SIZE + BORDER)
    if new_y >= -BORDER // 2:
        walker.sety(walker.ycor() - (BLOCK_SIZE + BORDER))
        return True  # Used to avoid counting moves which are disallowed


def down():
    new_y = walker.ycor() + (BLOCK_SIZE + BORDER)
    if new_y < screen.window_height():
        walker.sety(walker.ycor() + (BLOCK_SIZE + BORDER))
        return True


def left():
    new_x = walker.xcor() - (BLOCK_SIZE + BORDER)
    if new_x >= -BORDER // 2:
        walker.setx(walker.xcor() - (BLOCK_SIZE + BORDER))
        return True


def right():
    new_x = walker.xcor() + (BLOCK_SIZE + BORDER)
    if new_x < screen.window_width():
        walker.setx(walker.xcor() + (BLOCK_SIZE + BORDER))
        return True


def random_walk(num_steps):
    counter = 0
    directions = [up, down, left, right]
    while counter < num_steps:
        if random.choice(directions)():  # Call the chosen function and check the return value
            counter += 1


screen = turtle.Screen()
WIDTH = COLUMNS * (BLOCK_SIZE + BORDER)
HEIGHT = ROWS * (BLOCK_SIZE + BORDER)
screen.setup(WIDTH, HEIGHT)
screen.title("Random Walks Demo")
screen.setworldcoordinates(0, screen.window_height(), screen.window_width(), 0)
screen.bgcolor("black")
screen.tracer(0)  # Pause animation to get instant drawing

builder = turtle.Turtle(visible=False)
builder.shape("square")
builder.color("green")
builder.shapesize(BLOCK_SIZE / STAMP_SIZE)
builder.penup()

for row_num in range(ROWS):
    for col_num in range(COLUMNS):
        builder.goto((BLOCK_SIZE // 2) + col_num * (BLOCK_SIZE + BORDER),
                     (BLOCK_SIZE // 2) + row_num * (BLOCK_SIZE + BORDER))
        builder.stamp()

walker = turtle.Turtle()
walker.shape("circle")
walker.color("white")
walker.width(BORDER // 2)
walker.speed(SPEED)
walker.penup()
walker.goto(screen.window_width() // 2 - BORDER // 2, screen.window_height() // 2 - BORDER // 2)
walker.pendown()

screen.tracer(1)  # Restore animation
random_walk(15)
turtle.done()

Несколько баллов о коде:

  • Вам придется тщательно выбирать значения для постоянных, если вы измените их, как только некоторые значения размещают Уокера на улицу!
  • Контроль размера черепахи с Turtle.shapesize () требует некоторой неожиданной математики, как продемонстрировано в Builder.shapesize (block_size/make_size)
  • Random_walk () Функция реализована очень кратко. Есть пути, которые, вероятно, более четкими. Если вы решили сделать более «очевидную» версию, используя Если ... Элиф .. И т. Д., Не забудьте убедиться, что неудачные попытки (те, которые будут размещены в соучревшем сетке), не учитываются в общем количестве предпринимаемых шагов.

Я надеюсь, что вы нашли это интересно. Не забудьте Подписаться Если вы хотите быть в нашем списке рассылки для новостей и предложений, относящиеся к программированию Python и GCSE/уровня компьютерной науки.