Создать бесконечное случайное блуждание с использованием итераторов в Python - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть проблема с практикой случайных прогулок:

enter image description here

Пока мой код выглядит так:

import random
import itertools
p = [0,0]

def random_walk():
    yield p
    for _ in itertools.count(0,1):
        sign = random.randrange(-1, 2,2)
        cord = random.randint(0,1)
        p[cord] += sign
        yield p

Однако, когда я бегу, ничего не происходит. Я предполагаю, что это работает слишком много раз слишком быстро, чтобы фактически дать что-нибудь. Есть ли способ исправить это, чтобы он выводил последовательность, подобную той, что в тексте проблемы? Просто чтобы сообщить вам, я беру вводный курс по Python, ориентированный на научные c приложения, поэтому мои общие знания по программированию в целом очень ограничены. Позже в упражнении я должен использовать itertools.islice для генерации конечного пути, но сначала мне нужно, чтобы это работало. Любая помощь будет высоко ценится!

1 Ответ

0 голосов
/ 23 апреля 2020

Вы должны использовать свой генератор, чтобы увидеть результаты (например, в для l oop). Кроме того, генератор должен возвращать индивидуальные значения, а не накопленный список значений:

import random
def random_walk():
    x = y = 0
    offsets = [ (0,1),(0,-1),(1,0),(-1,0) ]
    while True:
        yield (x,y)
        dx,dy = random.choice(offsets)
        x,y   = x+dx, y+dy

вывод:

from itertools import islice
print(*islice(random_walk(),10))

(0, 0) (-1, 0) (-1, -1) (0, -1) (0, 0) (-1, 0) (-1, -1) (-2, -1) (-2, -2) (-2, -1)

доказательство того, что оно бесконечно:

for point in random_walk(): print(point, end=" ")

(0, 0) (-1, 0) (-1, -1) (-1, -2) (0, -2) (0, -3) (0, -4) (-1, -4) (-2, -4) (-3, -4) (-4, -4) (-4, -5) (-5, -5) (-4, -5) (-3, -5) (-3, -6) (-4, -6) (-4, -7) (-4, -6) (-3, -6) (-3, -7) (-4, -7) (-5, -7) (-4, -7) (-5, -7) (-5, -6) (-4, -6) (-3, -6) (-4, -6) ...

обратите внимание, что вы должны прервать это l oop с помощью control- C, потому что оно бесконечно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...