zoukankan      html  css  js  c++  java
  • python算法(一)

    python算法(一)

    一、求数x的因子

      

    1 x=100
    2 divisors=()#初始化空的元组
    3 for i in range(1,x):
    4     if x%i==0:
    5         divisors=divisors+(i,)
    6         print divisors

    二、求数x各个数位之和

     

    1 sumdigits=0
    2 for c in str(1952):
    3     sumdigits +=int(c)
    4     print sumdigits
    5 print sumdigits

    三、鸡兔同笼以及变形

      1.有鸡兔两种,共有x个头,y只脚,求解鸡兔各有几只?

     1 def slove(num_heads,num_legs):
     2     for chicken_num in range(0,num_heads+1):
     3         pig_num =num_heads-chicken_num
     4         top_legs=pig_num*4+chicken_num*2
     5         if top_legs==num_legs:
     6             return [chicken_num,pig_num]
     7     return [None,None]
     8 
     9 def barnYard():
    10     heads=int(raw_input("Enter the number of heads: "))
    11     legs=int (raw_input("Enter the number of legs: "))
    12     chicken,pig=slove(heads,legs)
    13     if chicken==None:
    14         print "不可解"
    15     else:
    16         print "the number of chicken is:",chicken
    17         print "the number of pig is:",pig
    18 
    19 barnYard()

    2.有鸡兔,蜘蛛一共三种,共有x个头,y只脚,求解鸡兔,蜘蛛各有几只?

     1 def slove1(num_heads,num_legs):
     2     for spider_num in range(0,num_heads+1):
     3         for chicken_num in range(0,num_heads-spider_num):
     4             pig_num =num_heads-chicken_num-spider_num
     5             top_legs=pig_num*4+chicken_num*2+spider_num*8
     6             if top_legs==num_legs:
     7                 return [chicken_num,pig_num,spider_num]
     8     return [None,None,None]
     9 
    10 def barnYard1():
    11     heads=int(raw_input("Enter the number of heads: "))
    12     legs=int (raw_input("Enter the number of legs: "))
    13     chicken,pig,spider=slove1(heads,legs)
    14     if chicken==None:
    15         print "不可解"
    16     else:
    17         print "the number of chicken is:",chicken
    18         print "the number of pig is:",pig
    19         print "the number of spider is",spider
    20 
    21 barnYard1()

    3.2中的问题或许不只有一个解答,依次输出符合要求的解答

     1 def slove2(num_heads,num_legs):
     2     solutionFound=False
     3     for spider_num in range(0,num_heads+1):
     4         for chicken_num in range(0,num_heads-spider_num):
     5             pig_num =num_heads-chicken_num-spider_num
     6             top_legs=pig_num*4+chicken_num*2+spider_num*8
     7             if top_legs==num_legs:
     8                 print "the number of chicken is:", chicken_num
     9                 print "the number of pig is:", pig_num
    10                 print "the number of spider is", spider_num
    11                 solutionFound=True
    12     if not solutionFound:
    13         print "不可解"
    14 
    15 
    16 def barnYard2():
    17     heads=int(raw_input("Enter the number of heads: "))
    18     legs=int (raw_input("Enter the number of legs: "))
    19     slove2(heads,legs)
    20 
    21 barnYard2()

    四、递归判断字符串是否为回文

    解法一:

    1 def isPlalindrome(s):
    2     if len(s)<=1:
    3         return True
    4     else :
    5         return s[0]==s[-1] and isPlalindrome(s[1:-1])

    解法二:

     1 def isPlalindrome1(s,indent):
     2     print indent, 'hisPalindromel called with', s
     3     if 1 >= len(s):
     4          print indent, 'About to return True from base case',s
     5          return True
     6     else:
     7         ans= s[0] == s[-1] and isPlalindrome1(s[1:-1], indent + indent)
     8         print indent, 'About to return ',ans
     9     return ans
    10 
    11 isPlalindrome1("abccba",1)

    五、斐波那契数列

    1 def fib(x):
    2     sum=1;
    3     if x==1 or x==0:
    4         return 1;
    5     else:
    6         return fib(x-1)+fib(x-2)
    7 
    8 print fib(4)

    六、求数x平方根

    1.二分法求解

     1 def squrtRootBi(x,epsilon):
     2     assert x>=0,"x must be positive"+str(x)
     3     assert epsilon>0,"epsilon must be positive"+str(epsilon)
     4     low=0
     5     #high=x
     6     high=max(x,1.0)
     7     guess=(low+high)/2.0
     8     ctr=1
     9     while abs(guess**2-x)>epsilon and ctr<=100:
    10         #print "low",low,"high",high,"guess",guess
    11         if guess**2<x:
    12             low=guess
    13         else:
    14             high=guess
    15         guess=(low+high)/2.0
    16         ctr+=1
    17     assert ctr<=100,"not perfect square number!"
    18     print "times of Iteration:",ctr," guess",guess
    19     return guess
    20 
    21 def testBi():
    22     squrtRootBi(4,0.0001)
    23     squrtRootBi(2, 0.0001)
    24     squrtRootBi(0.25, 0.0001)
    25 
    26 testBi()

    2.牛顿迭代法求解

     1 def squrtRootNR(x,epsilon):
     2     assert x >= 0, "x must be positive" + str(x)
     3     assert epsilon > 0, "epsilon must be positive" + str(epsilon)
     4     x=float(x)
     5     guess=x/2.0
     6     #guess=0.001
     7     diff=guess**2-x
     8     ctr=1
     9     while abs(diff)>epsilon and ctr<=100:
    10        # print "error",diff,"guess",guess
    11         guess=guess-diff/(2.0*guess)
    12         diff=guess**2-x
    13         ctr+=1
    14     assert ctr <= 100, "not perfect square number!"
    15     print "times of Iteration:", ctr, " guess", guess
    16     return guess
    17 
    18 def testBi1():
    19     squrtRootNR(4,0.0001)
    20     squrtRootNR(2, 0.0001)
    21     squrtRootNR(0.25, 0.0001)
    22 
    23 testBi1()

     

     

    本性的苏醒,往往在遭遇真实之后。
  • 相关阅读:
    js 第四课
    斐波那契数列(Fibonacci)(递归,非递归)(动态规划,自顶向下,自底向上)
    八种方法计算字符串中特定字符的数量
    谁做对了?
    数组问题
    关于“ORA12988: 无法删除属于 SYS 的表中的列”
    两条路,此人如何问甲乙问题?才能走向京城
    学了快二月的Nhibernate
    温故知新,把牢基础~
    用键盘选择复选框
  • 原文地址:https://www.cnblogs.com/chance88/p/6515169.html
Copyright © 2011-2022 走看看