random_walk.py def fill_walk(self):
"""Вычисляет все точки блуждания."""
# Шаги генерируются до достижения нужной длины.
❶
while len(self.x_values) < self.num_points:
# Определение направления и длины перемещения.
❷
x_direction = choice([1, -1])
x_distance = choice([0, 1, 2, 3, 4])
❸
x_step = x_direction * x_distance
y_direction = choice([1, -1])
y_distance = choice([0, 1, 2, 3, 4])
❹
y_step = y_direction * y_distance
# Отклонение нулевых перемещений.
❺
if x_step == 0 and y_step == 0:
continue
# Вычисление следующих значений x и y.
❻
x = self.x_values[-1] + x_step
y = self.y_values[-1] + y_step
self.x_values.append(x)
self.y_values.append(y)
В точке
запускается цикл, который выполняется вплоть до заполнения пути пра-
вильным количеством точек. Главная часть метода
fill_walk()
сообщает Python,
как следует моделировать четыре случайных решения: двигаться вправо или влево?
как далеко идти в этом направлении? двигаться вверх или вниз? как далеко идти
в этом направлении?
Выражение
choice([1,
-1])
выбирает значение
x_direction
; оно возвращает 1 для
перемещения вправо или –1 для движения влево
. Затем выражение
choice([0,
1,
2,
3,
4])
определяет дальность перемещения в этом направлении (
x_distance
)
случайным выбором целого числа от 0 до 4. (Включение 0 позволяет выполнять
шаги по оси
y
, а также шаги со смещением по обеим осям.)
В точках
и
определяется длина каждого шага в направлениях
x
и
y
, для чего
направление движения умножается на выбранное расстояние. При положитель-
ном результате
x_step
смещает вправо, при отрицательном — влево и при нуле-
вом — вертикально. При положительном результате
y_step
смещает вверх, при
отрицательном — вниз и при нулевом — горизонтально. Если оба значения,
x_step
и
y_step
, равны 0, то блуждание останавливается, но цикл продолжается
.