2015-11-15 第四天

冒泡算法

要求:给定一个列表 [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]
print li
print "**************************8"

#定义冒泡函数,计算排序,最大数放在右面
def maopao():
    #循环,从1开始,例如range(1,5) 1,2,3,4 注意没有5
    for n in range (1,len(li)):
        #循环,从0开始到 例如range(5-1 4) range(5-2 3) range(5-3 2) range(5-4 1)
        for m in range(len(li)-n):
            #给num1赋值 li[m]
            num1 = li[m]
            #给num2赋值 li[m+1]
            num2 = li[m+1]
            #比较num1 num2
            if num1 > num2:
                #通过临时变量temp交换li[m] 和 li[m+1]
                temp = num1
                li[m] = num2
                li[m+1] = temp

        print li
    print li
    pass

#定义一个主函数
def main():
    maopao()

#限制程序入口
if __name__ =="__main__":
    main()

详说修改配置文件的方法

默认配置

global
        log 127.0.0.1 local2
        daemon
        maxconn 256
        log 127.0.0.1 local2 info
defaults
        log global
        mode http
        timeout connect 5000ms
        timeout client 50000ms
        timeout server 50000ms
        option  dontlognull

listen stats :8888
        stats enable
        stats uri       /admin
        stats auth      admin:1234

frontend oldboy.org
        bind 0.0.0.0:80
        option httplog
        option httpclose
        option  forwardfor
        log global
        acl www hdr_reg(host) -i www.oldboy.org
        use_backend www.oldboy.org if www

backend www.oldboy.org
        server 100.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‘
import os
import json

