好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

python的round测试

python的round测试

>>>   def  test(x = 20 ):
    a = " 1.4 " + " 9 " * x
     for  i  in  xrange( 3 ,len(a)):
         print   " round(%s)=%s,contains %s '9' "   % (a[:i],round(float(a[:i])),(len(a[:i]) - 3 ))

        
>>>  test()
round( 1.4 ) = 1.0 ,contains 0  ' 9 '
round( 1.49 ) = 1.0 ,contains  1   ' 9 '
round( 1.499 ) = 1.0 ,contains  2   ' 9 '
round( 1.4999 ) = 1.0 ,contains  3   ' 9 '
round( 1.49999 ) = 1.0 ,contains  4   ' 9 '
round( 1.499999 ) = 1.0 ,contains  5   ' 9 '
round( 1.4999999 ) = 1.0 ,contains  6   ' 9 '
round( 1.49999999 ) = 1.0 ,contains  7   ' 9 '
round( 1.499999999 ) = 1.0 ,contains  8   ' 9 '
round( 1.4999999999 ) = 1.0 ,contains  9   ' 9 '
round( 1.49999999999 ) = 1.0 ,contains  10   ' 9 '
round( 1.499999999999 ) = 1.0 ,contains  11   ' 9 '
round( 1.4999999999999 ) = 1.0 ,contains  12   ' 9 '
round( 1.49999999999999 ) = 1.0 ,contains  13   ' 9 '
round( 1.499999999999999 ) = 1.0 ,contains  14   ' 9 '
round( 1.4999999999999999 ) = 2.0 ,contains  15   ' 9 '
round( 1.49999999999999999 ) = 2.0 ,contains  16   ' 9 '
round( 1.499999999999999999 ) = 2.0 ,contains  17   ' 9 '
round( 1.4999999999999999999 ) = 2.0 ,contains  18   ' 9 '
round( 1.49999999999999999999 ) = 2.0 ,contains  19   ' 9 '
>>>  

在看到python的round时想到js有三个关于取整的方法Math.round,Math.ceil还有一个没记住,于是做了一些尝试

还是有点意思的吧?

这个是编程之美里的一个题,我用来熟悉一下python的syntx,不考虑什么算法什么的,just get things done

子数组的最大乘积

>>>   def  do(x):
     return  reduce( lambda  x,y:x * y,x)
>>>   def  fun2(x):
     """ x is a list """
    temp = []
     for  i  in  range( 1 ,len(x) + 1 ):
         for  j  in  range(len(x) + 1 ):
             if (j < i):
                 print  x[j:i]
                temp.append(do(x[j:i]))
     return  max(temp)

>>>  fun2(x)
[0]
[0,  1 ]
[ 1 ]
[0,  1 ,  2 ]
[ 1 ,  2 ]
[ 2 ]
[0,  1 ,  2 ,  3 ]
[ 1 ,  2 ,  3 ]
[ 2 ,  3 ]
[ 3 ]
6

数组中的子数组之和的最大值

def  do(x):
     return  sum(x);
# 改一下这个do函数,继续复用fun2(x)即可
[ - 10 ,  2 ,  3 ,  1 ]
>>>  fun2(_)
[ - 10 ]
[ - 10 ,  2 ]
[ 2 ]
[ - 10 ,  2 ,  3 ]
[ 2 ,  3 ]
[ 3 ]
[ - 10 ,  2 ,  3 ,  1 ]
[ 2 ,  3 ,  1 ]
[ 3 ,  1 ]
[ 1 ]
6

def  fun4(y):
    x = y[:]
    temp = []
     if  len(x) < 1 :
         return  x
     else :
         for  i  in  xrange(len(x) - 1 ):
             if  x[i] < x[i + 1 ]:
                temp.append(x[i])
             else :
                x[i + 1 ] = x[i]
         if  x[len(x) - 1 ] > x[len(x) - 2 ]:
            temp.append(x[len(x) - 1 ])
     return  temp

[ - 1 ,  - 2 ,  9 ,  6 ,  10 ]
>>>  fun4(_)
[ - 1 ,  9 ,  10 ]
>>>  

这题目走了弯路了,一直在想用reduce,结果进死胡同了,如果是考试肯定答不出了,下面是我错误的代码

def  do2(x):
     global  temp
    temp = []
     def  nested(a,b):
         # global temp
         print  temp
         if (a < b):
             if  temp == []:
                 print   " temp is [] "
                temp.append(a)
            temp.append(b)
             return  b
         else :
            temp.append(a)
             return  a
     if  len(x) > 1 :
        reduce(nested,x)
     else :
        temp = x[:]
     return  temp

def  fun3(x):
    result = []
     for  i  in  xrange(len(x)):
         print   " current list= " ,x[i:]
        result.append(do2(x[i:]))
     print   " haha= " ,result
    y = result.sort( lambda  x,y:cmp(len(x),len(y)))
     print   " x= " ,result
     return  result.pop()

给一个N!e.g. N!=362800,N!的末尾有2个0.那N=20时,有x个0,求N!的二进制表示中最低位1的位置

>>>   def  fun5(x):
    temp = str(reduce( lambda  a,b:a * b,range( 1 ,x + 1 )))
     print  temp
     for  i  in  xrange(len(temp) - 1 , - 1 , - 1 ):
         if  temp[i] != ' 0 ' :
             return  len(temp) - i - 1

        
>>>  fun5( 20 )
2432902008176640000
4

>>>   def  fun6(x):
    yy = reduce( lambda  a,b:a * b,xrange(x,0, - 1 ))
     print   " yy= " ,yy
    zz = tobin(yy)
     print   " zz= " ,zz
     for  i  in  xrange(len(zz) - 1 , - 1 , - 1 ):
         if  zz[i] == " 1 " :
             return  len(zz) - i - 1

        
>>>  
>>>  fun6( 5 )
yy =   120
zz =   1111000
3
>>>   def  tobin(x):
    L = []
     while  (x / 2 ) != 0  or  (x % 2 ) != 1 :
        L.append(str(x % 2 ))
        x = x / 2
     else :
        L.append(str(x % 2 ))
     return   "" .join(L[:: - 1 ])

>>>  

使用递归和非递归的方法计算阶乘

>>>   def  fun10(x):
     if  x > 1 :
         return  x * fun10(x - 1 )
     else :
         return   1

    
>>>  fun10( 3 )
6
>>>  

>>>   def  fun9(x):
     return  reduce( lambda  a,b:a * b,xrange( 1 ,x + 1 ));

>>>  fun9( 3 )
6

 给一个十进制的整数N,写下从1开始到N的所有整数,然后娄一下其中1出现的次数,例如N=2,时写下1,2,这里只出现1次

满足条件下f(N)=N的最大的N是多少

Code
>>>   def  fun11(x):
    L = []
     for  i  in  xrange( 1 ,x + 1 ):
         print  i
        L.append(str(i).count( " 1 " ))
     return   " contains: " + str(sum(L))

>>>  fun11( 2 )
1
2
' contains:1 '

第二小题我没想出来,难道他是递减的函数吗...

查看更多关于python的round测试的详细内容...

  阅读:50次