基础篇2:
一切变量都是数据对象的引用
sys.getrefcount('test') 查看引用计数
变量命名不能以数字开头
编码:ascii、unicode、utf-8
1.阅读str对象的help文档,并解决如下的问题。
1.1.有如下字符串。

python是动态语言

要求如下[请分别写出脚本]:
a=' python是动态语言 '
(1.)去掉该字符串下前面所有的空格。

  1. print a.lstrip()

(2.)去掉该字符串下后面所有的空格。

  1. print a.rstrip()

(3.)去掉该字符串2边的空格。

  1. print a.strip()

1.2有如下字符串

"abc"

(1)请将其全部大写。

  1. b='abc
  2. b.upper

(2)请将其全部小写。

  1. b='ABC'
  2. b.lower()

2 怎么查看变量的类型是什么?

  1. type(a)

基础篇5习题

1 :

  1. info = 'abc'
  2. info[2] = 'd'

结果是什么,为什么会报错呢?
TypeError: 'str' object does not support item assignment
字符串不可变

2 如果要把上面的字符串info里面的c替换成d,要怎么操作呢?

  1. info='abc'
  2. list(info)
  3. a[2]='d'
  4. info=''.join(a)

3 下面2个变量

a = '1'
b = 2

print a + b 的结果是什么,为什么会出现这个结果,如果希望结果是3,要怎么操作?
不同类型不能相加

  1. int(a)+ b

基础篇6习题:
1 字符串:
a = 'abcd'
用2个方法取出字母d

  1. a[3]

a = 'jay'
b = 'python'
用字符串拼接的方法输出:
my name is jay,i love python.
print 'my name is %s,i love %s.' % (a,b)
"".join([a,b])


基础篇7习题:
1:
a = 'pyer'
b = 'apple'
用字典和format方法实现:
my name is pyer, i love apple.

2:打开文件info.txt,并且写入500这个数字。

  1. a=open('info.txt','w')
  2. a.write(500)
  3. a.close()

基础篇8习题:
一.已经字符串 s = "i,am,lilei",请用两种办法取出之间的“am”字符。

  1. s[2:4]
  2. s.split(',')[1]

二.在python中,如何修改字符串?
转成list来修改
用replace修改
三.bool("2012" == 2012) 的结果是什么。

  1. false

四.已知一个文件 test.txt,内容如下:
____________
2012来了。
2012不是世界末日。
2012欢乐多。
_____________

1.请输出其内容。

  1. print open('text.txt').read()

2.请计算该文本的原始长度。

  1. date=open('text.txt').read()
  2. len(date.decode('GBK'))

3.请去除该文本的换行。
4.请替换其中的字符"2012"为"2013"。

  1. print date.replace('','')

5.请取出最中间的长度为5的子串。

6.请取出最后2个字符。

  1. date[-1:-3:-1]

7.请从字符串的最初开始,截断该字符串,使其长度为11.

8.请将{4}中的字符串保存为test1.py文本.

五.请用代码的形式描述python的引用机制。
引用从3开始,引用一次加1,去引用减1
六.已知如下代码

________

a = "中文编程"
b = a
c = a
b2 = a.replace("中","中")
________
1.请给出str对象"中文编程"的引用计数
4
2.请给出str对象"python编程"的引用计数
0
七.已知如下变量
________
a = "字符串拼接1"
b = "字符串拼接2"
________

1.请用四种以上的方式将a与b拼接成字符串c。并指出每一种方法的优劣。
a+b
占位符号
"".join([a,b])
c="{1}{0}".format (a,b)
2.请将a与b拼接成字符串c,并用逗号分隔。

  1. ",".join([a,b])

3.请计算出新拼接出来的字符串长度,并取出其中的第七个字符。

  1. c[7]

八.请阅读string模块,并且,根据string模块的内置方法输出如下几题的答案。

1.包含0-9的数字。
2.所有小写字母。
3.所有标点符号。
4.所有大写字母和小写字母。
5.请使用你认为最好的办法将{1}-{4}点中的字符串拼接成一个字符串。

九.已知字符串
________

a = "i,am,a,boy,in,china"
________

1.假设boy和china是随时可能变换的,例boy可能改成girl或者gay,而china可能会改成别的国家,你会如何将上面的字符串,变为可配置的。
2.请使用2种办法取出其间的字符"boy"和"china"。
3.请找出第一个"i"出现的位置。
4.请找出"china"中的"i"字符在字符串a中的位置。
5.请计算该字符串一共有几个逗号。

十.请将模块string的帮助文档保存为一个文件。


列表习题:

一 下面列表:
a = [1,2,3,4,5,333,11,44]
输出下面的结果:
[4,5,333]
a[3:6]
二 有下面2个列表
a = [1,2,3]
b = [4,5,6]
用2个方法输出下面结果:
[1,2,3,4,5,6]
a.extend(b)
a+b
三 有下面2个列表:
a = [1,99,33,44,55,22]
输出结果:
1:[1,2,99,33,44,55,22,(11,33,54)]

  1. a.insert.()append

