fibo
def fi1(x):
if x==1 or x==2:
return 1
return fi1(x-1)+fi1(x-2)
print fi1(15)
def fi2(x):
a,b=1,1
for x in range(x-1):
a,b=b,a+b
return a
print fi2(15)
def fi3(x,y):
if x==1:
return [1]
if x==2:
return [1,1]
fibs=[1,1]
for x in range(x-1):
fibs.append(fibs[-1]+fibs[-2])
return fibs[y-1]
print fi3(15,15)
水仙花数
for x in range(100,999):
num=0
for y in str(x):
num+=int(y)**3
if num==x:
re.append(num)
1 .把数字转为字符串遍历然后进行操作
2 .可以把很多数学问题转换为非数学问题来取巧解决
分解质因数
def reduceNum1(n):
while True:
确保每一次都是从最小的开始找起
for index in xrange(2, n + 1):
if n % index == 0:
完成的条件
n /= index
n新的值
if n == 1:
# pass
print index
else :
# pass
print '{} *'.format(index),
print '--->'
break
把数字转化为字符串操作
a=4
n=4
re=0
for x in range(1,n+1):
n1=str(a)*x
print int(n1)
re+=int(n1)
print re
小球从100米的高空开始下落,每次反弹高度降低一半,10次反弹之后他的总路程和小球最后的反弹高度
tour=[]
height=[]
h=100.000
t=10
for x in range(1,t+1):
if x ==1:
tour.append(h)
else:
tour.append(h*2)
h/=2
height.append(h)
print height
1 .这次发现参数的精度也很有问题啊,如果精度不是很大的话,那么小的数据就会被抛弃掉
计算猴子吃的桃子
x=1
for z in range(1,10):
//遍历出来的z在使用的时候一定要和x做区分啊
print z
x=(x+1)*2
print x
打印如下图案
1 .要学会对需求进行拆分,不是所有的操作都必须一个函数完成,也不是必须所有的循环都必须是一个for搞定
from sys import stdout
for i in range(4):
for j in range(3 - i):
stdout.write(' ')
for k in range(2 * i + 1):
stdout.write('*')
print
for i in range(3):
for j in range(i + 1):
stdout.write(' ')
for k in range(4 - 2 * i + 1):
stdout.write('*')
print
2 .传入一个数,但是输出的两个变量都是和这一个数有关的,所以两个数分别和这个传进来的数找对应关系
交换且前后数据有联系
1 . b,a=a,a+b:这个是正确的,是理想的结果,还有一种处理方式就是使用一个中间变量来过渡一下a或b的值,当一个中间凉
2 .a=b
3 .b=a+b:此时b=2b
求1-20之间所有数的阶乘
s=0
for x in range(1,21):
s1=1
while x>0:
s1=s1*x
x=x-1
s+=s1
print s
反序输出一串字符串
1 .数组从前面插入
s='libateer'
x=[]
for z in s:
x.insert(0,z)
print x
给出一个五位数,求出他是几位数,然后逆序输出他的每个位上的值
1 .问题来了:将数字变为字符串处理的坏处有哪些?精度
n=3472
s=str(n)
for x in range(1,len(s)+1):
print s[-x]
判断一个数是否是回文数
1 .字符串的反序输出 s[::-1]
n='12321'
if n==n[::-1]:
print 'ok'
直接求数组的反序
a = ['one', 'two', 'three']
for i in a[::-1]:
print i
一个简单的数据存储
class names:
name='libatere'
age=20
//标记数据
//读取数据
print names.name
一个已经排好的数组,插入一个数字,按照原来的规律排好?二分法插入数据
1 .只分了一次就使用循环操作了。
2 .如果每一次都使用二分法的话,递归会不会内存溢出啊
s=[1,9,4,6,13,16,19,28,40,100,0,3]
s.sort()
import math
def newNum(x):
if x>s[-1]:
s.append(x)
else:
y=s[-1]-x
b=len(s)/2
z=min(y,b)
print z
if x<s[z]:
print 'qian'
for i in range(1,z):
if x>s[i] and x<s[i+1]:
s.insert(i+1,x)
break
else:
print 'hou'
for i in range(z,len(s)):
if x>s[i] and x<s[i+1]:
s.insert(i,x)
break
print s
newNum(17)
类的存储数据的功能
class Count:
count=10
def add(self):
self.count+=1
print self.count
a=Count()
for x in range(100):
a.add()
生成杨辉三角
s=[]
for x in range(10):
s.append([])
for j in range(10):
s[x].append(0)
//有些数据在添加之前是需要占位数据的。
for i in range(10):
s[i][0]=1
s[i][i]=1
先添加第一个和最后一个数
然后下面在进行规律生成
for i in range(2,10):
for j in range(1,i):
s[i][j]=s[i-1][j-1]+s[i-1][j]
print s
把多余的占位符消除掉
for i in range(10):
print s[i][0:i+1]