python第一次练习题
** 从来没有在一天内学习这么多东西,值得纪念(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=x 3的散点图
答:代码如下
#!/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()
运行结果
数据库结果