1. 程式人生 > >python2.7練習小例子(十)

python2.7練習小例子(十)

ali 輸入 spa gb2 list ont 數列 結果 weight

10):古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少?

程序分析:兔子的規律為數列1,1,2,3,5,8,13,21....

程序源代碼:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

f1 = 1
f2 = 1
for i in range(1,22):
    print ‘%12ld %12ld‘ % (f1,f2),
    if (i % 3) == 0:
        print ‘‘
    f1 = f1 + f2
    f2 = f1 + f2

以上實例輸出結果為:

           1           1            2           3            5           8 
          13          21           34          55           89         144 
         233         377          610         987         1597        2584 
        4181        6765        10946       17711        28657       46368 
       75025      121393       196418      317811       514229      832040 
     1346269     2178309      3524578     5702887      9227465    14930352 
    24157817    39088169     63245986   102334155    165580141   267914296

#!/usr/bin/python
# -*- coding: UTF-8 -*-#
#遞歸做,非常慢。計算n=36就要大概七八秒吧
def fib(n):
    if n==1 or n==2:
        return 1
    else:
        return fib(n-1)+fib(n-2)
print fib(36)

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# time 為第幾個月,n 為 3
def rabbit(time,n):
    if time<1:
        return 0
    elif time==1:
        num=1
    elif time<n:
        num=1
    else:
        num=rabbit(time-1,n)+rabbit(time-(n-1),n)
    return num
print rabbit(25,3)

#!/usr/bin/python
# -*- coding: UTF-8 -*-

def rabbit(num):
    f1 = 1
    #第一個月為1
    f2 = 1
    #第二個月為1
    if num == 1 or num == 2:
        return 1
    else:
        for i in xrange(num-1):
            f1,f2 = f2,f1+f2
    return f1

# 第三十六月兔子數量
print rabbit(36)

使用斐波那契數列:

# !/usr/bin/python
# coding=UTF-8

n = int(raw_input("第幾個月: "))
# 斐波那契數列的通項公式
f =(1/(5**0.5))*(((1+(5**0.5))/2)**n - ((1-(5**0.5))/2)**n)
print "第%d個月:共%d只"  % ( n,f)

Python3 參考方法:

#!/usr/bin/python3

def rabbit(n):
    count = [1,0,0]  #將兔子成長期分為三個月
    for i in range(1,n): #每個月更新一次不同成長期的兔子對數
        count[2] = count[2] + count[1]
        count[1] = count[0]
        count[0] = count[2]
    return count[0]+count[1]+count[2] #返回兔子對數總數

n = int(input("查看第幾個月的兔子對數:"))
rabbit_sum = rabbit(n)
print("第%d個月的兔子對數為%d"%(n,rabbit_sum))

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

def Rabbit(num):
     i = 1
     a,b = 1,1
     while i <= num:
         yield a
         i += 1
         a,b = b,a+b


list = [x for x in Rabbit(20)]
print(list)

# -*- coding: utf-8 -*-

Rabbits={‘rabbits‘:0}    # 新生兔子
home=[{‘rabbits‘:1}]     # 所有兔子對都在這個列表中,初始按過完一月計算
month=int(raw_input(‘請輸入月份:‘))
time=1                   # time 表示已經過完的月數,到了該月月末。

while time <month:
    for j in home:
        if j[‘rabbits‘]>=2:
            home.append(Rabbits.copy())
        else:
            j[‘rabbits‘]+=1
    time+=1

print ‘兔子數量為 %u。‘% len(home)

#!/usr/bin/python
# -*- coding: UTF-8 -*-

a = 1
b = 1
for i in range(1,21,2):
    print ‘%d %d‘%(a,b),
    a += b
    b += a

# -*- coding: UTF-8 -*-
def rabbit(n):
    if n == 1:
        return [1]
    if n == 2:
        return  [1,1]
    rabbits = [1,1]
    for i in range(2,n):
        rabbits.append( rabbits [-1] + rabbits [-2])  #取List倒數第一個和倒數第二個數值相加
    return rabbits
print rabbit(18)  #第十八個月的數量

all_rabbit = []    
    
class Rabbit():
    def __init__(self, birthday):
        self.birthday = birthday
        all_rabbit.append(self)
    def makechild(self, month):
        if month-self.birthday>=2:
            Rabbit(month)

Rabbit(1)
for i in range(1, 22):
    [j.makechild(i) for j in all_rabbit[:]]
    print(len(all_rabbit))

簡單的練習小例子,有興趣的可以來試試。如果感覺不錯的話,請多多點贊支持哦。。。

  原文鏈接:https://blog.csdn.net/luyaran/article/details/80046801

python2.7練習小例子(十)