zoukankan      html  css  js  c++  java
  • python 核心编程 11章函数 练习 可变参数*元组,map,reduce,filter,lambda

    #encoding=utf-8
    # 11-3 函数。在这个练习中,我们将实现 max()和 min()内建函数。
    # (a) 写分别带两个元素返回一个较大和较小元素,简单的 max2()核 min2()函数。他们应该可以
    # 用任意的 python 对象运作。举例来说,max2(4,8)和 min2(4,8)会各自每次返回 8 和 4。
    # (b) 创建使用了在 a 部分中的解来重构 max()和 min()的新函数 my_max()和 my_min().这些函
    # 数分别返回非空队列中一个最大和最小值。它们也能带一个参数集合作为输入。用数字和字符串来
    # 测试你的解。

    def max2(a,b):
        if a > b:
            return a
        else:
            return b
    def min2(a,b):
        if a > b:
            return b
        else:
            return a
    print max2(4,8)
    print min2(4,8)
    #返回队列的最大最小值
    aList = [1,2,3,4,5,6,5,4,3,2]
    def mymax(list):
        for i in range(len(aList)):
            if i == 0:
                max = aList[i]
            max = max2(max,aList[i])
        return max
    def mymin(list):
        for i in range(len(aList)):
            if i == 0:
                min = aList[i]
            min = min2(min,aList[i])
        return min
    print mymax(aList)
    print mymin(aList)
    
    #enumerate参数为可遍历的变量,如 字符串,列表等; 返回值为enumerate类
    for i,j in enumerate(aList):
        print i,j

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

    def printf(arg ,*nkw):
        for eachNum in nkw:
            print arg % eachNum,
    printf('%d',2,3.4,5)
    printf('%f',2,3.4,5)
    
    #非关键字可变参数 元组 *
    def tuple(arg1,arg2='B',*theRest):
        print 'formal arg1:',arg1
        print 'formal arg2:',arg2
        for eacharg in theRest:
            print 'another arg:',eacharg
    tuple('abc')
    tuple(23,4)
    tuple(23,'abc','xyz',456)

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

    aList1 = [1,2,3,4,5]
    aList2 = ['abc','def','ghi','jkl','mno']
    print map(None,aList1,aList2)

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

    def is_runyear(year):
        if (year%4 == 0 and year%100 != 0) or (year%400 == 0 ):
            return 1
        else:
            return 0
    aList = [1996,2000,2001,2002,2003,2004,1900]
    print filter(is_runyear,aList)
    print [n for n in aList if is_runyear(n)]

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

    aList = [1,3,5,7,9]
    def average(list):
        sum = reduce((lambda x,y: x+y), aList)
        return sum / len(aList)
    print average(aList)

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

    '''----------迭代读取文件---------------'''
    f = open('2.txt','r')
    lines = f.readlines()
    
    def func(s):
        s.split()
    for eachLine in lines:
        print eachLine,len(eachLine)
        print len(eachLine.split())
        print map(func,eachLine)
    str1 = '12345'
    str2 = 'efghi'
    print map(None,str1)
    
    def chuli(line):
        return line.strip(' /n')
    
    filename='2.txt'
    f=open(filename,'r')
    lines=f.readlines()
    f.close()
    choosen=0
    while not choosen:
        file_choose=raw_input('''which file will you save? choose:
        (N)ew file
        (O)ld file
        ''')
        choose=file_choose.strip()[0].lower()
        if choose not in 'no':
            print 'choose invalid'
        elif choose=='n':
            file=raw_input('enter your new file name:')
            choosen=1
        else:
            file=filename
            choosen=1
    f=open(file,'w')
    for line in map(chuli,lines):
        f.write('%s/n'%line)
    f.close()

    # 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()以及递归

    def mult(x,y):
        return x*y
    #q求5!
    print reduce(mult,range(1,6))
    print reduce(lambda x,y:x*y,range(1,6))
  • 相关阅读:
    重装window7系统(使用U盘)
    冒泡排序
    使用jad进行反编译.class文件生成.java
    java代码编写1+2+3+....+100之和
    springboot多模块项目不同模块组件不能@autowired问题
    django CBV和FBV写法总结
    django cookie与session组件
    djjango cookie和session 的几种常用需求使用方法
    django 一个关于分组查询的问题分析
    Django book manage system
  • 原文地址:https://www.cnblogs.com/lovely7/p/5780895.html
Copyright © 2011-2022 走看看