文档章节

chapter 11 exercise

happyliferao
 happyliferao
发布于 2015/10/09 09:41
字数 1842
阅读 47
收藏 0
11-3 函数。在这个练习中,我们将实现max()和min()内建函数。
(a) 写分别带两个元素返回一个较大和较小元素,简单的max2()核min2()函数。他们应该可以
用任意的python 对象运作。举例来说,max2(4,8)和min2(4,8)会各自每次返回8 和4。
(b) 创建使用了在a 部分中的解来重构max()和min()的新函数my_max()和my_min().这些函
数分别返回非空队列中一个最大和最小值。它们也能带一个参数集合作为输入。用数字和字符串来
测试你的解。
a)
def max2(num1,num2):
    return num1 ifnum1>num2 else num2
def min2(num1,num2):
    return num1 ifnum1


print max2(4,8)
print min(4,8)

b)
def max2(num1,num2):
    return num1 ifnum1>num2 else num2
def min2(num1,num2):
    return num1 ifnum1

def my_max2(*arg):
    returnreduce(max2,arg)
def my_min2(*arg):
    returnreduce(min2,arg)

print my_max2(1,2,3,4,5,6,7,8,9)
print my_min2('wer','vfd')


11–4. 返回值。给你在5-13 的解创建一个补充函数。创建一个带以分为单位的总时间以及
返回一个以小时和分为单位的等价的总时间。

code:

def totalmins(strtime):
   num=strtime.split(':')
    return int(num[0])*60+int(num [1])

def hourtime(strtime):
    returnstr(strtime)


if __name__=='__main__':
    while True:
       strtime=raw_input('please input(0 toquit):')
       if strtime==0:
          break

       else:
           print'total minstime:%s'%totalmins(strtime)
           print 'thesame time;%s'%hourtime(strtime)




11–6. 变长参数。下一个称为printf()的函数。有一个值参数,格式字符串。剩下的就是根
据格式化字符串上的值,要显示在标准输出上的可变参数,格式化字符串中的值允许特别的字符串
格式操作指示符,如%d, %f, etc。提示:解是很琐碎的----无需实现字符串操作符功能性,但你需
要显示用字符串格式化操作(%)


tips:完全看不懂在说什么



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

code:
seq1=[1,2,3]
seq2=['abc','def','hik']
map1=map(None,seq1,seq2)
print map1

zip解;
seq1=[1,2,3]
seq2=['abc','def','hik']
print zip(seq1,seq2)


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

code:
def is_loop(year):
    if (int(year)%4==0 andint(year)0==0) or int(year) @0 ==0 :
       return year


if __name__=='__main__':

   year=[1983,2009,2300,4500,1234,1998]
    printfilter(is_loop,year)


11–9. 用reduce()进行函数式编程。复习11.7.2 部分,阐述如何用reduce()数字集合的累
加的代码。修改它,创建一个叫average()的函数来计算每个数字集合的简单的平均值。

code;
def average(list1):
    sumNew=reduce(lambdax,y:x+y,list1)
    returnfloat(sumNew)/len(list1)


if __name__=='__main__':
   list1=(1,2,3,4,5,6,7,8)
    print 'the averageis:%.2f'%(average(list1))


11–10.用filter()进行函数式编程。在unix 文件系统中,在每个文件夹或者目录中都有两个
特别的文件:'.'表示现在的目录,'..'表示父目录。给出上面的知识,看下os.listdir()函数的文
档并描述这段代码做了什么:
files = filter(lambda x: x and x[0] != '.', os.listdir(folder))

code:一个文件夹下除了'.',和以'.'开头的所有文件。
  

11–11.用map()进行函数式编程。写一个使用文件名以及通过除去每行中所有排头和最尾的空
白来“清洁“文件。在原始文件中读取然后写入一个新的文件,创建一个新的或者覆盖掉已存在的。
给你的用户一个选择来决定执行哪一个。将你的解转换成使用列表解析。
code:
import os

def newfile(filename):
   fobj1=open(filename)
   lines=fobj1.readlines()
    fobj1.close()
   fobj2=open('newfile.txt','w')
    for line in lines:
       fobj2.write(line.strip()+os.linesep)
    fobj2.close()

def oldback(filename):
   fobj1=open(filename,'w')
   fobj2=open('newfile.txt')
   lines=fobj2.readlines()
    for line in lines:
       fobj1.write(line+os.linesep)
    fobj1.close()
    fobj2.close()
   os.remove('newfile.txt')

if __name__=='__main__':
    filename=raw_input('plsinput filename:')
    choose=raw_input('pleasechoose your choice fo new file.')
    if choose=='new':
      newfile(filename)
    elifchoose=='old':
       newfile(filename)
       oldback(filename)
    else:
       print 'you want to quit.'



11–12. 传递函数。给在这章中描述的testit()函数写一个姊妹函数。timeit()会带一个函数
对象(和参数一起)以及计算出用了多少时间来执行这个函数,而不是测试执行时的错误。返回下
面的状态:函数返回值,消耗的时间。你可以用time.clock()或者time.time(),无论哪一个给你
提供了较高的精度。(一般的共识是在POSIX 上用time.time(),在win32系统上用time.clock())
注意:timeit()函数与timeit 模块不相关(在python2.3 中引入)
code:
import time
def timeit(fun,*args):
    time1=time.clock()
    for i inrange(10000000):
       fun(*args)

    time2=time.clock()
    return time2-time1

def fun(*args):
    return map(lambdax:x+2,args)
if __name__=='__main__':
   usingtime=timeit(fun,1,2,34,5,6,7,8,9)
    print 'using timeis:%d'%(usingtime)


