冒泡算法要求:给定一个列表 [13,22,6,99,11] 通过程序实现让他们可以从小到大排序。
思路:让相邻的两个数互比大小,存在大数就放在右边。
我的实现:
#!/usr/bin/env python#-*- coding: utf-8 -*-__author__='lilon'li= [33,11,88,77,44,345,223,113,555,23,3]PRintliprint"**************************8"#定义冒泡函数,计算排序,最大数放在右面defmaopao():#循环,从1开始,例如range(1,5) 1,2,3,4 注意没有5forninrange (1,len(li)):#循环,从0开始到 例如range(5-1 4) range(5-2 3) range(5-3 2) range(5-4 1)forminrange(len(li)-n):#给num1赋值 li[m]num1 =li[m]#给num2赋值 li[m+1]num2 = li[m+1]#比较num1 num2ifnum1 >num2:#通过临时变量temp交换li[m] 和 li[m+1]temp =num1
li[m]=num2
li[m+1] =tempprintliprintlipass#定义一个主函数defmain():
maopao()#限制程序入口if__name__=="__main__":
main()
详说修改配置文件的方法默认配置
globallog127.0.0.1local2
daemon
maxconn256log127.0.0.1local2 info
defaults
logglobalmode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
option dontlognull
listen stats :8888stats enable
stats uri/admin
stats auth admin:1234frontend oldboy.org
bind0.0.0.0:80option httplog
option httpclose
option forwardfor
logglobalacl www hdr_reg(host)-i www.oldboy.org
use_backend www.oldboy.orgifwww
backend www.oldboy.org
server100.1.7.9 100.1.7.9 weight 20 maxconn 3000原配置文件
修改需求
1、查
输入:www.oldboy.org
获取当前backend下的所有记录2、新建
输入:
arg={'bakend':'www.oldboy.org','record':{'server':'100.1.7.9','weight': 20,'maxconn': 30}
}3、删除
输入:
arg={'bakend':'www.oldboy.org','record':{'server':'100.1.7.9','weight': 20,'maxconn': 30}
}
需求
我的实现#!/usr/bin/env python#-*- coding: utf-8 -*-__author__='lilon'importosimportjson#定义好一个函数,用来做查找deffetch(ha):
backendlist=ha#先准备一个列表,在后面用来加入查到的backend字段下的server信息serverinfo =[]#print "backend %s" %backendlist#使用with的方式打开文件,可以自动的关闭文件,减少我们出错误的可能with open ("oldboy.conf","r")as obj:"""#灵活添加flag,使用flag做一个开关,匹配到了相关的backend就把flag设置为True,
直到遇到了backend开头的其他的字段,就把flag设置为False,
中间的就是我们需要的信息,使用列表的append()方法就可以添加了"""flag=False#循环,一次一行,处理大文件必须的方式forlineinobj:ifline.strip() =="backend %s"%backendlist:
flag=Truecontinue#灵活性代码 startswitch方法 匹配开头是backend的行ifflagandline.strip().startswith("backend"):
flag=False
break"""#当我们确认了flag是True,
意味着上面已经找到了相关的backend,
而且把flag设置为了True了,
所以我们现在可以通过append()方法来把相关的server info
加入到了列表里面"""ifflagandline.strip():
serverinfo.append(line.strip())ifserverinfo:returnserverinfo#定义一个函数,做增加defbackendadd(**dict_info):
fetch_list=[]
backend_title= dict_info.get("backend")
current_record_pre="server {server} weight {weight} maxconn {maxconn}"current_record= current_record_pre.format(**dict_info.get("record"))
fetch_list=fetch(backend_title)iffetch_list:ifcurrent_recordinfetch_list:passelse:
fetch_list.append(current_record)
with open("oldboy.conf","r") as objConf, open("conf.temp","w") as objTemp:
flag=False
isWrite=TrueforlineinobjConf:ifline.strip() =="backend %s"%backend_title:
objTemp.write(line)
flag=Truecontinueifflag == Trueandline.strip().startswith("backend"):
flag=Falseifflag ==True:ifisWrite:fornew_lineinfetch_list:
temp="%s%s\n"%(""*8,new_line)
objTemp.write(temp)
isWrite=Trueelse:
objTemp.write(line)ifos.path.isfile("oldboy.bak"):
os.remove("oldboy.bak")
os.rename("oldboy.conf","oldboy.bak")
os.rename("conf.temp","oldboy.conf")returnTrueelse:
with open("oldboy.conf","r") as objConf, open("conf.temp","w") as objTemp:forlineinobjConf:
objTemp.write(line)
objTemp.write("backend %s\n"%backend_title)
objTemp.write("%s%s\n"%(""*8,current_record))ifos.path.isfile("oldboy.bak"):
os.remove("oldboy.bak")
os.rename("oldboy.conf","oldboy.bak")
os.rename("conf.temp","oldboy.conf")returnTruedefdelitem(**dict_info):
fetch_list=[]
backend_title= dict_info.get("backend")
current_record_pre="server {server} weight {weight} maxconn {maxconn}"current_record= current_record_pre.format(**dict_info.get("record"))
fetch_list=fetch(backend_title)iffetch_list:ifcurrent_recordinfetch_list:
with open("oldboy.conf","r") as objConf, open("conf.temp","w") as objTemp:iflen(fetch_list) > 1:forlineinobjConf:ifline.strip() ==current_record:continueelse:
objTemp.write(line)else:forlineinobjConf:ifline.strip() =="backend %s"%backend_title:continueifline.strip() ==current_record:continueelse:
objTemp.write(line)ifos.path.isfile("oldboy.bak"):
os.remove("oldboy.bak")
os.rename("oldboy.conf","oldboy.bak")
os.rename("conf.temp","oldboy.conf")returnTrueelse:passelse:passpassdefbackup():
os.remove("oldboy.conf")
os.rename("oldboy.bak","oldboy.conf")#定义一个主函数defmain():
ha="buy.oldboy.org"dictItem={'backend':'buy.oldboy.org','record':{'server':'101.1.71.90 100.1.7.90','weight': 22,'maxconn': 3000}
}
userInput= int(raw_input("hi plese input your choice:\n 1.search \n 2.add \n 3.del \n"))ifuserInput == 1:print"you select search."#userInputSearch = raw_input("input a backend url")searchEnd =fetch(ha)ifsearchEnd:forlineinsearchEnd:printlineprint"search End!"else:print"sorry not found!"elifuserInput == 2:print"you select add."addEnd= backendadd(**dictItem)ifaddEnd:print"add successful"else:print"error!!!"elifuserInput == 3:print"you select del."delEnd= delitem(**dictItem)ifdelEnd:print"del successful"else:print"no file in their"ifos.path.isfile("oldboy.temp.conf"):
os.remove("oldboy.temp.conf")elifuserInput == 4:print"this is a super command"backup()else:print"sorry, i can not do that!!!"#限制程序入口if__name__=="__main__":
main()
lambda表达式学习条件运算时,对于简单的 if else 语句,可以使用三元运算来表示,即:
#普通条件语句if1 == 1:
name='wupeiqi'else:
name='alex'#三元运算name ='wupeiqi'if1 == 1else'alex'
对于简单的函数,也存在一种简便的表示方式,即:lambda表达式#!/usr/bin/env python#-*- coding: utf-8 -*-__author__='EchoRep'deffunc1(arg):returnarg + 1func2=lambdaa: a+1func3=lambdaa,b: a+bdeflambdax():
result= func1(100)printresult
result2= func2(1000)printresult2
result3= func3(100,211)printresult3#定义一个主函数defmain():
lambdax()pass#限制程序入口if__name__=="__main__":
main()
lambda存在意义就是对简单函数的简洁表示
map遍历序列,对序列中每个元素进行操作,最终获取新的序列
li = [11, 22, 33]
new_list= map(lambdaa: a + 100, li)
li = [11, 22, 33]
sl= [1, 2, 3]
new_list= map(lambdaa, b: a + b, li, sl)
#!/usr/bin/env python#-*- coding: utf-8 -*-__author__='EchoRep'deffunc1(args):returnargs ** 128#定义一个主函数defmain():
li=[2,3,4]
l1= [1,2,3]
l2= [2,3,4]
l3= [3,4,5]printmap(lambdaa,b,c:a+b+c,l1,l2,l3)pass#限制程序入口if__name__=="__main__":
main()
filter对于序列中的元素进行筛选,最终获取符合条件的序列
li = [11, 22, 33]
new_list= filter(lambdaarg: arg > 22, li)#filter第一个参数为空,将获取原来序列
#!/usr/bin/env python#-*- coding: utf-8 -*-__author__='EchoRep'li= [11,22,33,44]#定义一个主函数defmain():printfilter(lambdaa:a>33,li)pass#限制程序入口if__name__=="__main__":
main()
reduce用于累计操作,如累加,累乘等
#!/usr/bin/env python#-*- coding: utf-8 -*-__author__='EchoRep'li= [1,2,3,4,5,6,7,8,9]#定义一个主函数defmain():printreduce(lambdaarg1,arg2:arg1*arg2,li)#限制程序入口if__name__=="__main__":
main()
yield暂时跳出了函数,但是下次可以继续使用,和continue要区分开
#!/usr/bin/env python#-*- coding: utf-8 -*-__author__='EchoRep'deffunc1():yield1yield2yield3defmrange(arg):
seed=0whileTrue:
seed= seed + 1ifseed >arg:returnelse:yieldseed#定义一个主函数defmain():foriinmrange(10):printi#限制程序入口if__name__=="__main__":
main()