2015-12-19_11S_03days

计算器作业思路:

循环:递归

将括号中的内容计算出来之后依次递归

练习题1:将列表[11,22,33,44,55,66,77,88,99]大于66的值放入第一个key中,将小于66的值放入字典第二个key中;

#!/usr/bin/env python
# _*_ coding:utf-8 _*_

num_list = [11,22,33,44,55,66,77,88,99]

dict_list = {‘k1‘:[],
             ‘k2‘:[],
}

for item in num_list:
    if item <=60:
        dict_list[‘k1‘].append(item)
    else:
        dict_list[‘k2‘].append(item)

print dict_list

  

练习题2:上题中,如果字典中没有key值如何处理(只有空字典)

#!/usr/bin/env python
# _*_ coding:utf-8 _*_

num_list = [11,22,33,44,55,66,77,88,99]

dict_list ={}

for item in num_list:
    if item <=60:
        if ‘k1‘ in dict_list.keys():
            dict_list[‘k1‘].append(item)
        else:
            dict_list[‘k1‘] = [item,] #统一一下规范,都加逗号
    else:
        if ‘k2‘ in dict_list.keys():
            dict_list[‘k2‘].append(item)
        else:
            dict_list[‘k2‘]=[item,]
print dict_list

  

练习题3:将文本内容alex|123|1

eric|123|1

tony|123|1放入字典中,第一个名字为key

#!/usr/bin/env python
# _*_ coding:utf-8 _*_

f = file(r‘log‘,‘r‘)
line_list = f.readlines()
f.colse()
dic = {}
for line in line_list:
    line = line.strip().split(‘|‘)
    dic[line[0]]=line[1:]
print dic

一、Collections系列

1、collections系列之计数器

>>> import collections
>>> c1=collections.Counter(‘abcd‘)                       #计数器,对象为字符串或列表
>>> c1
Counter({‘a‘: 1, ‘c‘: 1, ‘b‘: 1, ‘d‘: 1})
>>> c1=collections.Counter([11,22,33,11])
>>> c1
Counter({11: 2, 33: 1, 22: 1})

>>> c1=collections.Counter(‘abcd‘)
>>> c1
Counter({‘a‘: 1, ‘c‘: 1, ‘b‘: 1, ‘d‘: 1})
>>> c2=collections.Counter(‘abc‘)
>>> c2
Counter({‘a‘: 1, ‘c‘: 1, ‘b‘: 1})
>>> c1.update(c2)                #元素个数叠加
>>> c1
Counter({‘a‘: 2, ‘c‘: 2, ‘b‘: 2, ‘d‘: 1})

>>> c1.clear()   #清除内容
>>> c1
Counter()

>>> c1
Counter({‘a‘: 1, ‘c‘: 1, ‘b‘: 1, ‘d‘: 1})    #将前n个k,v值当做元组放入列表中
>>> c1.most_common(2)
[(‘a‘, 1), (‘c‘, 1)]

>>> c1.elements()      #类似于xreadlines(),是一个迭代器,只有循环时才可以显示出来
<itertools.chain object at 0x92697cc>

2、collections之有序字典(与字典用法相同)

>>> o1=collections.OrderedDict()    #创建有序字典,区别是内部维护一个列表,列表是有序的
>>> o1
OrderedDict()
>>> o1[‘k1‘]=1
>>> o1
OrderedDict([(‘k1‘, 1)])

3、默认字典(defaultdict):为字典里的value设置默认类型

字典value的默认类型为None,即为

>>> dic = {‘k1‘:None}   #None没有append方法
>>> dic
{‘k1‘: None}

1 >>> import collections
2 >>>
3 >>> dic = collections.defaultdict(list)     #定义字典,并将value值设为list
4 >>> dic[‘k1‘]
5 []
6 >>> dic[‘k1‘].append(1)

4、collections之命名元组----->创建类

一般是:创建类--->使用类创建对象--->使用对象

对于现有的类:直接使用类创建对象--->使用对象

对于元组而言,访问元组对象中的元素,必须使用下标才行,那么如何才能不需要下标来取值呢?

#创建一个扩展的tuple类
>>> Mytuple = collections.namedtuple(‘Mytuple‘,[‘x‘,‘y‘])
>>> new = Mytuple(1,2)  #实例化
>>> new
Mytuple(x=1, y=2)
>>> new.x   #通过该方法访问值
1
>>> new.y
2

5、collections之双向队列(deque)-----线程安全

