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)






需求响应动态冰蓄冷系统与需求响应策略的优化研究(Matlab代码实现)内容概要:本文围绕需求响应动态冰蓄冷系统及其优化策略展开研究,结合Matlab代码实现,探讨了在电力需求侧管理背景下,冰蓄冷系统如何通过优化运行策略参与需求响应,以实现削峰填谷、降低用电成本和提升能源利用效率的目标。研究内容包括系统建模、负荷预测、优化算法设计(如智能优化算法)以及多场景仿真验证,重点分析不同需求响应机制下系统的经济性和运行特性,并通过Matlab编程实现模型求解与结果可视化,为实际工程应用提供理论支持和技术路径。; 适合人群:具备定电力系统、能源工程或自动化背景的研究生、科研人员及从事综合能源系统优化工作的工程师;熟悉Matlab编程且对需求响应、储能优化等领域感兴趣的技术人员。; 使用场景及目标:①用于高校科研中关于冰蓄冷系统与需求响应协同优化的课题研究;②支撑企业开展楼宇能源管理系统、智慧园区调度平台的设计与仿真;③为政策制定者评估需求响应措施的有效性提供量化分析工具。; 阅读建议:建议读者结合文中Matlab代码逐段理解模型构建与算法实现过程,重点关注目标函数设定、约束条件处理及优化结果分析部分,同时可拓展应用其他智能算法进行对比实验,加深对系统优化机制的理解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值