重写随机过程
要求:
利用Python中的过滤器filter()与生成器generator重写页面置换算法中的随机过程,随机过程如下:
- 在[0,159]之间随机选举一条起始执行指令,其序号为 m ;
- 顺序执行两条指令,即序号为 m+1 、m+2 的指令;
- 通过随机数,跳转到前地址部分[0,m-1]中的某条指令处,其序号为 m1;
- 顺序执行两条指令,即序号为 m1+1 、m1+2的指令;
- 通过随机数,跳转到后地址部分[m1+3,159]中的某条指令处,其序号为 m2;
- 顺序执行两条指令,即序号为 m2+1、m2+2 的指令;若m2+2>159 只执行一条指令;
- 重复 “跳转到前地址部分、顺序执行、跳转到后地址部分、顺序执行”的过程,直至执行完全部200条指令。
思路:
1.先不考虑范围,使用生成器generator按题目要求的方法生成随机数; 2.通过过滤器filter()将超过范围的数去除。
源代码:
import random
#按要求构造生成器
def generator():
i = random.randint(0, 159)
yield(i)
yield(i + 1)
yield(i + 2)
while True:
i=random.randint(0, i)
yield(i)
yield(i + 1)
yield(i + 2)
i=random.randint(i+3, 159)
yield(i)
yield(i + 1)
yield(i + 2)
o=generator()
#过滤生成器中超过范围的元素
def filtration(n):
return n >= 0 and n <= 159
oo=filter(filtration,o)
#按要求生产长度为n的随机数列表
list=[]
def randomList(n):
for x in range(n):
list.append(next(oo))
#生成长度为200的随机数列表
randomList(200)
print(list)