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()

运行结果

数据库结果