>>> q = collections.deque() #创建队列
>>> q.append(1)   #将1添加到队列中
>>> q.append(2)
>>> q.append(4)
>>> q
deque([1, 2, 4])
>>> q.pop()  #删除(从右边开始)
4
>>> q.popleft()   #从左边删除
1

6、单向队列(Queue)-----线程安全

>>> import Queue
>>> q=Queue.Queue(10)    #创建队列,放10个元素
>>>
>>> q.put(1)    #往队列中添加数据
>>> q.put(2)
>>> q.put(3)
>>> q.put(4)
>>> q
<Queue.Queue instance at 0xa3cbc8c>

>>> q.get()    #从队列中往出拿数据,相当于pop
1

队列与与栈如何区别:
    队列:FIFO
    栈:弹夹

7、迭代器和生成器原理

>>> xrange(10):创建时不会在内存中创建对象,只有在循环时才会创建

在数据库创建连接池时,为节省资源,用生成器创建。

8、下标式循环以及冒泡算法

如何将a、b的值互换:

>>> a = 123
>>> b = 321
>>>
>>> temp = a
>>> a = b
>>> b = temp
>>> a
321
>>> b
123

下标式循环:

>>> for m in range(len(li)-1):
...     print li[m],
...
22 6 99 11

冒泡算法:

>>> li = [13,22,6,99,11]
>>> for m in range(len(li)-1):
...     for n in range(m,len(li)-1):
...         if li[m] > li[n]:
...             temp = li[m]
...             li[m] = li[n]
...             li[n] =temp
...
>>> li
[6, 13, 22, 99, 11]

9、内置函数

函数的分类:内置函数、自定义函数、导入函数

>>> print vars()   #内置函数,拿到当前模块中的所有变量
{‘temp‘: 22, ‘__builtins__‘: <module ‘__builtin__‘ (built-in)>, ‘m‘: 3, ‘li‘: [6, 13, 22, 99, 11], ‘n‘: 3, ‘tab‘: <module ‘tab‘ from ‘/usr/lib/python2.7/dist-packages/tab.pyc‘>, ‘__name__‘: ‘__main__‘, ‘__package__‘: None, ‘__doc__‘: None}

其中:

__file__:文件路径

__doc__:注释

__name__:被执行的文件被赋值为__main__

内存级别函数:

reload:被reload的模块之前必须被import过,一般在被reload的模块内容改变之后使用;

id

is:内存地址相同

计算级别:

cmp(2,3)

abs()

bool()

divmod(10,3)分页

max()

min()

sum()

pow(2,11):2的11次方

all和any:all()接受一个序列,判断所有值为真,返回真,在输入用户名和密码的时候,一次性输入,可以判断输入的是否有空值;

enumerate

>>> for k,v in enumerate([11,22,33,44,55],1):    #遍历下标和列表,序号从1开始
...     print k,v
...
1 11
2 22
3 33
4 44
5 55

10、函数式编程和面向对象编程

11、函数式编程之发邮件

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr

def email(message):
    msg = MIMEText(message,‘plain‘,‘utf-8‘)

    msg[‘From‘] = formataddr(["Charles",‘[email protected]‘])    #源
    msg[‘To‘] = formataddr(["走人",‘[email protected]‘])  #目标
    msg[‘Subject‘] = "主题"

    server = smtplib.SMTP("smtp.163.com",25)
    server.login("[email protected]","sXXXXXX")
    server.sendmail("[email protected]",[‘[email protected]‘,],msg.as_string())
    server.quit()

if __name__ == ‘__main__‘:
    cpu = 100
    disk = 500
    raw = 50
    for i in range(1):
    if cpu > 90:
            alert=‘CPU有告警‘
            email(alert)
        if disk > 90:
            alert = ‘磁盘有告警‘
            email(alert)
        if raw > 90:
            alert = ‘raw有告警‘
            email(alert)
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr

def email(message,receiver):
    msg = MIMEText(message,‘plain‘,‘utf-8‘)

    msg[‘From‘] = formataddr(["常强强",‘[email protected]‘])
    msg[‘To‘] = formataddr(["走人",‘[email protected]‘])
    msg[‘Subject‘] = "主题"

    server = smtplib.SMTP("smtp.163.com",25)
    server.login("[email protected]","start33333")
    server.sendmail("[email protected]",[receiver,],msg.as_string())    #发送邮件到多个
    server.quit()