2: [1,2,99,33,101,44,55,22]
extend

四:用列表推导式生成100内的大于20的偶数

  1. [x for x in range(20,100) if x%2==0]

列表应用习题:
xrange和range的具体区别:
xrange的用法:
xrange(开始,结束,步长) xrange 它生成一个xrange对象
当我们需要操作一个非常大的数据,而且内存比较吃紧的时候,我们可以用xrange来操作省内存
xrange一般用在循环里面,比如我们只需要操作部分数据的话,而不是返回全部元素来完成操作,推荐用xrange,效率更高

一: 已知:元组 a = (1,2,3) 利用list方法,输出下面的结果:
(1,2,4)

  1. b=list(a) b[2]=4 a=tuple(b)

二: 利用列表推导完成下面习题:
1 输出结果:[1 love python,2 love python,3 love python,.... 10 love python]

  1. ["%s is love python" % x for x in range(1,10)]

2 输出结果:[(0,0),(0,2),(2,0),(2,2)]

  1. [(x,y) for x in range(3) for y in range(3) if x%2==0 if y%2==0]

三:
a = [1,2,3]
b = a[:]
del a
b的值是什么。为什么呢?
[1,2,3]


元组和集合习题:
集合不能有切片操作
set 方法创建集合
基本操作:add、update、remove、
一 元组;a = (1,2,3)
1 有2种方法输出实现下面的结果:
(5,2,3)
2 判断2是否在元组里
二 集合a = set(['a','b','c'])做下面的操作:
1 添加字符串'jay'到集合a里。
a.add('jay')
2 集合b = set(['b','e','f','g']) 用2种方法求集合a 和集合b的并集。
& --交集
| --并集
- --差集


字典习题:
字典类型:{'key':'value'}
key必须为不可变的数据类型:数字,字符串,元组,列表不能做为key
字典是无序的,通过键名来读取内容,是可嵌套的
>>> binfo
{'a': [1, 2, 3], 'b': [4, 5, 6]}
>>> binfo['a'][1]=5
>>> binfo
{'a': [1, 5, 3], 'b': [4, 5, 6]}
已知字典:ainfo = {'ab':'liming','ac':20}
完成下面的操作
1 使用2个方法,输出的结果:
ainfo = {'ab':'liming','ac':20,'sex':'man','age':20}
ainfo['sex']='man'
2 输出结果:['ab','ac']

  1. ainfo.keys()

3 输出结果:['liming',20]

  1. ainfo.values()

4 通过2个方法返回键名ab对应的值。

  1. ainfo.get('ab')
  2. info.keys()[1]

5 通过2个方法删除键名ac对应的值。

  1. del info['age']
  2. info.pop('name')

基础篇13-数据结构习题:
列表a = [11,22,24,29,30,32]
1 把28插入到列表的末端

  1. a.append(28)

2 在元素29后面插入元素57

  1. a.insert(4,57)

3 把元素11修改成6

  1. a[0]=6

3 删除元素32

  1. a.remove(32)

4 对列表从小到大排序

  1. b=list(set(a))

##习题2:
列表b = [1,2,3,4,5]
1 用2种方法输出下面的结果:
[1,2,3,4,5,6,7,8]

  1. b+[6,7,8]
  2. b.extend([6,7,8])

2 用列表的2种方法返回结果:[5,4]

  1. b[-4:-6:-1]
  2. [b[4],b[3]]

3 判断2是否在列表里
2 in b
##习题3:
b = [23,45,22,44,25,66,78]
用列表解析完成下面习题:
1 生成所有奇数组成的列表

  1. [x for x in b if x%2==1]

2 输出结果: ['the content 23','the content 45']

  1. ['The content %d' % x for x in b[0:2]]

3 输出结果: [25, 47, 24, 46, 27, 68, 80]

  1. [x+2 for x in b]

##习题4:
用range方法和列表推导的方法生成列表:
[11,22,33]

  1. range(11,44,11)
  2. [m*11 for m in range(1:4)]

##习题5:
已知元组:a = (1,4,5,6,7)
1 判断元素4是否在元组里
4 in a
2 把元素5修改成8
b=list(a) b[2]=8 a=tuple(b)
##习题6:
已知集合:setinfo = set('acbdfem')和集合finfo = set('sabcdef')完成下面操作:
1 添加字符串对象'abc'到集合setinfo

  1. setinfo.add('abc')

2 删除集合setinfo里面的成员m

  1. setinfo.remove('m')

3 求2个集合的交集和并集

  1. setinfo & finfo
  2. setinfo | finfo

##习题7:
用字典的方式完成下面一个小型的学生管理系统。
1 学生有下面几个属性:姓名,年龄,考试分数包括:语文,数学,英语得分。
比如定义2个同学:
姓名:李明,年龄25,考试分数:语文80,数学75,英语85
姓名:张强,年龄23,考试分数:语文75,数学82,英语78
2 给学生添加一门python课程成绩,李明60分,张强:80分

  1. tongxue1['score']['python']=60
  2. tongxue2['score']['python']=80

