运用线性同余法 生成伪随机数
自己编写函数:add() sub() rand() rand_choice() rand_randint()
Xn + 1 ≡aXn + c (mod m)
线性同余算法有m 、a 、c 和X0 4个参数,通过置Xn + 1 ≡aXn + c (mod m) ,求得随机数序列< Xn > , 这个序列称作线性同余序列。m、a 、c 和X0 分别称做模数、乘数、增量和初始值。线性同余方法速度快,如果对乘数和模数进行适当的选择,可以满足用于评价一个随机数产生器的3 种准则:
1.这个函数应该是一个完整周期的产生函数。也就是说,这个函数应该在重复之前产生出0 到m之间的所有数;
2.产生的序列应该看起来是随机的;
3.这个函数应该用32bit 算术高效实现。
自己编写函数:add() sub() rand() rand_choice() rand_randint()
心算游戏主题 doprode():
自动生成1-99以内的加减法 并有三次机会回答,仍错误给出答案,正确选择继续
废话不多上代码:(只调用time模块,其他模块全部自己编写)
import time def add(a,b): return a+b def sub(a,b): return a-b def rand(): rand_seed = time.clock() #clock()方法返回当前的处理器时间 作为随机数生成 种子 rand_seed = round(((float(rand_seed) * 16807.0) % 1.0),3) return rand_seed #生产0-1之间的随机数 取小数点后三位 def rand_choice(seq): i = int(rand() * len(seq)) return seq[i] def rand_randint(start,stop): s = stop - start #获取差值 i = int(s * rand()) + start #随机差值+初始值 return i #返回 strat-stop之间的随机数 ops = {'+':add,'-':sub} def doprode(): #随机生成 加好还是减号 运算符 op = rand_choice('+-') #随机生成 +或- nums = [rand_randint(10,99) for i in range(2)]#随机生成10-99的两个正整数 nums.sort(reverse=True)#吧生成的两个正整数 降序排序 result = ops[op](*nums) #把运算结果给变量resu pr = '%d %s %d = '%(nums[0],op,nums[1]) for i in range(3): res = int(raw_input(pr)) if res == result: print '回答正确' break elif i == 2: print '正确答案 ',pr,result else: print '回答错误' def main(): while True: doprode() if raw_input('play again ? y to continue:').strip()[0] not in 'Yy': break #让用户输入 是否继续 ,继续就输入y,否则就结束 # strip()[0] 去掉输入的字符串收尾空格 并取第一个字符 if __name__ == '__main__': main()