python2.7练习小例子(十)
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练习小例子(十)的更多相关文章
- python2.7练习小例子(二十九)
29):1.题目:按相反的顺序输出列表的值. #!/usr/bin/python # -*- coding: UTF-8 -*- a = ['one', 'two', 'three'] for ...
- python2.7练习小例子(十二)
12):题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身.例如:153是一个"水仙花数" ...
- python2.7练习小例子(二十八)
28):题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母. 程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母. ...
- python2.7练习小例子(二十四)
24):1.题目:利用递归方法求5!. 程序分析:递归公式:fn=fn_1*4! #!/usr/bin/python # -*- coding: UTF-8 -*- def fact( ...
- python2.7练习小例子(十八)
19):题目:一个数如果恰好等于它的因子之和,这个数就称为"完数".例如6=1+2+3.编程找出1000以内的所有完数. #!/usr/bin/python # -*- ...
- python2.7练习小例子(十六)
16):题目:输入一行字符,分别统计出其中英文字母.空格.数字和其它字符的个数. 程序分析:利用 while 或 for 语句,条件为输入的字符不为 '\n'. 程序源代码: #!/u ...
- python2.7练习小例子(十五)
15):题目:输出指定格式的日期. 程序分析:使用 datetime 模块. 程序源代码: #!/usr/bin/python # -*- coding: UTF-8 -*- ...
- python2.7练习小例子(八)
8):题目:输出 9*9 乘法口诀表. 程序分析:分行与列考虑,共9行9列,i控制行,j控制列. 程序源代码: #!/usr/bin/python # -*- coding: ...
- python2.7练习小例子(七)
7):题目:将一个列表的数据复制到另一个列表中. 程序分析:使用列表[:]. 程序源代码: #!/usr/bin/python # -*- coding: UTF-8 -*- ...
随机推荐
- Intel® Manager for Lustre* software(一)
Intel® Manager for Lustre* software Installation 软件安装指导目录: 安装IML(Intel® Manager for Lustre* software ...
- Android(java)学习笔记43:Map集合的遍历之键找值
1. Map集合的遍历之键找值 package cn.itcast_01; import java.util.HashMap; import java.util.Map; import java.u ...
- Android(java)学习笔记14:Java线程池
1. 线程池: 1)程序启动一个新线程成本是比较高的,因为它涉及到要与操作系统进行交互.而使用线程池可以很好的提高性能,尤其是当程序中要创建大量生存期很短的线程时,更应该考虑使用线程池. 2)线程池里 ...
- 计算次数,POJ(1207)
题目链接:http://poj.org/problem?id=1207 #include <stdio.h> #include <algorithm> using namesp ...
- ASP.NET SignalR 与LayIM配合,轻松实现网站客服聊天室(一) 整理基础数据
最近碰巧发现一款比较好的Web即时通讯前端组件,layim,百度关键字即可,我下面要做的就是基于这个前端组件配合后台完成即时聊天等功能.当然用到的技术就是ASP.NET SingalR框架.本人不会c ...
- Oracle,Mysql,SQlserver生成实体映射之SqlSugarT4
官网:http://www.codeisbug.com 代码已上传GitHub:https://github.com/SeaLee02/sealee 本篇主要讲使用SqlSugar包进行Model生成 ...
- android 多线程 异步消息处理 服务 学习笔记 (六)
三种多线程编程方法 1 class Mythread extends Thread{ @Override public void run(){} } new Mythread().start() 2 ...
- mysql复制表数据,多表数据复制到一张表
对于mysql 复制表数据可以使用 insert into select 方式 示例: $sql="insert into icarzoo.provider(providerId,provi ...
- UIlable上下居中
- (void)setView{ self.chooseImg = [[UIImageView alloc] initWithFrame:CGRectMake(TO_LEFT_D, (ROW_HEIG ...
- zepto 基础知识(6)
101.$.ajax $.ajax(options) 类型:XMLttpRequest 执行Ajax请求.他可能是本地资源,或者通过支持HTTP access control的浏览器 或者通过 JSO ...