3 把张强的数学成绩由82分改成89分

  1. tongxue2['score']['shuxue']=89

4 删除李明的年龄数据

  1. tongxue1.pop('age')

5 对张强同学的课程分数按照从低到高排序输出。

  1. b=tongxue1['score'].values()
  2. b.sort()

6 外部删除学生所在的城市属性,不存在返回字符串 beijing

  1. tongxue1.pop('chengshi',['beijing'])

基础篇18习题:
1. 已知字符串 a = "aAsmr3idd4bgs7Dlsf9eAF",要求如下
1.1 请将a字符串的大写改为小写,小写改为大写。

  1. print a.swapcase()

1.2 请将a字符串的数字取出,并输出成一个新的字符串。

  1. "".join([x for x in a if x.isdigit()])

1.3 请统计a字符串出现的每个字母的出现次数(忽略大小写,a与A是同一个字母),并输出成一个字典。 例 {'a':4,'b':2}

  1. [(x,a.count(x)) for x in set(a.lower())]

1.4 请去除a字符串多次出现的字母,仅留最先出现的一个。例 'abcabb',经过去除后,输出 'abc'

  1. a_list = list(a) #转换成list
  2. set_list = list(set(a_list)) #去重以后再转换回list
  3. set_list.sort(key=a_list.index) #对去重以后的list进行原先的排序
  4. print ''.join(set_list)#拼接成字符串

1.5 请将a字符串反转并输出。例:'abc'的反转是'cba'

  1. print a[::-1]

1.6 去除a字符串内的数字后,请将该字符串里的单词重新排序(a-z),并且重新输出一个排序后的字符 串。(保留大小写,a与A的顺序关系为:A在a前面。例:AaBb)
a = "aAsmr3idd4bgs7Dlsf9eAF"

  1. l = sorted(a)
  2.  
  3. a_upper_list = []
  4. a_lower_list = []
  5.  
  6. for x in l:
  7. if x.isupper():
  8. a_upper_list.append(x)
  9. elif x.islower():
  10. a_lower_list.append(x)
  11. else:
  12. pass
  13.  
  14. for y in a_upper_list:
  15. y_lower = y.lower()
  16. if y_lower in a_lower_list:
  17. a_lower_list.insert(a_lower_list.index(y_lower),y)
  18.  
  19. print ''.join(a_lower_list)

1.7 请判断 'boy'里出现的每一个字母,是否都出现在a字符串里。如果出现,则输出True,否则,则输 出False.
a = "aAsmr3idd4bgs7Dlsf9eAF"
search = 'boy'

  1. u = set(a)
  2. u.update(list(search))
  3. print len(set(a)) == len(u)
  4. a = "aAsmr3idd4bgs7Dlsf9eAF"
  5. print set('boy').issubset(set(a))

1.8 要求如1.7,此时的单词判断,由'boy'改为四个,分别是 'boy','girl','bird','dirty',请判断如上这4个字符串里的每个字母,是否都出现在a字符串里。

  1. a = "aAsmr3idd4bgs7Dlsf9eAF"
  2. search = ['boy','girl','bird','dirty']
  3.  
  4. b = set(a)
  5. for i in search:
  6. b.update(list(i))
  7.  
  8. print len(b) == len(set(a))

##另一个解答:

  1. a = "aAsmr3idd4bgs7Dlsf9eAF"
  2. lst=['boy','girl','bird','dirty']
  3. s=''.join(lst)
  4. print set(s).issubset(set(a))

1.9 输出a字符串出现频率最高的字母

  1. l = ([(x,a.count(x)) for x in set(a)])
  2. l.sort(key = lambda k:k[1],reverse=True)
  3. print l[0][0]

2.在python命令行里,输入import this 以后出现的文档,统计该文档中,"be" "is" "than" 的出现次数。

  1. import os
  2. m = os.popen('python -m this').read()
  3. m = m.replace('\n','')
  4. l = m.split(' ')
  5. print [(x,l.count(x)) for x in ['be','is','than']]

3.一文件的字节数为 102324123499123,请计算该文件按照kb与mb计算得到的大小。

  1. size = 102324123499123
  2.  
  3. print '%s kb'%(size >> 10)
  4. print '%s mb'% (size >> 20)

4.已知 a = [1,2,3,6,8,9,10,14,17],请将该list转换为字符串,例如 '123689101417'.

  1. a = [1,2,3,6,8,9,10,14,17]
  2.  
  3. print str(a)[1:-1].replace(', ','')

python 语句1.1:
print重定向>>

  1. f=open('aa.txt','w')
  2. print >>f,'hahahahaha'
  3. f.close()

进阶承上启下:
一:安装使用virtualenv,成功以后截个图。

二:把基础篇所学的:字符串,列表,元组,字典,集合。
从下面几个方面进行比较和总结:
1 是否支持边界检查
2 索引方法特点
3 哪些支持迭代协议
4 元素访问的特点,是顺序的还是无序的
列表元组有序,字典无序
5 哪些是可变和哪些是不可变的
元组不可变、字符串不可变 int不可变
6 哪些支持多层嵌套

