python心算小游戏,及random()函数自己编写算法

运用线性同余法 生成伪随机数  

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 算术高效实现。

在我的算法中,a=7^5;c=0;m=1; x0为系统时间;(x0=time.clock())
自己编写函数: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()


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值