#定义好一个函数,用来做查找
def fetch(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
        #循环,一次一行,处理大文件必须的方式
        for line in obj:
            if line.strip() == "backend %s" % backendlist:
                flag = True
                continue
            #灵活性代码 startswitch方法 匹配开头是backend的行
            if flag and line.strip().startswith("backend"):
                flag = False
                break
            """
            #当我们确认了flag是True,
            意味着上面已经找到了相关的backend,
            而且把flag设置为了True了,
            所以我们现在可以通过append()方法来把相关的server info
            加入到了列表里面
            """
            if flag and line.strip():
                serverinfo.append(line.strip())
    if serverinfo:
        return serverinfo

#定义一个函数,做增加
def backendadd(**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)
    if fetch_list:
        if current_record in fetch_list:
            pass
        else:
            fetch_list.append(current_record)
            with open("oldboy.conf","r") as objConf, open("conf.temp","w") as objTemp:
                flag = False
                isWrite = True
                for line in objConf:
                    if line.strip() == "backend %s" %backend_title:
                        objTemp.write(line)
                        flag = True
                        continue
                    if flag == True and line.strip().startswith("backend"):
                        flag = False
                    if flag == True:
                        if isWrite:
                            for new_line in fetch_list:
                                temp = "%s%s\n" %(" "*8,new_line)
                                objTemp.write(temp)
                            isWrite = True
                    else:
                        objTemp.write(line)
            if os.path.isfile("oldboy.bak"):
                os.remove("oldboy.bak")
            os.rename("oldboy.conf","oldboy.bak")
            os.rename("conf.temp","oldboy.conf")
            return True
    else:
        with open("oldboy.conf","r") as objConf, open("conf.temp","w") as objTemp:
            for line in objConf:
                objTemp.write(line)
            objTemp.write("backend %s\n" %backend_title)
            objTemp.write("%s%s\n" %(" "*8,current_record))
        if os.path.isfile("oldboy.bak"):
                os.remove("oldboy.bak")
        os.rename("oldboy.conf","oldboy.bak")
        os.rename("conf.temp","oldboy.conf")
        return True

def delitem(**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)
    if fetch_list:
        if current_record in fetch_list:
            with open("oldboy.conf","r") as objConf, open("conf.temp","w") as objTemp:
                if len(fetch_list) > 1:
                    for line in objConf:
                        if line.strip() == current_record:
                            continue
                        else:
                            objTemp.write(line)
                else:
                    for line in objConf:
                        if line.strip() == "backend %s" %backend_title:
                            continue
                        if line.strip() == current_record:
                            continue
                        else:
                            objTemp.write(line)
            if os.path.isfile("oldboy.bak"):
                os.remove("oldboy.bak")
            os.rename("oldboy.conf","oldboy.bak")
            os.rename("conf.temp","oldboy.conf")
            return True
        else:
            pass
    else:
        pass
    pass

def backup():
    os.remove("oldboy.conf")
    os.rename("oldboy.bak","oldboy.conf")

#定义一个主函数
def main():
    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"))
    if userInput == 1:
        print "you select search."
        # userInputSearch = raw_input("input a backend url")
        searchEnd = fetch(ha)
        if searchEnd:
            for line in searchEnd:
                print line
            print "search End!"
        else:
            print "sorry not found!"

    elif userInput == 2:
        print "you select add."
        addEnd = backendadd(**dictItem)
        if addEnd:
            print "add successful"
        else:
            print "error!!!"

    elif userInput == 3:
        print "you select del."
        delEnd = delitem(**dictItem)
        if delEnd:
            print "del successful"
        else:
            print "no file in their"
            if os.path.isfile("oldboy.temp.conf"):
                os.remove("oldboy.temp.conf")

    elif userInput == 4:
        print "this is a super command"
        backup()
    else:
        print "sorry, i can not do that!!!"

#限制程序入口
if __name__ =="__main__":
    main()

lambda表达式

学习条件运算时,对于简单的 if else 语句,可以使用三元运算来表示,即:

# 普通条件语句
if 1 == 1:
    name = ‘wupeiqi‘
else:
    name = ‘alex‘

# 三元运算
name = ‘wupeiqi‘ if 1 == 1 else ‘alex‘

对于简单的函数,也存在一种简便的表示方式,即:lambda表达式

#!/usr/bin/env python
# -*- coding: utf-8 -*-
__author__ = ‘EchoRep‘

def func1(arg):
    return arg + 1
func2 = lambda a: a+1
func3 = lambda a,b: a+b

def lambdax():
    result = func1(100)
    print result
    result2 = func2(1000)
    print result2
    result3 = func3(100,211)
    print result3

#定义一个主函数
def main():
    lambdax()
    pass

#限制程序入口
if __name__ == "__main__":
    main()

lambda存在意义就是对简单函数的简洁表示

map

遍历序列,对序列中每个元素进行操作,最终获取新的序列

li = [11, 22, 33]

new_list = map(lambda a: a + 100, li)
li = [11, 22, 33]
sl = [1, 2, 3]
new_list = map(lambda a, b: a + b, li, sl)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
__author__ = ‘EchoRep‘

def func1(args):
    return args ** 128

#定义一个主函数
def main():
    li =[2,3,4]
    l1 = [1,2,3]
    l2 = [2,3,4]
    l3 = [3,4,5]
    print map(lambda a,b,c:a+b+c,l1,l2,l3)
    pass

#限制程序入口
if __name__ == "__main__":
    main()

filter

对于序列中的元素进行筛选,最终获取符合条件的序列

li = [11, 22, 33]

new_list = filter(lambda arg: arg > 22, li)

#filter第一个参数为空,将获取原来序列
#!/usr/bin/env python
# -*- coding: utf-8 -*-
__author__ = ‘EchoRep‘

li = [11,22,33,44]

#定义一个主函数
def main():
    print filter(lambda a: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]
#定义一个主函数
def main():
    print reduce(lambda arg1,arg2:arg1*arg2,li)

#限制程序入口
if __name__ == "__main__":
    main()

yield

暂时跳出了函数,但是下次可以继续使用,和continue要区分开

#!/usr/bin/env python
# -*- coding: utf-8 -*-
__author__ = ‘EchoRep‘

def func1():
    yield 1
    yield 2
    yield 3

def mrange(arg):
    seed = 0
    while True:
        seed = seed + 1
        if seed > arg:
            return
        else:
            yield seed

#定义一个主函数
def main():
    for i in mrange(10):
        print i

#限制程序入口
if __name__ == "__main__":
    main()
时间: 2024-10-15 20:09:56

2015-11-15 第四天的相关文章

我关注的一周技术动态 2015.11.15

分布式系统实践 1. 一致性哈希算法 http://www.javaranger.com/archives/1781?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io 要点: 一致性hash算法是解决分布式系统数据划分的有效手段, 解决了传统hash算法在机器扩容时需要大量移动数据的问题. 这篇文章对一致性hash算法做了简要的介绍, 如果你还不了解一致性hash算法, 那么请读读这篇文章吧 2. 巧用CAS解决数据一致

【活动报名】欢迎参加”2015.11.15舟山群岛国际马拉松”科技跑团

我们刚刚入驻杭州云栖小镇,云栖小镇就有了一次活动——参加2015舟山群岛国际马拉松.我们作为云栖跑团的开发者代表队,将参加这次活动,欢迎有兴趣的园友报名和我们一起马拉松! 1. 赛事简介 舟山群岛国际马拉松 舟山市是中国首个以海洋经济为主题的国家级新区,近年来基础设施不断改善,空气质量排名一直位列全国三甲,已经具备运作一场优质马拉松赛事的基础条件.在广大IT企业大力支持下,拟谋划举办一场以IT为特色,以“生态·智慧·健康”为主题的马拉松赛,打造“智慧跑”品牌. 这次的科技跑团是国内首个完全由IT

windows API编程第二天2015.11.15

现在在公司加班,但是,不太喜欢现在这份工作,想去跳槽转去C#,但是基础太弱,在努力学习.加油 改天注释一下这个代码,然后去搬(jia)砖(ban)去喽…… 1 #include <windows.h> 2 /* 3 Get System Infomation and Copy to a File 4 */ 5 int main(int argc, TCHAR argv []) 6 { 7 // File Handle 8 HANDLE hFile; 9 DWORD dwWritten; 10

2015.11.15

[译]前端开发者都应知道的 jQuery 小技巧 回到顶部按钮 通过使用 jQuery 中的 animate 和 scrollTop 方法,你无需插件便可创建一个简单地回到顶部动画: 1 // Back to top 2 $('a.top').click(function (e) { 3 e.preventDefault(); 4 $(document.body).animate({scrollTop: 0}, 800); 5 }); 1 <!-- Create an anchor tag --

UloidDWAW 2015.v8.15.1.11236+FluidDRAW1.2油路仿真软件

UloidDWAW 2015.v8.15.1.11236+FluidDRAW1.2油路仿真软件 UloidDWAW 2015.v8.15.1.11236 1DVD油路仿真软件 FluidDRAW1.2(气动回路图设计软件及气路.油路仿真软件,简体中文版 FESTO产品: FESTO-FluidDRAW 4t DC2004.12.20(气动回路图设计软件及气路.油路仿真软件,简体中文版) FESTO-FluidSIM v3.6 Full(气动.液压原理图绘制及气路.油路仿真软件,简体中文版) FE

现代软件工程_团队项目_阿尔法阶段_第三次会议记录_2017.11.15

第三次会议记录 会议地点:科大西区图书馆303 会议时间:2017.11.15 18:30-21:30 参会人员:全部 内容一:制作课堂汇报PPT 1.确定展示内容: 团队介绍 组员介绍 团队介绍 项目综述 灵感来源 产品简述 产品价值 市场分析 精品分析 预期收益 调研结果 效果展示 页面产品大纲 产品页面模型 页面原形网址 场景分析 研发计划 2.确定团队核心价值观 让每个科大都能约到合适的人 3.工作分工: 刘荪傲:ppt架构确定,团队介绍,项目综述 姜博文:市场调研分析.效果展示 夏铭阳

11.15 Daily Scrum

今天是假期回来的第一个周末,也是我们团队的又一次进度汇总总结和调试工作开展,鉴于一周以来大家的工作有了很大的成果,所以,本次召开的会议主旨在于解决一些开发方面的细节问题,达成共识,为日后进一步的功能方面的扩展做一个好的开端,也是前一段工作方案的具体总结.关于老师问到上次的笔记本软件为何会用到数据库,理由很简单,我们就是觉得数据库用起来更方便才选用了它.因为我们的笔记本软件不仅仅是用来简单记忆事件,还有搜索和记忆碎片查找与整理功能,简单的文件存取,并不能保证查找的质量,通过关键词索引,建立概念模型

站立会议----11.15

组名: nice! 组长: 李权组员: 韩媛媛 于淼 刘芳芳 宫丽君 项目名称:约跑(约吧) 时间:2016.11.15 地点:传媒西楼220室 代码地址:Https:  https://git.coding.net/muziliquan/niceGroup.git SSH: [email protected]:muziliquan/niceGroup.git 会议内容: 已完成的内容:登录前后变化(如退出登录将不再显示用户名等信息) 计划完成的内容:1.地图模块的生成,显示当前所在的跑场  2

张珺 2015/07/15 个人文档

姓名 张珺 日期 中蓝公寓蓝芳园D507,2015/07/15 主要工作及心得 今天,我对我们的软件进行了部分的黑盒测试. 遇到的问题 在对软件进行测试的过程中,我发现了我们软件在设计中出现的一些问题,有设计缺陷也要简单的代码错误. 解决方法 对于简单代码错误直接修改,对于设计问题我们通过组内讨论商讨解决办法,再对现有软件进行修改.

2015.11.06 学习Ubuntu下常用命令

2015.11.06 学习Ubuntu下常用命令 1.关闭防火墙:ufw disable 2.开启防火墙:ufw enable 3.防火墙状态:ufw status 4.查看占用的端口:#lsof -i 5.查看某一个端口:#lsof -i:8080  或者是: #netstat -apn|grep 8080————接着:#ps -aux|grep 进程号 6.结束占用端口的进程:#killall 进程名 7.自己写一遍,记得牢!