• python 练习 4


    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    from math import sqrt
    import random
    def daoxu(n):
       d=n
       s=0
       while d!=0:
          d,f=divmod(d,10)
          s=f+s*10
       return s
    def z85():
        #任意取一个十进制数如123,然后他和他的回文数321相加,得到新整数后重复以上步骤,最后
        #可以得到一个回文数444
        s1=179233126
        s2=0
        while s2!=s1:
            s1=s1+s2
            s2=daoxu(s1)
            print s2
        return
    def z81():
        '''角谷猜想是任何一个数如果是偶数就除以2如果是奇数就乘以3再加1,最后会导致1,4,2,循环'''
        x=123347
        while x!=1:
            x= x%2==0 and x/2 or (x*3+1)/2
            print x
    def fangf(x):
        t=int(sqrt(x))
        if t*t==x: return [t]
        t=int(sqrt(x-1))+1
        m=range(t)
        for i in m:
            for j in m:
                for k in range(j,t):
                    for p in range(k,t):
                        if i *i + j * j + k * k + p * p == x:
                            if i==0 and j==0:return[k,p]
                            if i==0 and j!=0:return[j,k,p]
                            return [i,j,k,p]
    def z82():
        #所有自然数最多可以用四个自然数的平方表示,验证这个定理
        for i in range(2,100):
            print i,fangf(i)
    def z83():
        # 任意一个四位数,如1324,可以得到数1234和4321,然后4321-1234得到新数,重复以上步骤,
        #最后得到6174。而7641-1467=6174
        def six(x):
            t=1
            e=list(str(x))
            e.sort()
            e=''.join(e)
            n=int(e)
            if n<1000:t=10
            return daoxu(n)*t-n
        i=1999
        print i
        while i!=6174:
            i=six(i)
            print i
    def z84():
        '''证明任何一个数a的立方等于一串连续奇数的和,其中首项为(a*(a-1)+1),公差为2,共a项
        他们的和是((a*(a-1)+1)*a+(2*a-2)*a/2=(a^3-a^2+a)+(a^2-a)=a^3
    '''
        print "任何一个数a的立方等于一串连续奇数的和"
        return
    def z80():
        '''很容易证明的定理大于1000的奇数x有x*x-1是8的倍数
        [1,3,5,7]=[1,1,1,1]
    '''
        t=[i*i%8 for i in range(1,8,2)]
        print t
        print "大于1000的奇数x有x*x-1是8的倍数"
        return
    def z78():
        #用正多边形逼近的方法计算pi
        x1=100000
        b,i=0.5,6
        while i<x1:
            b=sqrt(2-2*sqrt(1-b*b))/2
            i*=2
        print b*i
    def z79():
        '''随机法计算pi:
    本程序并不使用计算pi值的算法,它只是一个概
    率模拟,即在边长为100的正方形内随机产生多
    个点,将点以圆弧为界分开统计,由于点的个数
    很多,直至几乎布满整个区域。此时,点的个数
    就可以看作就是它所在区域的面积。可以得到如
    下推导:
    
    (1)蓝色区内点个数:总个数≈蓝色面积:总面积
    
    (2)蓝色区内点个数:总个数≈圆面积/4:总面积
    
    (3)蓝色区内点个数:总个数≈π×200×200/4:200×200
    
    (4)π≈ 4×蓝色区内点个数/总个数
    
      当然,点的位置会重复,所以结果与π值是
    有差别的,不过,当点足够多时,可以看到一个
    非常接近的结果。'''
        x,y,z=0,100000,0
        g=random.random
        while x<y:
            a=g()
            b=g()
            if a*a+b*b<1:
                z+=1
            x+=1
        print 4.0*z/y
    if __name__ == '__main__':
        s=""
        for i in range(78,86):
            s+='z'+str(i)+'()
    '
        exec(s)
       
  • 相关阅读:
    Django组件——分页器
    Django与Ajax
    Python常用模块——包&跨模块代码调用
    Python常用模块——正则表达式re模块
    Python常用模块——文件复制模块shutil
    Python常用模块——hashlib加密
    git小乌龟配置
    设计模式学习(27)- MVC模式
    设计模式学习(26)- 访问者模式
    设计模式学习(25)- 模板模式
  • 原文地址:https://www.cnblogs.com/kuihua/p/5521986.html
Copyright © 2020-2023  润新知