三:通过基础篇的学习,说出你最喜欢python的哪一点,为什么?


函数第一节:
习题:
1.定义一个方法 func,该func可以引入任意多的整型参数,结果返回其中最大与最小的值。

  1. def num(*num):
  2. #遍历参数列表,判断参数类型是否为整形
  3. for i in num:
  4. if not isinstance(i,int):
  5. return '参数错误,参数必须为整数'
  6. return max(num),min(num)

2.定义一个方法func,该func可以引入任意多的字符串参数,结果返回(长度)最长的字符串。

  1. def fun2(*num2):
  2. b=[]
  3. for i in num2:
  4. if isinstance(i,str):
  5. b.append(i)
  6. else:print "xx"
  7. print "max string is %s" % max(b, key=lambda x:len(x))

3.定义一个方法get_doc(module),module参数为该脚本中导入或定义的模块对象,该函数返回module的帮助文档。

  1. def get_doc(modu):
  2. print modu.__doc__

4.定义一个方法get_text(f),f参数为任意一个文件的磁盘路径,该函数返回f文件的内容。
>>> def get_text(f):
... a=open(f)
... return a.read()

5.定义一个方法get_dir(folder),folder参数为任意一个文件夹,该函数返回folder文件夹的文件列表。提示(可以了解python的glob模块)

  1. import glob
  2. def get_dir(d):
  3. for i in glob.glob(d+'\*'):
  4. return i

函数第二节:
习题:
1 定义一个方法get_num(num),num参数是列表类型,判断列表里面的元素为数字类型。其他类型则报错,并且返回一个偶数列表:(注:列表里面的元素为偶数)。

  1. def get_num(num):
  2. b=[]
  3. for i in num:
  4. if isinstance(i,int):
  5. b.append(i)
  6. return [x for x in b if x%2==0]
  7.  
  8. print get_num([1,3,5,6,7,4,3,2])

2 定义一个方法get_page(url),url参数是需要获取网页内容的网址,返回网页的内容。提示(可以了解python的urllib模块)。

  1. def get_page(url):
  2. if not (url.startswitch('http://')) or url.startswitch('https://'):
  3. return u'url地址不对'
  4. date=urllib2.urlopen(url)
  5. return date.read()
  6. print get_page('http://www.baidu.com')

3 定义一个方法 func,该func引入任意多的列表参数,返回所有列表中最大的那个元素。

  1. def func(num):
  2. return max(num)
  3. print func([1,3,5,6,7,7,3])

4 定义一个方法get_dir(f),f参数为任意一个磁盘路径,该函数返回路径下的所有文件夹组成的列表,如果没有文件夹则返回"Not dir"。

  1. def get_dir(f):
  2. if os.path.exists(f):
  3. return glob.glob(f+'\*')
  4. else:
  5. print "Not dir"
  6.  
  7. print get_dir("f:\\")

注明:吸取上次作业遇到的问题,要求写的函数逻辑清楚,并且考虑一些特殊的情况处理,能做断言的尽量用断言。


函数第三节:
习题:
1 定义一个方法get_fundoc(func),func参数为任意一个函数对象,返回该函数对象的描述文档,如果该函数没有描述文档,则返回"not found"

2 定义一个方法get_cjsum(),求1-100范围内的所有整数的平方和。返回结果为整数类型。

3 定义一个方法list_info(list), 参数list为列表对象,怎么保证在函数里对列表list进行一些相关的操作,不会影响到原来列表的元素值,比如:

a = [1,2,3]

def list_info(list):
'''要对list进行相关操作,不能直接只写一句return[1,2,5],这样就没意义了'''

print list_info(a):返回结果:[1,2,5]

print a 输出结果:[1,2,3]


函数第四节:
1 用lambda和filter完成下面功能:输出一个列表,列表里面包括:1-100内的所有偶数。(提示:可以用filter,lambda)

  1. filter(lambda x:x%2==0,range(1,100))

2 用位置匹配,关键字匹配,收集匹配(元组收集,字典收集)分别写4个函数,完成功能;
传递3个列表参数:
[1,2,3],[1,5,65],[33,445,22]
返回这3个列表中元素最大的那个,结果是:445

  1. def fun1(list1,list2,list3):
  2. c=list1+list2+list3
  3. return max(c)
  4.  
  5. def fun2(list1=[],list2=[],list3=[]):
  6. c=list1+list2+list3
  7. return max(c)
  8.  
  9. a=[]
  10. def fun3(*kargs):
  11. for i in kargs:
  12. a.extend(i)
  13. print max(a)
  14.  
  15. def fun4(**kwargs):
  16. print kwargs.values()
  17. for key in kwargs:
  18. b.extend(kwargs[key])
  19. print max(b)

3 递归函数解释,用自己的话说明这个递归函数的工作流程。

  1. def func1(i):
  2. if i<100:
  3. return i + func1(i+1)
  4. return i
  5. print func1(0)

