python核心编程 9章练习题
2013-10-08 23:47
459 查看
下面是自己做的python核心编程第9章的部分练习题答案,windows python2.7下编译通过,后续继续补充其它未完成题目,有不正确的地方欢迎指正。
9-9附加题:
9-9:
9-8:
9-7:
9-6:
9-4:
9-9附加题:
#-*-coding:utf-8-*- import os import sys import glob import re import traceback def print_doc(): # 获取python标准库下的所有py文件 py_exe_dir = sys.prefix py_path = os.path.join(py_exe_dir, 'Lib', '*.py') py_list = glob.glob(py_path) cls_pattern = r"""\s*(class\s+\w+\([\w,\s]+\):)\s+['"]{3}([\s\S]*?)['"]{3}""" func_pattern = r"""\s*(def\s+\w+\([\w,\s]+\):)\s+['"]{3}([\s\S]*?)['"]{3}""" #打开记录类和函数文档的文件 DOC_FILE_PATH = './module_doc.txt' doc_file = open(DOC_FILE_PATH, 'wb') for py_file in py_list: try: #打开并读取py文件的内容 f = open(py_file, 'rb') file_content = f.read() f.close() begin_txt = "%s %s module's class and function document%s\n" \ %('='*5, py_file,'='*5) doc_file.write(begin_txt) #获取并打印模块中类的文档 split_cls_txt = '-'*20 + 'class doc' + '-'*20 + '\n' doc_file.write(split_cls_txt) cls_result = re.findall(cls_pattern, file_content) for cls_doc in cls_result: #记录类名称 doc_file.write(cls_doc[0] + '\n') #记录类文档 doc_file.write(cls_doc[1].decode('utf-8').strip() + '\n') #获取并打印模块中函数的文档 split_func_txt = '-'*20 + 'function doc' + '-'*20 doc_file.write(split_func_txt + '\n') func_result = re.findall(func_pattern, file_content) for func_doc in func_result: #记录函数名称 doc_file.write(func_doc[0] + '\n') #记录函数文档 doc_file.write(func_doc[1].decode('utf-8').strip()) doc_file.flush() except: print traceback.format_exc() doc_file.close() if __name__ == '__main__': print_doc()
9-9:
#coding:utf-8 import os import sys import glob import re import traceback def print_doc(): # 获取python标准库下的.py文件 py_exe_dir = sys.prefix py_path = os.path.join(py_exe_dir, 'Lib', '*.py') py_list = glob.glob(py_path) flag = r'"""' #文档字符串标记 module_doc = {} #用于保存存在文档字符串的module module_empty_doc = {} #用于保存文档字符串为空的module try: for py_file in py_list: f = open(py_file, 'rb') file_content = f.read() beg_pos = file_content.find(flag) if beg_pos != -1: end_pos = file_content.find(flag, beg_pos + 3) doc = file_content[beg_pos+3:end_pos] module_doc[os.path.basename(py_file)] = doc else: doc = '' module_empty_doc[os.path.basename(py_file)] = doc except: print traceback.print_exc() for key in module_doc: print "module %s doc is: " %key print module_doc[key] print '-'*20 + 'no doc module ' + '-'*20 for key in module_empty_doc: print key if __name__ == '__main__': print_doc()
9-8:
#coding:utf-8 import time def parse_module(): while 1: module_name_str = raw_input("Please input module name,if exit input 'q':") try: # 输入字母q退出 if module_name_str == 'q': break #获取module的所有属性 module_name = __import__(module_name_str) attr_list = dir(module_name) for attr in attr_list: print 'Name:%s, Type:%s, Value:%s' %(attr, type(getattr(module_name, attr)), getattr(module_name, attr)) except NameError, e: print e except ImportError, e: print e except: pass if __name__ == '__main__': parse_module()
9-7:
#coding:utf-8 import Queue def ini_parser(file_name): with open(file_name, 'rb') as f: lines = (line.strip() for line in f) q = Queue.Queue() sec_dict = {} for line in lines: # 空行和注释行不处理,其它的行放入队列 if line == '' or line[0] == ';': pass else: q.put(line) while not q.empty(): line = q.get() if line[0] == '[' and line[-1] == ']': # 获取ini文件中的section sec_name = line[1:-1] sec_dict[sec_name] = {} else: # 获取section下的key和value item = line.split('=', 2) if len(item) == 2: key, value = item[0], item[1] sec_dict[sec_name][key.strip()] = value.strip() return sec_dict if __name__ == '__main__': sec_dict = ini_parser('t4.ini') print sec_dict
9-6:
#coding:utf-8 import traceback def cmp_file(file1, file2): try: f1 = open(file1, 'rb') f2 = open(file2, 'rb') line_num = 0 # 首先一行行读取文件1,然后再一行行读取文件2进行比较 for line1 in f1: line_num += 1 line2 = f2.readline() len1 = len(line1) len2 = len(line2) if len1 == 0 and len2 == 0: break elif len1 == 0 or len2 == 0: #其中一行为空,则第一个字符即不相同 print line_num, 0 elif len1 < len2: for i in range(len1): if line1[i] == line2[i]: continue else: print line_num, i+1 #打印行号,列号,列号从0开始,所以加1 i += 1 #移动到下一个字符 print line_num, i+1 #打印行号,列号,列号从0开始,所以加1 elif len1 == len2: for i in range(len1): if line1[i] == line2[i]: continue else: print line_num, i+1' elif len1 > len2: for i in range(len2): if line1[i] == line2[i]: continue else: print line_num, i+1 return None i += 1 print line_num, i+1 except IOError: traceback.print_exc() if __name__ == '__main__': cmp_file('t2.txt', 't3.txt')
9-4:
#coding:utf-8 import traceback def cmp_file(file1, file2): try: f1 = open(file1, 'rb') f2 = open(file2, 'rb') line_num = 0 # 首先一行行读取文件1,然后再一行行读取文件2进行比较 for line1 in f1: line_num += 1 line2 = f2.readline() len1 = len(line1) len2 = len(line2) if len1 == 0 and len2 == 0: break elif len1 == 0 or len2 == 0: #其中一行为空,则第一个字符即不相同 print line_num, 0 elif len1 < len2: for i in range(len1): if line1[i] == line2[i]: continue else: print line_num, i+1 #打印行号,列号,列号从0开始,所以加1 i += 1 #移动到下一个字符 print line_num, i+1 #打印行号,列号,列号从0开始,所以加1 elif len1 == len2: for i in range(len1): if line1[i] == line2[i]: continue else: print line_num, i+1' elif len1 > len2: for i in range(len2): if line1[i] == line2[i]: continue else: print line_num, i+1 return None i += 1 print line_num, i+1 except IOError: traceback.print_exc() if __name__ == '__main__': cmp_file('t2.txt', 't3.txt')
相关文章推荐
- Python 核心编程 第八章 练习题
- python核心编程习题5-9章
- python 核心编程第九章练习题
- python 核心编程 练习题
- python核心编程第六章练习题答案 (2,3,5,6,7,8,12,13,14,16)
- Python 核心编程 课后练习题(第六章)
- Python核心编程中的一个游戏练习题,石头剪刀布
- python 核心编程 第二版 第二章 练习题
- python 核心编程 课后练习题(第五章)
- 【python核心编程]】第五章练习题
- python核心编程,第五章练习题
- Python 核心编程第七章练习题
- python核心编程学习记录之函数与函数式编程
- 学习python核心编程-第三章-课后习题笔记
- Python核心编程--学习笔记--5--数字
- python核心编程-正则表达式之-边界匹配
- python核心编程-正则表达式-产生测试数据
- Python核心编程笔记 - 第11章 函数式编程
- python核心编程学习笔记-2016-07-20-02-整型对象缓存
- python核心编程-函数调用