11–13.使用reduce()进行函数式编程以及递归。在第8 张中,我们看到N 的阶乘或者N!作为
从1 到N 所有数字的乘积。
(a) 用一分钟写一个带x,y 并返回他们乘积的名为mult(x,y)的简单小巧的函数。
(b)用你在a 中创建mult()函数以及reduce 来计算阶乘。
(c)彻底抛弃掉mult()的使用,用lamda 表达式替代。
(d)在这章中,我们描绘了一个递归解决方案来找到N!用你在上面问题中完成的timeit()函数,
并给三个版本阶乘函数计时(迭代的,reduce()以及递归)

a)
def mult(x,y):
    return x*y

print mult(3,5)

b)
def mult(x,y):
    return x*y

print reduce(mult,range(1,5))

c)
print reduce(lambda x,y:x*y,range(1,5))
d)

11–14. 递归。我们也来看下在第八章中的Fibonacci 数字。重写你先前计算Fibonacci 数字
的解(练习8-9)以便你可以使用递归。

tips:
如果函数包含了对其自身的调用,该函数就是递归的
code:
Dict1={0:0,1:1}

def fib2(n):
    if n in Dict1:
       return Dict1 [n]
   rest=fib2(n-1)+fib2(n-2)
    Dict1 [n]=rest
    return rest

print fib2(6)


11–15.递归。重写练习6-5 的解,用递归向后打印一个字符串。用递归向前以及向后打印一个
字符串。

code)
def fronttoback(string):
    if string:
       print string[0],
       return fronttoback(string[1:])

def backtofront(string):
    if string:
       print string[-1],
       return backtofront(string[:-1])

fronttoback('iloveyou')
print
backtofront('iloveyou')


11–17.定义
(a) 描述偏函数应用和currying 之间的区别。
(b) 偏函数应用和闭包之间有什么区别?
(c) 最后,迭代器和生成器是怎么区别开的?
a)currying(就是偏函数把)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且

返回结果的新函数的技术。
闭包的概念前面也说过就是函数里面嵌套一个函数,这个里面的函数调用到上层函数的变量,并return innerfunc,这个变量称为自由变量。

def outfunc(v):
    newvarial=v
    def innier():
       print 'pa'
       return newvarial
    return innier


© 著作权归作者所有

上一篇: chapter 11 function
下一篇: 核心编程chapter13
happyliferao
粉丝 6
博文 85
码字总数 60147
作品 0
顺义
QA/测试工程师
私信 提问
chapter 11 function

第十一章,函数 coding: utf-8 from operator import add,sub from random import randint, choice ops={'+':add,'-':sub} MAXTRIES=2 def doprob(): op=choice('+-') nums=[randint(1,40) f......

happyliferao
2015/10/09
12
0
chapter 9 exercise

9–1. 文件过滤. 显示一个文件的所有行, 忽略以井号( # )开头的行. 这个字符被用做 Python , Perl, Tcl, 等大多脚本文件的注释符号. 附加题: 处理不是第一个字符开头的注释. import os filen...

happyliferao
2015/10/09
75
0
chapter 8 exercise

8–4. 素数.我们在本章已经给出了一些代码来确定一个数字的最大约数或者它是否是一个 素数. 请把相关代码转换为一个返回值为布尔值的函数,函数名为isprime() . 如果输入的是一个 素数, 那么...

happyliferao
2015/10/09
78
0
python chapter 5 exercise

.讲讲Python 普通整型和长整型的区别? 普通整型范围-231--231-1 长整型是普通整型的超集。 python2.3版本之后普通整型和长整型已经统一了,普通用户已经看不到长整型的存在了。 2.5-2 运算符...

happyliferao
2015/10/12
19
0
PYTHON chapter 4 exercise

4–1. Python 对象。与所有Python 对象有关的三个属性是什么?请简单的描述一下。 身份:也就是相当于内存地址,通过Id()获得,这个属性不可变 类型:对象的类型决定了对象可以保存什么样的...

happyliferao
2015/10/12
45
0

没有更多内容

加载失败,请刷新页面

加载更多

UAVStack功能上新:新增JVM监控分析工具

UAVStack推出的JVM监控分析工具提供基于页面的展现方式,以图形化的方式展示采集到的监控数据;同时提供JVM基本参数获取、内存dump、线程分析、内存分配采样和热点方法分析等功能。 引言 作为...

宜信技术学院
17分钟前
4
0
MySQL的5种时间类型的比较

日期时间类型 占用空间 日期格式 最小值 最大值 零值表示 DATETIME 8 bytes YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 9999-12-31 23:59:59 0000-00-00 00:00:00 TIMESTAMP 4 bytes YYYY-MM......

物种起源-达尔文
24分钟前
5
0
云服务OpenAPI的7大挑战,架构师如何应对?

阿里妹导读:API 是模块或者子系统之间交互的接口定义。好的系统架构离不开好的 API 设计,而一个设计不够完善的 API 则注定会导致系统的后续发展和维护非常困难。比较好的API设计样板可以参...

阿里云官方博客
27分钟前
5
0
Rancher + VMware PKS实现全球数百站点的边缘K8S集群管理

Sovereign Systems是一家成立于2007年的技术咨询公司,帮助客户将传统数据中心技术和应用程序转换为更高效的、基于云的技术平台,以更好地应对业务挑战。曾连续3年提名CRN,并且在2012年到2...

RancherLabs
32分钟前
5
0
6、根据坐标,判断该坐标是否在地图区域范围内

最近在写配送区域相关的代码,具体需求如下: 根据腾讯地图划分配送区域,总站下边设多个配送分站,然后将订单中的收货地址将其分配给不同的配送分站。 1、地图区域划分(腾讯地图) 1.1、H...

有一个小阿飞
34分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部