函数周末习题:
#coding=utf-8
'''
1.定义一个func(name),该函数效果如下。
assert func("lilei") = "Lilei"
assert func("hanmeimei") = "Hanmeimei"
assert func("Hanmeimei") = "Hanmeimei"
'''
"""

  1. def func(name):
  2. return name.capitalize()

2.定义一个func(name,callback=None),效果如下。
assert func("lilei") == "Lilei"
assert func("LILEI",callback=string.lower) == "lilei"
assert func("lilei",callback=string.upper) == "LILEI"

  1. def func2(name,callback=None):
  2. if callback=='string.lower':
  3. return name.lower()
  4. elif callback=="string.upper":
  5. return name.upper()
  6. else:
  7. return name.capitalize()

3.定义一个func(*kargs),效果如下。
l = func(1,2,3,4,5)
for i in l:
print i,
#输出 1 2 3 4 5
l = func(5,3,4,5,6)
for i in l:
print i
#输出 5 3 4 5 6
"""
def func3(*kargs):
return kargs
"""
4.定义一个func(*kargs),该函数效果如下。

assert func(222,1111,'xixi','hahahah') == "xixi"
assert func(7,'name','dasere') == 'name'
assert func(1,2,3,4) == None

  1. def shortstr(*kargs):
  2. lis = filter(lambda x:isinstance(x,str),kargs)
  3. len_lis = [len(x) for x in lis]
  4. if len_lis:
  5. min_index = min(len_lis)
  6. return lis[len_lis.index(min_index)]
  7. return None

5.定义一个func(name=None,**kargs),该函数效果如下。
assert func(“lilei”) == "lilei"
assert func("lilei",years=4) == "lilei,years:4"
assert func("lilei",years=10,body_weight=20) == "lilei,years:4,body_weight:20"

  1. def func4(name=None,**kwargs):
  2. data=[]
  3. for x,y in kwargs.items():
  4. data.extend([',',str(x),":",str(y)])
  5.  
  6. info="".join(data)
  7. return(name,info)

面向对像第一节,习题:
一:定义一个学生类。有下面的类属性:
1 姓名
2 年龄
3 成绩(语文,数学,英语)[每课成绩的类型为整数]
类方法:
1 获取学生的姓名:get_name() 返回类型:str
2 获取学生的年龄:get_age() 返回类型:int
3 返回3门科目中最高的分数。get_course() 返回类型:int
写好类以后,可以定义2个同学测试下:
zm = student('zhangming',20,[69,88,100])
返回结果:
zhangming
20
100
lq = student('liqiang',23,[82,60,99])
返回结果:
liqiang
23
99

  1. class Student(object):
  2. def __init__(self,name,age,*num):
  3. self.name=name
  4. self.age=age
  5. self.num=num
  6.  
  7. def get_name(self):
  8. return self.name
  9.  
  10. def get_age(self):
  11. return self.age
  12.  
  13. def get_score(self):
  14. b=self.num
  15. print max(b)
  16. return max(b)

二:定义一个字典类:dictclass。完成下面的功能:
dict = dictclass({你需要操作的字典对象})
1 删除某个key
del_dict(key)
2 判断某个键是否在字典里,如果在返回键对应的值,不存在则返回"not found"
get_dict(key)
3 返回键组成的列表:返回类型;(list)
get_key()
4 合并字典,并且返回合并后字典的values组成的列表。返回类型:(list)
update_dict({要合并的字典})

  1. class dictClass(object):
  2. def __init__(self,num):
  3. self.num=num
  4. print num
  5.  
  6. def del_dict(self,key):
  7. self.key=key
  8. del self.num[self.key]
  9.  
  10. def get_dict(self,key):
  11. self.key=key
  12. if self.num.has_key(self.key):
  13. return self.num[self.key]
  14. else:
  15. return "Not found"
  16.  
  17. def get_key(self):
  18. return self.num.keys()
  19.  
  20. def update_dict(self,dict):
  21. self.dict=dict
  22. self.num.update(dict)
  23.  
  24. a=dictClass({'qq':22,'yy':44})
  25. print a.get_key()
  26. print a.get_dict('qq')
  27. print a.get_dict('')

面向对像第二节,习题:
定义一个列表的操作类:Listinfo
包括的方法:
1 列表元素添加: add_key(keyname) [keyname:字符串或者整数类型]
2 列表元素取值:get_key(num) [num:整数类型]
3 列表合并:update_list(list) [list:列表类型]
4 删除并且返回最后一个元素:del_key()
list_info = Listinfo([44,222,111,333,454,'sss','333'])

  1. class ListInfo(object):
  2. def __init__(self,list_a):
  3. self.list_a=list_a
  4.  
  5. def add_key(self,keyname):
  6. if not isinstance(keyname,int) or not isinstance(keyname.str):
  7. return "Input must str and int "
  8. self.list_a.append(keyname)
  9. return self.list_a
  10.  
  11. def get_key(self,num):
  12. if not isinstance(num,int) or not num<0:
  13. return "num error"
  14. return self.list_a[num]
  15.  
  16. def update_list(self,list_b):
  17. if not isinstance(list_b,list):
  18. return 'must be a list'
  19. return self.list_a.extend(list_b)
  20.  
  21. def def_key(self):
  22. return self.list_a.pop()
  23.  
  24. list_info = ListInfo([44,222,111,333,454,'sss',''])
  25. print list_info.def_key()

定义一个集合的操作类:Setinfo
包括的方法:
1 集合元素添加: add_setinfo(keyname) [keyname:字符串或者整数类型]
2 集合的交集:get_intersection(unioninfo) [unioninfo :集合类型]
3 集合的并集: get_union(unioninfo)[unioninfo :集合类型]
4 集合的差集:del_difference(unioninfo) [unioninfo :集合类型]
set_info = Setinfo(你要操作的集合)

  1. class Setinfo(object):
  2. def __init__(self,set_list):
  3. self.set_list=set_list
  4.  
  5. def add_setinf(self,keyname):
  6. if not isinstance(keyname,str) or not isinstance(keyname,int):
  7. return "Errot"
  8. return self.set_list.add(keyname)
  9.  
  10. def get_intersection(self,unioninfo):
  11. if not isinstance(unioninfo,set):
  12. return 'Error'
  13. return self.set_list & unioninfo
  14.  
  15. def del_difference(self,unioninfo):
  16. if not isinstance(unioninfo,set):
  17. return "Eroor"
  18. return self.set_list - unioninfo

面向对像第三节,习题:
题目一: 写一个网页数据操作类。完成下面的功能:
提示:需要用到urllib模块
get_httpcode()获取网页的状态码,返回结果例如:200,301,404等 类型为int
get_htmlcontent() 获取网页的内容。返回类型:str
get_linknum()计算网页的链接数目。

  1. import re
  2. import urllib
  3. class get_url(object):
  4. def __init__(self,url):
  5. self.url=url
  6. print self.url
  7. if not self.url.startswith("http:") or self.url.startswith('https:'):
  8. print 'input url error'
  9. exit(-1)
  10. self.new=urllib.urlopen(self.url)
  11.  
  12. def get_httpcode(self):
  13. httpcode=self.new.getcode()
  14. if httpcode ==200:
  15. return 'Return code is 200,OK'
  16. elif httpcode==301:
  17. return ""
  18. elif httpcode==404:
  19. return 'not found'
  20. else:return 'dont know code'
  21.  
  22. def get_htmlcontent(self):
  23. return self.new.read()
  24.  
  25. def get_linknum(self):
  26. data=self.new.read()
  27. cc=re.findall('href="(http:.*?)"',data)
  28. return len(cc)
  29.  
  30. baidu=get_url('http://ww.baidu.com')
  31. print baidu.get_linknum()

题目二:

  1. class SchoolMember:
  2. '''Represents any school member.'''
  3. def __init__(self, name, age):
  4. self.name = name
  5. self.age = age
  6. print '(Initialized SchoolMember: %s)' % self.name
  7.  
  8. def tell(self):
  9. '''Tell my details.'''
  10. print 'Name:"%s" Age:"%s"' % (self.name, self.age),
  11.  
  12. class Teacher(SchoolMember):
  13. '''Represents a teacher.'''
  14. def __init__(self, name, age, salary):
  15. SchoolMember.__init__(self, name, age)
  16. self.salary = salary
  17. print '(Initialized Teacher: %s)' % self.name
  18.  
  19. def tell(self):
  20. print 'Salary: "%d"' % self.salary
  21.  
  22. class Student(SchoolMember):
  23. '''Represents a student.'''
  24. def __init__(self, name, age, marks):
  25. SchoolMember.__init__(self, name, age)
  26. self.marks = marks
  27. print '(Initialized Student: %s)' % self.name
  28.  
  29. def tell(self):
  30. print 'Marks: "%d"' % self.marks
  31. t = Teacher('Mrs. Shrividya', 40, 30000)
  32. s = Student('Swaroop', 22, 75)
  33.  
  34. members = [t, s]
  35. for member in members:
  36. member.tell()

体会下这段代码,把结果的执行流程用自己的话写下。


模块第一节:
导入模块两种方式:
import 模块名
from 模块名 import 方法
from 模块名 import all

包的创建
方法一:
1、创建一个文件夹,包后再新建一个__init__.py文件,再次可以创建自己的方法
2、引用
import 文件夹.方法 as 方法
print 方法.方法()
方法二:
1、创建一个文件夹,包后再新建一个__init__.py文件,再次可以创建自己的方法
2、from 文件夹 import 方法函数

  1. import 路径
  2. import sys
  3. sys.path.append('/tmp/aa.py')

模块第二节:
常用模块介绍:
urllib
urllib2
datetime time
os
pickle
bsddb -数据库
logging


习题:
习题一:
1.1 用time模块获取当前的时间戳.

  1. import time
  2. time.strftime("%Y%m%d %H:%M:%S")

1.2 用datetime获取当前的日期,例如:2013-03-29

  1. from datetime import date
  2. print date.today()

1.3 用datetime返回一个月前的日期:比如今天是2013-3-29 一个月前的话:2013-02-27

习题二:
1 用os模块的方法完成ping www.baidu.com 操作。

  1. import subprocess
  2. subprocess.call('ping www.baidu.com',shell=True)

2 定义一个函数kouzhang(dirpwd),用os模块的相关方法,返回一个列表,列表包括:dirpwd路径下所有文件不重复的扩展名,如果有2个".py"的扩展名,则返回一个".py"。

  1. import os
  2. def kouzhang(dirpwd)
  3. c=[]
  4. dirpwd=raw_input('please input your dir:')
  5. if not os.path.isdir(dirpwd):
  6. return "Please input a dir"
  7. for i in os.listdir(dirpwd):
  8. if not os.path.isdir(dirpwd+i):
  9. c.append(i.split('.')[-1])
  10. return list(set(c))

习题三:
定义一个函数xulie(dirname,info) 参数:dirname:路径名,info:需要序列化的数据,功能:将info数据序列化存储到dirname路径下随机的文件里。
pickle json

  1. import pickle,random
  2. def xulie(dirname,info):
  3. if not os.path.exists(dirname):
  4. return 'Not found!'
  5. a = pickle.dumps(info)
  6. filename = ''
  7. for i in range(10):
  8. filename=filename+random.choice('abcedfghijklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ1234567890')
  9. filepath = os.path.join(dirname,filename)
  10. f = open(filepath,'a+')
  11. f.write(a)
  12. f.close()
  13. a=[1,2,3,4,5,6,7]
  14. xulie('C:\Users\Administrator\Desktop',a)

异常1.1
习题:
1 定义一个函数func(filename) filename:文件的路径,函数功能:打开文件,并且返回文件内容,最后关闭,用异常来处理可能发生的错误。

  1. #coding:utf-8
  2. def open_file(filename):
  3. try:
  4. f=open(filename)
  5. return f.read()
  6. except IOError:
  7. return "Open file Error"
  8. finally:
  9. if 'data' in locals():
  10. f.close()
  11.  
  12. print open_file('ip.txt')

2 定义一个函数func(urllist) urllist:为URL的列表,例如:['http://xx.com','http://www.xx.com','http://www.xxx.com'...]
函数功能:要求依次打开url,打印url对应的内容,如果有的url打不开,则把url记录到日志文件里,并且跳过继续访问下个url。

  1. def get_url(url_list):
  2. for url in url_list:
  3. try:
  4. print url
  5. date=urllib.urlopen(url)
  6. #return date.read()
  7. print date.read()
  8. except:
  9. file_txt=open('error.txt','a+')
  10. file_txt.write(str(date.getcode())+'Error\n')
  11. return 'Error'
  12.  
  13. print get_url(['http://www.baidu.com','http://www.qq.com','http://www.xxx.com','www.qq.com'])

3 定义一个函数func(domainlist) domainlist:为域名列表,例如:['xx.com','www.xx.com','www.xxx.com'...]
函数功能:要求依次ping 域名,如果ping 域名返回结果为:request time out,则把域名记录到日志文件里,并且跳过继续ping下个域名。(提示用os模块的相关方法)


异常处理1.3习题:

一 编写with操作类Fileinfo(),定义__enter__和__exit__方法。完成功能:

1.1 在__enter__方法里打开Fileinfo(filename),并且返回filename对应的内容。如果文件不存在等情况,需要捕获异常。

1.2 在__enter__方法里记录文件打开的当前日期和文件名。并且把记录的信息保持为log.txt。内容格式:"2014-4-5 xxx.txt"

二:用异常方法,处理下面需求:

info = ['http://xxx.com','http:///xxx.com','http://xxxx.cm'....]任意多的网址

2.1 定义一个方法get_page(listindex) listindex为下标的索引,类型为整数。 函数调用:任意输入一个整数,返回列表下标对应URL的内容,用try except 分别捕获列表下标越界和url 404 not found 的情况。

2.2 用logging模块把404的url,记录到当前目录下的urlog.txt。urlog.txt的格式为:2013-04-05 15:50:03,625 ERROR http://wwwx.com 404 not foud、

三:定义一个方法get_urlcontent(url)。返回url对应内容。

要求:

1自己定义一个异常类,捕获URL格式不正确的情况,并且用logging模块记录错误信息。

2 用内置的异常对象捕获url 404 not found的情况。并且print 'url is not found'


模块:
习题一:
1.1 用time模块获取当前的时间戳.

  1. time.asctime()

1.2 用datetime获取当前的日期,例如:2013-03-29
1.3 用datetime返回一个月前的日期:比如今天是2013-3-29 一个月前的话:2013-02-27

习题二:
1 用os模块的方法完成ping www.baidu.com 操作。
2 定义一个函数kouzhang(dirpwd),用os模块的相关方法,返回一个列表,列表包括:dirpwd路径下所有文件不重复的扩展名,如果有2个".py"的扩展名,则返回一个".py"。

习题三:
定义一个函数xulie(dirname,info) 参数:dirname:路径名,info:需要序列化的数据,功能:将info数据序列化存储到dirname路径下随机的文件里。

Python老王视频习题答案的更多相关文章

  1. python之路:变量与变量基本操作(老王版)

    python开发之路:变量与变量基本操作 你是一个师范大学的优秀毕业生,现在在某某小学工作. 你想:判作业真的很累,隔壁老王现在天天玩<蓝月传奇>,银行里存满了钱.唉,每节课1个小时,每个 ...

  2. 在昨天夜黑风高的晚上,我偷了隔壁老王的Python入门课件,由浅入深堪称完美!

    隔壁老王是一个资深码农,就业教育事业的秃顶之才昨天我下楼打酱油,看他迎面走来,满目春光我好奇的问道:老王,有什么好事,隔壁小花叫你上门了吗?老王:秘密!!我心想:哎呦~不错啊半晚之时,连猫狗都睡着了, ...

  3. 老王Python培训视频教程(价值500元)【基础进阶项目篇 – 完整版】

    老王Python培训视频教程(价值500元)[基础进阶项目篇 – 完整版] 教学大纲python基础篇1-25课时1.虚拟机安装ubuntu开发环境,第一个程序:hello python! (配置开发 ...

  4. python开发之路:python数据类型(老王版)

    python开发之路:python数据类型 你辞职当了某类似微博的社交网站的底层python开发主管,官还算高. 一次老板让你编写一个登陆的程序.咔嚓,编出来了.执行一看,我的妈,报错? 这次你又让媳 ...

  5. 跟着老王学Python

    亲爱的朋友:     欢迎你!很高兴能在这里见到你,你能来到这里说明你真的很喜欢python,很想把python给学好!我觉的你很幸运,开始我学python的时候比较少资料,学起来也比较头疼,现在随着 ...

  6. 315道python面试题(参考答案)

    第一部分 Python基础篇 1:为什么学习Python 家里有在这个IT圈子里面,也想让我接触这个圈子,然后给我建议学的Python, 然后自己通过百度和向有学过Python的同学了解了Python ...

  7. Python面试题集合带答案

    目录 Python基础篇 1:为什么学习Python 2:通过什么途径学习Python 3:谈谈对Python和其他语言的区别 Python的优势: 4:简述解释型和编译型编程语言 5:Python的 ...

  8. python面试题300道答案参考1

    提示 自己整合的答案,虽有百家之所长,仍很局限,如有需要改进的地方,或者有更好的答案,欢迎提出! [合理利用 Ctrl+F 提高查找效率] 文章来源    https://www.cnblogs.co ...

  9. javascript 老王开车去东北

    [Decode error - output not utf-8] 魔女 飞 奔驰 去 华南 [Finished in 1.1s] 需要变化的对象进行隔离.正是编程的乐趣之处 /** * by Jac ...

随机推荐

  1. java- Servlet-session

    Servlet 相关:http://blog.csdn.net/ggGavin/article/category/2134213 Servlet——Session(1)之基础知识 Servlet——S ...

  2. js匹配浏览器类型,收藏下

    <script type="text/javascript">/** 智能机浏览器版本信息:**/  varbrowser={    versions:function ...

  3. 【这特么是个坑。。。】iOS 10.3下解决Charles抓包ssl证书信任问题

    针对近期iOS 10.3以上的系统charles抓https信任问题 前言 最近iPhone系统更新到ios 10.3后,在公司里用Charles抓包竟然出现了一些问题,https的请求都会失败,提示 ...

  4. Hibernate关系映射 一对一双向外键关联@OneToOne Annotation方式 双向关联和单向关联的区别

    首先还是来构造一个实际应用的场景,比如实体类车辆(Car),它具有以下属性:Id,品牌(brand),车牌(lisencePlate):实体类车牌(LisencePlate),它具有以下属性:Id,号 ...

  5. map正序、逆序排序

    一.按 key 排序 1.map顺序排序(小的在前,大的在后): map<float,string,less<float> > m_aSort;//已float从小到大排序 2 ...

  6. 转载:【原译】Erlang构建和匹配二进制数据(Efficiency Guide)

    转自:http://www.cnblogs.com/futuredo/archive/2012/10/19/2727204.html Constructing and matching binarie ...

  7. php纯原生实现数组二分法

    代码如下 $arr = [1,3,5,7,9];//$arr = range(1,10000);var_dump(find($arr, 2)); function find(array $arr, $ ...

  8. 创建并调用 DLL(1)

    //通过 DLL Wizard 建立: library TestDLL; uses   SysUtils,   Classes,   Dialogs; {$R *.res} //建立过程 proced ...

  9. nginx配置技巧汇总

    https://segmentfault.com/a/1190000000437323

  10. Python 插件安装

    0.下载Python包文件后,解压缩: 1.cd 到 插件解压缩目录,里面有setup.py的文件: 2.定位到当前目录: 3.执行:python setup.py install; 4.结束安装. ...