li = ["[email protected]","[email protected]"]
for item in li:
    emali("cpu报警",item)

if __name__ == ‘__main__‘:
    cpu = 100
    disk = 500
    raw = 50
    for i in range(1):
    if cpu > 90:
            alert=‘CPU有告警‘
            email(alert)
        if disk > 90:
            alert = ‘磁盘有告警‘
            email(alert)
        if raw > 90:
            alert = ‘raw有告警‘
            email(alert)

函数的返回值:

a、如果函数没有返回值,那么返回值就为None;

b、函数返回值可以复制给某个变量

12、函数的参数

a、普通参数:定义了几个形参,就要传几个实参;

b、默认参数:默认参数放在形参的最后;

c、动态参数:def func(*args):接受多个参数

def func(**kwargs):有两种传值方式

第一种:

>>> func(k1=123)
{‘k1‘: 123}

第二种:

>>> dic = {‘k1‘:123}>>> func(**dic)
{‘k1‘: 123}

函数 def func(*args,**kwargs):可以接受实参为列表和字典

13、文件操作

打开操作:

  r:打开文件,指针在最前面

w:将原来的内容清空掉,然后重写,指针在最前面

a:可读、可写(以追加的方式写),指针在最后

+:只有r+(读写)有意义,指针放在开头,新写入的数据会依次替代原来的数据,没有替代的继续保留;

r+U:在读的时候,将"\r\n"转为"\n",U只能和r一起使用;

>>> obj = open(‘log‘,‘r‘)
>>> obj.read()
‘test123\r\n‘
>>> obj.close()
>>> obj = open(‘log‘,‘r+U‘)
>>> obj.read()
‘test123\n‘

obj.tell():返回文件读写位置的指针;

obj.read():将文件内容读到一个字符串当中;

obj.truncate():从指针指向的位置开始截断数据,保留前面的,丢弃后面的,在r+(读写)的时候用这种方法丢掉原来的数据;

rb/wb/ab:如果是跨平台的话,使用二进制;

操作文件:

f.next()    #一次读一行

>>> seq = ["This is frist line\n","This is second line"]
>>> obj.writelines(seq)    #写入多行
>>> obj.close()

   f.write():一次只写一行

with管理文件操作:

>>> with open(‘log‘,‘r‘) as f:    #打开时候无需关闭
...      f.read()
...
‘This is frist line\nThis is second line‘

利用上述方法操作配置文件:(只有在2.7以上版本才支持)

>>> with open(‘log‘,‘r‘) as obj1, open(‘log1‘,‘w‘) as obj2:
...     for line in obj1:
...         new_line = line.replace(‘This is frist line‘,‘wahaha‘)
...         obj2.write(new_line)
时间: 2024-10-19 18:56:24

2015-12-19_11S_03days的相关文章

2015.12.29~2015.12.30真题回顾!-- HTML5学堂

