python笔记(一)

课程地址:http://v.163.com/special/opencourse/bianchengdaolun.html

1~3节可略

第四节:

def solve(numlegs,numheads):
    for numchicken in range(0,numheads+1):  ##numchicken可以取值:0~numheads
        numpigs=numheads-numchicken
        ##print numpigs,numchicken
        tolleg=4*numpigs+2*numchicken
        if(tolleg==numlegs):
            return [numpigs,numchicken]
    return [None,None]  ##缩进->嵌套,可以返回多个参数

def bb():
    heads=int(input("input "))
    legs=int(input("input "))
    pigs,chicken=solve(legs,heads)
    if pigs==None:
        print "no"
    else:
        print 'pig',pigs
        print 'chicken',chicken

bb()  ##函数调用
        



第五节:

def sqrtBit(x,epsilon):
	assert x>=0,'x<0'
	assert epsilon>0,'epsilon<=0'
	low=0
	high=max(x,1.0)  ##注意小数,它的平方根不在区间[0,x]之间,而在[0,1]之间
	quess=(low+high)/2.0
	ctr=1
	while abs(quess**2-x)>epsilon and ctr<=100:
		print quess**2
		if quess**2<=x:
			low=quess
		else:
			high=quess
		quess=(low+high)/2.0
		ctr+=1
	assert ctr<=100,'迭代次数太多,计算失败!'
	print '迭代次数:',ctr,'结果:',quess
	return quess


运行结果:




第六节:   二分法,牛顿,拉复生方法,对于数组的简介


元组:元组和列表十分类似,只不过元组和字符串一样是 不可变的 即你不能修改元组。元组通过圆括号中用逗号分割的项目定义。元组通常用在使语句或用户定义的函数能够安全地采用一组值的时候,即被使用的元组的值不会改变。

百科:元组


1)牛顿切线法:

guess(i+1)=guess(i)-f(guess(i))/2*guess(i)
例如:f(x)=x^2-16,x=guess(i)
f(3)=9-16=-7
guess(i+1)=3-f(3)/2*3=4.1666

def SqrtBitNR(x,eplision):
    assert x>=0,'x<0'
    assert eplision>0,'eplision>0'
    x=float(x)
    guess=x/2.0
    diff=guess**2-x  ##f(x)
    ctr=1
    while abs(diff)>eplision and ctr<=100:
        ##print 'f(x):',diff,'guess:',guess
        guess=guess-diff/(2.0*guess)
        diff=guess**2-x
        ctr+=1
    assert ctr<=100,'迭代次数太多'
    print 'NR method:'
    print 'guess:',guess,'iterator:',Sqctr
    return guess


2)LIST:

def showLists():
    Techs=['MIT','CCLTAH']
    print Techs
    raw_input()  ##相当于readline(),读取换行符继续
    Iuys=['Hacuccd','Ycle','Bccn']
    print Iuys  ##把整个list都添加到了list中,得到了一个包含list的list
    raw_input()
    Univs=[]
    Univs.append(Techs)
    print Univs
    raw_input()
    Univs.append(Iuys)  ##Univs变成了包含两个list的list
    print Univs
    raw_input()
    for e in Univs:
        print e
        for c in e:print c 
    raw_input()
    Univs=Techs+Iuys
    print Univs
    raw_input()
    Iuys.remove('Ycle')
    print Iuys
    Iuys[1]=-1
    print Iuys
    raw_input()
    L=[3,'liy',9.9,['a']]
    print L
    L.remove(9.9)
    print L
    print L[0]

运行结果:




第七节:    数组以及可变性,字典,伪码,对于代码运行效率的简 介

def Test():
    L1=[1,2,3]
    print 'L1:',L1
    ##L1[3]=5
    L2=L1
    print 'L2:',L2
    L1[0]=4
    print 'L1:',L1
    print 'L2:',L2
    L1=[]
    print 'L1:',L1
    print 'L2:',L2

def showDicts():
    EtoF={'one':'ggg','soccer':'football','op':'lufei'}
    print EtoF['soccer']
    raw_input()
    ##print EtoF[0]
    print EtoF
    raw_input()
    NtoS={1:'one','2':'two','3':'three'}
    print NtoS
    print NtoS.keys()
    raw_input()

def Temp():
    inputOK=False
    while not inputOK:
        base=input('INput:')
        if type(base)==type(1.0):inputOK=True
        else: print('Error,input is not a floating:')
    




第八节:   算法的复杂度:对数级,线性级,平方级,指数级 


1)汉诺塔递归(算法复杂度推导):
T(n)=1+2*T(n-1)
=1+2*1+4*T(n-2)
=1+2*1+4*1+8*T(n-3)
=(1+2+4+…+2^(k-1))+(2^k)*(n-k)
=2^(k+1)-1
=2^n-1
其中,n-k=1,k=n-1

def Tower(size, fromStack, toStack, spareStack):

    if size == 1:

        print "move disk from ", fromStack, " to ", toStack

    else:

        Tower(size - 1, fromStack, spareStack, toStack)

        Tower(1, fromStack, toStack, spareStack)

        Tower(size - 1, spareStack, toStack, fromStack)

2)递归计算幂

def exp(a,b):
    if b==1:
        return a
    if (b%2)==0:
        return exp(a*a,b/2)
    else: return a*exp(a,b-1)

3)对有序查找的比较(普通--二分)

def search(s,e):
    ##s=range(i)
    answer=None
    i=0
    numCompare=0
    while i<len(s) and answer==None:
        numCompare+=1
        if e==s[i]:
            answer=True
        elif e<s[i]:
            answer=False
        i+=1
    print numCompare    
    return answer
def bsearch(s,e,first,last):
    ##s=range(i)
    if last-first<2:
        return s[first]==e or s[last]==e
    mid=first+(last-first)/2
    if s[mid]==e:
        return True
    if s[mid]>e:
        return bsearch(i,e,first,mid-1)
    return bsearch(i,e,mid+1,last)






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值