2 回答
TA贡献1844条经验 获得超8个赞
你在正确的轨道上。假设步长为 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
TA贡献1804条经验 获得超3个赞
我引入了一个计数以方便测试,但你可以无限循环。这将比上一步返回 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]).
添加回答
举报