从来没有在一天内学习这么多东西,值得纪念(Q币果然激发人斗志)
1. print repr(u'蓝鲸') 的运行结果是什么?
答:运行结果为 u'\u84dd\u9cb8'
u’蓝鲸‘表示’蓝鲸‘代表的是一个Unicode编码字符串
repr(x)函数返回x对象的字符串表示
2. 什么是lambda函数?并列举一个使用lambda函数的例子
答:lambda函数就是匿名函数,用法为 lambda 参数:返回值
对于某些简单和只使用一次的函数来说,
使用lambda比定义新函数更加方便
3. Excel操作
将
{
"1":["张三",150,120,100],
"2":["李四",90,99,95],
"3":["王五",60,66,68]
}
写入excel如下所示:
答:代码如下:
#!/usr/bin/env python
# coding=utf-8
from xlwt import *
file = Workbook(encoding='utf-8')
table = file.add_sheet('test')
data = {\
"1":["张三",150,120,100],\
"2":["李四",90,99,95],\
"3":["王五",60,66,68]}
ldata = []
num = [a for a in data]
num.sort()
for x in num:
t = [int(x)]
for a in data[x]:
t.append(a)
ldata.append(t)
for i,p in enumerate(ldata):
for j,q in enumerate(p):
print i,j,q
table.write(i,j,q)
file.save('demo')
运行结果:
生成文件:
表格内容:
4. 简述对Python装饰器的理解
答:装饰器,可以看做是用于修饰函数的工具,而本质上装饰器也是函数,
而且必须是一个形参和返回值都是函数的函数。
下面是一个小例子
def red_hat(f):
print 'red_hat:给你戴个红帽子'
return f
def blue_hat(f):
print 'blue_hat:给你戴个蓝帽子'
return f
@blue_hat #等同于 fun = blue_hat(red_hat(fun))
@red_hat #等同于 fun = red_hat(fun)
def fun():
print 'fun:我要戴帽子'
fun()
######形象点说,可以把fun比作一个人,red_hat给它戴上了一个红帽子,然后blue_hat在红帽子之上又给它戴了一个蓝帽子
通过装饰器很方便的对一些函数添加一些附加功能,而且既不改变函数的原有逻辑结构,
又可以省去很多的重复代码工作
5. 生成100个随机数,保存到Redis非关系型数据库中
答:代码如下
#!/usr/bin/env python
# coding=utf-8
import random
import redis
num = []
for i in range(100):
num.append(random.randint(1,1000))
print num
r = redis.StrictRedis(host = 'localhost',port = 6379, db = 3)
r.set('dssd','ss')
for i,x in enumerate(num):
r.set(i,x)
print '添加成功'
newnum = [r.get(i) for i in range(100)]
print newnum
运行结果
6. 写结果
if 1 in [1,0] == True:
print ‘a’
Else:
Print ‘b’
答:结果 ‘b’
乍一看想着应该是‘a’,敲完发现是‘b’,百思不得解。
发现if (1 in [1,0]) == True 输出与预想相同,于是查看优先级,
一开始想着==的优先级高于in,而[1,0]与True是不同类型,
不同类型对象比较是通过对typename进行比较的,
所以([1,0] == True) 为 False,但1 in True又无法解释
网上查找资料发现A x B y C 会被转化为
(A x B) and (B y C),
所以1 in [1,0] == True --> (1 in [1,0]) and ([1,0] == True)
--> True and False --> False
7. 用Python写一个程序,拉取SVN上的某一个文件,修改后并提交该文件。
答:代码如下
#!/usr/bin/env python
# coding=utf-8
import os
os.system(
'svn co svn://localhost/test \
--username shiyi --password 19960604'
)
name = raw_input('输入修改的文件名:')
name ='test/' + name
file = open(name,'r')
txt = file.readlines()
for i,x in enumerate(txt):
print '%2d>>%s'% (i+1,x),
num = raw_input('输入需要修改的行号:')
num = int(num)
print '>>'+txt[num-1]
txt[num-1] = raw_input('输入新内容:')+'\n'
os.rename(name,'temp')
newfile = open(name,'w')
for x in txt:
newfile.write(x)
newfile.close()
os.remove('temp')
os.system(
'svn commit -m "a" %s \
--username shiyi --password 19960604'%name)
os.system(
'svn ci -m "b" %s \
--username shiyi --password 19960604'%name)
运行结果
8. 用Python画出y=x3的散点图
答:代码如下
#!/usr/bin/env python
# coding=utf-8
import numpy as np
import pylab as pl
node = [(x*0.1, (x*0.1)**3) \
for x in range(-100,100)]
x, y = zip(*node)
pl.plot(x, y, 'o')
pl.show()
运行结果:
9. 用Python爬取知乎热门帖的标题,并存储到MySQL中
答:代码如下
#!/usr/bin/env python
# coding=utf-8
'''
网页源代码是通过手动拷贝到zhihu.txt内
'''
import re
import MySQLdb
file = open('zhihu.txt','r')
htm = file.read()
s = '<a class="question_link"(.*?)/a>'
tlist = re.findall(s, htm, re.S)
s = '>(.*)<'
conn=MySQLdb.connect(
host='localhost',
user='root',
passwd='shiyi',
db='python',
port=3306)
cur = conn.cursor()
i = 1
for x in tlist:
title = re.search(s, x, re.S).group(1)
print 'title%d:%s' % (i,title)
cmd = "insert into zhihu(title)\
values('%s')" % title
cur.execute(cmd)
conn.commit()
conn.close()
运行结果
数据库结果