马尔可夫链生成器

生成器应该有一个起点(一个整数)。随着生成的生成器对象每次传递到下一个,应该执行从返回的最后一个点(或如果尚未返回任何点的起点)的随机步骤。执行该步骤后,应返回该步骤的结果。


import random


def markov(start: int):

  for i in range (1):

     yield random.randint(i-1, i+1)

我的代码有什么问题?


MYYA
浏览 227回答 2
2回答

婷婷同学_

你在正确的轨道上。假设步长为 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

狐的传说

我引入了一个计数以方便测试,但你可以无限循环。这将比上一步返回 1 或更远或停留在最后一步。import randomdef markov(start: int):&nbsp; step = start&nbsp; count = 0&nbsp; while count<20:&nbsp; &nbsp; &nbsp;step = random.randint(step-1, step+1)&nbsp; &nbsp; &nbsp;yield step&nbsp; &nbsp; &nbsp;count += 1例如,您可以测试这是否是您想要的list(markov(1))。如果你总是想让它移动,我会step = random.randint(step-1, step+1)用step = random.choice([step-1, step+1]).
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python