本博客列出的答案不是来自官方资源,是我自己做的练习,如果有疑问或者错误,欢迎讨论。
原书(英文版)作者的blog :)
http://wescpy.blogspot.ca/

11-7.
用map()进行函数式编程。给定一对同一大小的列表,如[1, 2, 3, ...]和['abc', 'def', 'ghi', ...],将两个列表归并为一个由每个列表元素组成的元组的单一列表,以使我们的结果看起来像这样:{[(1, 'abc'), (2, 'def'), (3, 'ghi'), ...}。(虽然这问题在本质上和第6章的一个问题类似,那时两个解没有直接的联系)然后创建用zip内建函数创建另一个解。
【答案】
代码如下:

>>> listA = [1, 2, 3, 4]
>>> listB = ['abc', 'def', 'ghi', 'jkl']>>> map(None, listA, listB)
[(1, 'abc'), (2, 'def'), (3, 'ghi'), (4, 'jkl')]
>>> zip(listA, listB)
[(1, 'abc'), (2, 'def'), (3, 'ghi'), (4, 'jkl')]
>>>

11-8.
用filter()进行函数式编程,使用练习5-4你给出的代码来决定闰年。更新你的代码以便使它成为一个函数,如果你还没有那么做的话。然后写一段代码来给出一个年份的列表并返回一个只有闰年的列表。然后将它转化为用列表解析。
【答案】
代码如下:

from random import randint def leapYear(year):a4 = year % 4a100 = year % 100a400 = year % 400if (a4 == 0 and a100 != 0) or a400 == 0: return TrueyearList = []
for eachYear in range(20):yearList.append(randint(1000, 2051))print filter(leapYear, yearList)
# From www.cnblogs.com/balian/

11-9.
用reduce()进行函数式编程。复习11.7.2部分,阐述如何用reduce()计算数字集合的总和。修改它并创建一个叫average()的函数来计算每个数字集合的简单的平均值。
【答案】
根据第293页的例子,利用函数reduce()计算数字集合(列表List)的总和,可这样做:
reduce( (lambda x, y; x+y), List )
计算平均数代码如下:

>>> def average(List):
...     return reduce((lambda x,y: x+y), List)/float(len(List))
...>>> List = range(101)
>>> print average(List)
50.0

11-10.
用filter()进行函数式编程。在unix文件系统中,在每个文件夹或者目录中都有两个特别的文件:"."表示现在的目录,".."表示父目录。给出上面的知识,看一下os.listdir()函数的文档并描述这段代码做了什么:
files = filter(lambda x: x and x[0] != '.', os.listdir(folder))
【答案】
手头没有unix系统,但在linux上面试了一下,但十分没有把握。假设folder是文件夹路径字符串‘/tmp’,os.listdir(folder)能列出文件夹/tmp的所有文件夹和文件。但题目所示的代码将把特别文件"."和".."从os.listdir的输出列表中过滤掉。等有了unix再试一下,我的想法可能不对。

11-11.
用map()进行函数式编程。写一个使用文件名以及通过除去每行中所有排头和最尾的空白来“清洁”文件。在原始文件中读取然后写入一个新的文件,创建一个新的或者覆盖掉已存在的。给你的用户一个选择来决定执行哪一个。将你的解转换成使用列表解析。
【注】附英文版题目的原文:
Functional Programming with map(). Write a program that takes a filename and “cleans” the file by removing all leading and trailing whitespace from each line. Read in the original file and write out a new one, either creating a new file or overwriting the existing one. Give your user the option to pick which of the two to perform. Convert your solution to using list comprehensions.
【答案】
代码如下:

#-*- encoding: utf-8 -*-def CustomerChoice():"本函数让用户选择是创建新文件还是覆盖旧文件。"while True:print 'Please select: 'print "To create a new 'clean' file, please input 'N'.  "print "To overwrite the existing file, please input 'O'.   "Input = raw_input('Your choice is:...  ')if Input == 'N':return Truebreakelif Input == 'O':return Falsebreakelse:print "Error input, try again.   "def LineProcess(eachLine):eachLine = eachLine[0:-1]beginCharacter = eachLine[0]endCharacter = eachLine[len(eachLine)-1]while beginCharacter == ' ':eachLine = eachLine[1:]beginCharacter = eachLine[0]while endCharacter == ' ':eachLine = eachLine[:-1]endCharacter = eachLine[len(eachLine)-1]return eachLinetextFile = open('d:\sample_11_11.txt', 'r')
newLines = map(LineProcess, textFile)
print newLines
textFile.close()customerInput = CustomerChoice()
if customerInput:   #创建一个新的干净文件newFile = open(r'd:\newclean.txt', 'w')for eachline in newLines:newFile.write(eachline + '\n')newFile.close()
else:   #覆盖原来的文件overwriteFile = open('d:\sample_11_11.txt', 'w')for eachline in newLines:overwriteFile.write(eachline + '\n')overwriteFile.close()

【注】这里假设有一个名为sample_11_11.txt的文件在D盘的根目录下。
sample_11_11.txt具体内容:
   abc   d  
  this is an sample.     
Let me try.   
  Hello world   .
  Hello world.  
Hi, man.  
【参考】
做这题我参考了下面链接:
http://bbs.chinaunix.net/thread-3605638-1-1.html

转载于:https://www.cnblogs.com/balian/archive/2012/08/03/2620905.html

《Python核心编程》第二版第308页第十一章练习 续一 -Python核心编程答案-自己做的-...相关推荐

  1. 《Python核心编程》第二版第36页第二章练习 -Python核心编程答案-自己做的-

    <Python核心编程>第二版第36页第二章练习 这里列出的答案不是来自官方资源,是我自己做的练习,可能有误. 2.21 练习 2-1. 变量,print和字符串格式化操作符.启动交互式解 ...

  2. 《Python核心编程》第二版第18页第一章练习 -Python核心编程答案-自己做的-

    <Python核心编程>第二版第18页第一章练习 这里列出的答案不是来自官方资源,是我自己做的练习,可能有误. 1.9 练习 1-1. 安装Python.请检查Python是否已经安装到你 ...

  3. 拒绝从入门到放弃_《Python 核心编程 (第二版)》必读目录

    目录 目录 关于这本书 必看知识点 最后 关于这本书 <Python 核心编程 (第二版)>是一本 Python 编程的入门书,分为 Python 核心(其实并不核心,应该叫基础) 和 高 ...

  4. python核心编程第二版pdf_Python Book电子书pdf版合集 Python核心高级编程第二版

    1小时学会Python.doc 51CTO下载-[Python系列].BeginningPythonFromNovicetoProfessionalSecondEdition.pdf 8.Python ...

  5. python核心教程第二版答案_python核心编程第二版第4章习题答案.docx

    python核心编程第二版第4章习题答案.docx 4-1.Python 对象.与所有 Python 对象有关的三个属性是什么?请简单的描述一下. 答案: 所有的 Python 对象都拥有三个特性:身 ...

  6. python基础教程第二版和第三版哪个好-python基础教程 2版和3版哪个适合新手?!...

    python基础教程 2版和3版哪个适合新手? 现在学是学python3. 两者的差异发者本身影响并不大,个别语法细微的差比如python3的print数方式使用,一些常用模块的名称差异,一些机制的差 ...

  7. 【Python 自然语言处理 第二版】读书笔记1:语言处理与Python

    文章目录 前言 语言处理与Python 一.语言计算:文本和单词 1.NLTK入门 (1)安装(nltk.nltk.book) (2)搜索文本 (3)词汇计数 2.列表与字符串 (1)列表操作 (2) ...

  8. 利用python进行数据分析第二版pdf百度云_参考《利用Python进行数据分析(第二版)》高清中文PDF+高清英文PDF+源代码...

    第2版针对Python 3.6进行全面修订和更新,涵盖新版的pandas.NumPy.IPython和Jupyter,并增加大量实际案例,可以帮助高效解决一系列数据分析问题. 第2版中的主要更新了Py ...

  9. 《Programming Ruby 中文版第二版》P577页singleton_method_undefined方法说明有点问题

    "当一个singleton方法在这个接受者中没有定义(??)时,singleton_method_undefined作为回调函数会被调用" 这是书上P577页的说法,看看官网的原文 ...

最新文章

  1. Linux Centos 7 安装配置nginx
  2. java - 策略模式、状态模式、卫语句,避免多重if-else(转)
  3. 整了个程序员专用的红包封面,喜欢的来领咯!
  4. tomcat设置自动监听替换class文件
  5. 【翻译自mos文章】OGG replicat 进程使用的 TCP port
  6. java程序如何优化--技巧总结
  7. aapt2 适配之资源 id 固定
  8. vue --- 模块从子组件获取数据
  9. 【linux,跟Java初学者分享几点经验
  10. Java字符串replaceAll()方法
  11. python求数组的所有组合_使用numpy构建两个数组的所有组合的数组
  12. SEO:避免关键词内部竞争带来的无法收录问题,
  13. Oracle之根据约束名查找表
  14. 当出现“在当前位置发现已经存在为RESUME.XLW的文件。您希望将该文件替换掉吗?” 解决方案...
  15. 常用通信协议——IIC详解(全网最全)
  16. qcom usb驱动下载_艾肯Mobile Q驱动-艾肯Mobile Q usb外置声卡驱动下载v1.35.20 官方最新版-西西软件下载...
  17. 最短哈密尔顿圈matlab解法_数学建模学习笔记
  18. 苹果系统连接服务器打印机,Mac系统怎么连接打印机
  19. 如何用cmd打开管理员模式
  20. samba 配置文件详解

热门文章

  1. 链表排序---迭代版本归并算法 + [leetcode]148. 排序链表
  2. Unity3D基础6:灯光组件
  3. bzoj 1711: [Usaco2007 Open]Dining吃饭(最大流)
  4. AC自动机(HDU 2222: Keywords Search)
  5. 拟阵:贪心原理(bzoj 3105: [cqoi2013]新Nim游戏)
  6. opencv 利用轮廓检索函数实现字母匹配(图像匹配)
  7. opencv 基本绘图功能 画直线 画圆 给图像添加文字等
  8. 关于BASYS3给初学者的建议(有关引脚的书写
  9. CCF - 201412-1 - 门禁系统
  10. 使用struts2中默认的拦截器以及自定义拦截器