生成器应采用起点(整数)。随着生成的生成器对象的每次通过,都应执行从返回的最后一个点(或起点(如果尚未返回任何点))的随机步骤。执行此步骤后,应返回此步骤的结果。
import random
def markov(start: int):
for i in range (1):
yield random.randint(i-1, i+1)
我的代码有什么问题?
答案 0 :(得分:0)
我介绍了一个易于测试的计数,但是您可以无休止地循环。这将比最后一步后退一步或前进更多,或者停留在最后一步。
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 :(得分:0)
您在正确的轨道上。假设步长为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