python核心编程习题11章

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

#11-7-(a)
  def fun1():
  set1=map(lambda x,y:(x,y),[1,2,3],['abc','def','ghi'])
  print('{',sorted(set1),'}')

#11-7-(b)
 def fun1():
    print('{',list(zip([1,2,3],['abc','def','ghi'])),'}')

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

#11-8
def isheap(num):
    if num%400==0:
        return True
    elif num%4==0 and num%100 !=0:
        return True
    return False
        
def fun1(lis):
    return filter(lambda x:isheap(x),lis)
if __name__ == '__main__':
          print('-'*5,'The Start','-'*5)
          lis=[i for i in range(1900,2040)]
          lisheap=[]
          ss=fun1(lis)
          for i in ss:
              lisheap.append(i)
          print(lisheap)    
          print('the output is')   


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

#11-9
import functools
 def fun1():
    print(functools.reduce(lambda x,y:x+y,[1,2,3])/len([1,2,3]))

11–13.使用 reduce()进行函数式编程以及递归。在第 8 张中,我们看到 N 的阶乘或者 N!作为从1到N所有数字的乘积。 
(a) 用一分钟写一个带 x,y 并返回他们乘积的名为 mult(x,y)的简单小巧的函数。 
(b)用你在 a 中创建 mult()函数以及 reduce 来计算阶乘。 
(c)彻底抛弃掉 mult()的使用,用 lamda 表达式替代。 

#11-13-(a)
import functools
def mult(x,y):
    result=functools.reduce(lambda x,y:x*y,(x,y))
    return result

if __name__ == '__main__':
          print('-'*5,'The Start','-'*5)
          print(mult(2,3))
          print('the output is')      

#11-13-(b)
if __name__ == '__main__':
          print('-'*5,'The Start','-'*5)
          print(mult(2,3))
          result=1
          for i in range(4):
              result *=mult(1,i+1)

          print('阶乘结果:',result)    
          print('the output is')    

#11-13-(c)
if __name__ == '__main__':
          print('-'*5,'The Start','-'*5)
          print(mult(2,3))
          result=1
          for i in range(4):
              result *=functools.reduce(lambda x,y:x*y,(1,i+1))

          print('阶乘结果:',result)    
          print('the output is')  



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值