马尔可夫链生成器
Markov chain generator
生成器应该有一个起点(一个整数)。随着生成的生成器对象的每次传递到下一个,应该执行从返回的最后一个点(或者如果尚未返回任何点,则为起点)开始的随机步骤。这一步的结果应该在执行完之后返回。
import random
def markov(start: int):
for i in range (1):
yield random.randint(i-1, i+1)
我的代码有什么问题?
为了便于测试,我引入了一个计数,但您可以使用无限循环。这将比最后一步后退 1 或更远,或者停留在最后一步。
import random
def markov(start: int):
step = start
count = 0
while count<20:
step = random.randint(step-1, step+1)
yield step
count += 1
您可以通过 list(markov(1))
来测试这是否是您想要的。如果您总是希望它移动,我会将 step = random.randint(step-1, step+1)
替换为 step = random.choice([step-1, step+1])
。
你走在正确的轨道上。假设步长为 1(在任一方向),您应该能够完全摆脱 i
计数器:
>>> import random
>>>
>>>
>>> def markov(start: int):
... location = start
... while True:
... yield location
... location += random.randint(-1, 1)
...
>>>
>>> gen = markov(5)
>>> next(gen)
5
>>> next(gen)
6
>>> next(gen)
5
>>> next(gen)
6
>>> next(gen)
7
>>> next(gen)
6
>>> next(gen)
5
>>> next(gen)
4
>>> next(gen)
4
>>> next(gen)
3
生成器应该有一个起点(一个整数)。随着生成的生成器对象的每次传递到下一个,应该执行从返回的最后一个点(或者如果尚未返回任何点,则为起点)开始的随机步骤。这一步的结果应该在执行完之后返回。
import random
def markov(start: int):
for i in range (1):
yield random.randint(i-1, i+1)
我的代码有什么问题?
为了便于测试,我引入了一个计数,但您可以使用无限循环。这将比最后一步后退 1 或更远,或者停留在最后一步。
import random
def markov(start: int):
step = start
count = 0
while count<20:
step = random.randint(step-1, step+1)
yield step
count += 1
您可以通过 list(markov(1))
来测试这是否是您想要的。如果您总是希望它移动,我会将 step = random.randint(step-1, step+1)
替换为 step = random.choice([step-1, step+1])
。
你走在正确的轨道上。假设步长为 1(在任一方向),您应该能够完全摆脱 i
计数器:
>>> import random
>>>
>>>
>>> def markov(start: int):
... location = start
... while True:
... yield location
... location += random.randint(-1, 1)
...
>>>
>>> gen = markov(5)
>>> next(gen)
5
>>> next(gen)
6
>>> next(gen)
5
>>> next(gen)
6
>>> next(gen)
7
>>> next(gen)
6
>>> next(gen)
5
>>> next(gen)
4
>>> next(gen)
4
>>> next(gen)
3