2015.12.29~2015.12.30真题回顾!-- HTML5学堂 吃饭,能够解决饥饿,提供身体运作机能.练习就像吃饭,强壮自己,提升编程技能,寻求编程技巧的最佳捷径!吃饭不能停,练习同样不能停哦! HTML5真题[2015.12.29]题目 学习JavaScript或应用JavaScript进行脚本开发,“变量”这是必须要学会使用的.什么是变量呢?又什么作用呢?ok,大家稍安勿躁哦,试体验体验这题目<HTML5真题[2015.12.29]题目>与 <HTML5真题[2015.12

#VSTS日志# 2015/12/10 – 终于可以删除工作项了

最近的更新不少,废话少说,直接上干货 定制工作项字段 本周的更新后,所有的用户都可以在vsts上直接给工作项添加字段了,具体内容包括– 添加新字段(日期,字符串,整形,数字)– 字段显示位置配置– 过程模版继承– 过程模版安全性配置 很多人都知道,在vsts在线版上一直缺少工作项定制能力,这次的更新一定让很多人兴奋,但是我们的工作还没有完,后续我们会逐步完成字段下拉菜单,工作流配置,html字段,添加全新的工作项类型等功能.关于本功能的具体内容,请参考以下博客 http://devopshub.

【我的书】Unity Shader的书 — 文件夹(2015.12.21更新)

写在前面 感谢全部点进来看的朋友.没错.我眼下打算写一本关于Unity Shader的书. 出书的目的有以下几个: 总结我接触Unity Shader以来的历程,给其它人一个借鉴.我非常明确学Shader的艰难,在群里也见了非常多人提出的问题. 我认为学习Shader还是一件有规律可循的事情,但问题是中文资料难觅,而大家又不愿意去看英文...这对我有什么优点呢?强迫我对知识进行梳理,对细节问题把握更清楚. 第二个原因你懂的. 关于本书的定位问题: 面向Unity Shader刚開始学习的人,但要

分布式技术一周技术动态 2015.12.27

分布式系统实践 1. Kafka深度解析 http://www.jasongj.com/2015/01/02/Kafka%E6%B7%B1%E5%BA%A6%E8%A7%A3%E6%9E%90/ 要点: 这篇文章深入的讲解了kafka的架构设计, 数据复制算法以及kafka的性能等多个方面, 是理解和学习kafka非常难得的一篇好文章, 推荐给大家. 2. 解密阿里巴巴高可用架构技术——“异地多活” http://mp.weixin.qq.com/s?__biz=MzAwNjQwNzU2NQ==

360实习工作日志2015.10 ~ 2015.12

RE: 焦诚 ~ 日报 - 由 焦 诚 在 5 个月 之前添加 2015-10-131.利用计算平台统计2015-09-28 => 2015-10-11 共14天的spe_num=502306的云查杀日志,1天的结果在10万条-20万+条不等,两周的结果在200万条左右.由于结果数据量较大,暂时无法从计算平台直接下载数据,下载会报内存溢出的错误.2.开始学习mongodb   RE: 焦诚 ~ 日报 - 由 焦 诚 在 5 个月 之前添加 2015-10-141.计算云查杀日志2015-09-2

2015 12

新浪微博:@晓东日语 欢迎关注,超多日语学习资料在微博@晓东日语 2015 年 12 月 N1 级真题 日语 N1 词汇真题(2015 年 12 月) 問題 1_の言葉の読み方として最もよいものを.1?2?3?4から一つ選びなさい. 1決勝の素晴らしい試合に観客は興奮した. 1こうふん 2きょうふん 3 きょうぶん 4こうぶん 2この説は.鈴木氏が 30 年前に初めて唱えた. 1たたえた 2となえた 3かなえた 4うったえた 3この地域における主要な産業の変遷について調べた 1へんさん 2へんさ

2015/12/29 eclipse 设置要点 空间 项目 类 eclipse汉化

开始使用eclipse,双击eclipse.exe文件,启动eclipse.程序会显示一个工作空间的对话框,工作空间用来存放你的项目文件,你可以使用程序默认的,点击确定即可,你也可以重新选择一个文件夹来存放你的文件,那点击浏览,重新指定你的项目文件存放的目录: 10 进入eclipse.打开文件|新建|新建java项目,然后在项目名称一栏填写你的项目名称: 11 创建一个java类:文件菜单下打开“新建”,打开“新建类”,有两个地方需要填写,一是选择源文件夹,就是刚才你创建的hello worl

JavaSciptj高级程序设计 2015/12/28

第三章 基本概念 一.区分大小写 ECMAScript中的一切(变量.函数名和操作符)都区分大小写 二.标识符(变量.函数.属性的名字.函数的参数) (1)第一个字符必须是一个字母.下划线(-)或一个美元符号($) (2)其他字符可以是字母.下划线.美元符号或者数字 (3)采用驼峰大小写格式:第一个字母小写,剩下的每个单词的首字母大写 例如:firstSecond 三.注释 单行注释: // 多行注释: /* * * */ 四.严格模式 为javacript定义了一种不同的解析与执行模型.在严格

2015/12/26 十六、 八 、二 进制转十进制

十六进制41BD 转换十进制4*16^3+1*16^2+11*16^1+13*16^0=16384+256+176+13=16829 十六进制A10C.8 转换十进制10*16^3+1*16^2+0*16^1+12*16^0+8*16^-1=40960+0+16+12+0.5=41228.5 八进制146.1 转换成十进制1*8^2+4*8^1+6*8^0+1*8^-1=64+32+6+0.125=102.125 八进制5312.2 转换成十进制5*8^3+3*8^2+1*8^1+2*8^0+2

[比赛]2015/12/25BNU新生赛

网络同步做了半个小时,然后就拉肚子了……嗯…… A:不解释……5min 1A 1 #include <algorithm> 2 #include <iostream> 3 #include <iomanip> 4 #include <cstring> 5 #include <climits> 6 #include <complex> 7 #include <fstream> 8 #include <cassert&g