python基础升级版第三课练习


习题1 定义一个函数,接收任意3个数字的输入,并按 顺序从小到大输
a = input('请输入任意数字')
b = input('请输入任意数字')
c = input('请输入任意数字')
l1 = [int(a),int(b),int(c)]
def getSort(numarr):
    return max(numarr)

getSort(l1)


习题2 要求创建一个函数,它可以接收,位置参数, 不定长位置参数,不定长关键词参数,并按 要求输出 。  输入班级名,班级特色(如’勤奋’,’颜值 高’ )等等不同特色,班级不同同学的姓 名与年龄。  要求输出,班级名,班级特色,班级成员, 班级成员的平均年龄。
def foo (className,*tese,**kw):
    print(type(kw))
    dic = dict(kw)
    l1 = list(dic.keys())
    l2 = dic.values()
    ave  = sum(l2)/len(l2)
    print('班级:',className,'特色:',tese,'姓名:',l1,'平均年龄:',ave)
    
foo('三二班','勤奋','颜值高',lisi=22,wangwu=12,zhangsan=10,何封=10)


习题3 使用reduce函数实现找出一组数字列表中的 最大值
from functools import reduce
l1 = [2,3,5,1,2,6,7]
def getMax(x,y):
    return x if x>=y else y
reduce(getMax,l1)


求1000以内能同时被3和7整除的数有哪些。 要求使用map与filter函数

map函数

def foo(x):
    return x if x%3==0 and x%7==0 else ''
list(map(foo,range(0,1001)))

filter函数

def foo(x):
    return True if x%3==0 and x%7==0 else False
list(filter(foo,range(0,1001)))


练习 4 体现闭包的思想,创建一个三层嵌套的函数, 并调用。
def new(num):
    def add(i):
        def other(j):
            return j +i+num
        return other
    return add

p = new(10)
print('p的方法名是:',p.__name__)
w = p(20)
print('w的方法名是:',w.__name__)

q = new(20)
print('q的方法名是:',q.__name__)
y = q(10)
print('y的方法名是:',y.__name__)

print(w(10),y(10))


练习5 请以round函数,定义一个偏函数roundN,调用 为输入一个数字N,返回圆周率后N位的数字  提示:  import math  math.pi  请以sorted函数,定义一个偏函数sortedDESC, 结果为输入一个序列,返回为按降序排列后序列。
import math
import functools

请以round函数,定义一个偏函数roundN

a = int(input('请输入数字'))
print (math.pi)
def roundNew(func,n):
    p = str(func(math.pi,n))

获取应截取的下标,+2()

    lenth = len(str(math.pi))-len(p) + 2
    print(type(p),p,type(func),func.__name__)
    afterP = str(math.pi)[lenth:]
    return afterP
roundN = functools.partial(roundNew,round)
roundN(a)

请以sorted函数,定义一个偏函数sortedDESC

def sortedD(func,numList):
    sortList = func(numList)
    sortList.reverse()
    return sortList
sortedDESC = functools.partial(sortedD,sorted)
l2 = [1,2,3,4,5,6,7,8,9]
print(sortedDESC(l2))


练习6 要求使用map与filter函数,输出一个输入字 符串里每个字符出现的次数  提示:结合dict使用实现
l1 = list(input())
d2 = {}
def foo1(i):
    if i not in d2.keys():
            d2[i] = '' #生成key值
            return True
    else:
            return False
def foo2(i):
    d = {}
    d[i] = l1.count(i)#给每个key赋值
    return d

l2 = list(filter(foo1,l1))

l3 = list(map(foo2,l2))
print(l3)


练习7 创建一个能够快递排序的递归函数
l1 = [1,2,3,4,4,3,21,5]
def sortNum(nums,newList = []):
    if len(nums) == 1:
        newList.append(nums[0])
        return newList
    else:
        a= min(nums)#求min

a= max(nums)#求max

        for i in range(0,nums.count(a)):
            nums.remove(a)
            newList.append(a)
            return sortNum(nums)
        
l2 = sortNum(l1)
print(l2)


练习8 创建一个能打印一个字典中包含所有字典对象的递归函数 dic={ "北京": { "东城": ["天坛", "东单", "王府井"], "西城": ["西单", "军博", "复兴门"], }, "上海": { "杨浦":['五角场','政通路','世界路’] }, "天津":['天津港']
dic = {'北京':{'东城':{'天坛':'北京路','东单':{'罗湖':'迎春路'},\
                   '王府井':{'福田':'车公庙'}},'西城':['西单','军博','复兴门']},\
       '上海':{'杨浦':['五角场','政通路','世界路']},\
       '天津':['天津港']}
def printAll (d):
    if d.keys()==1:
        print(d.keys(),':',d.values())
    else:
        for i in list(d.keys()):
            if type(d[i]) is dict:
                print(i,':',list(d[i].keys()))
                printAll(d[i])
            else:
                print(i,':',d[i])
printAll(dic)


习题9 编写一个生成器,实现fib数列的效果
def fib(max):
    n = 0
    a = 0
    b = 1
    while n < max:
        yield b
        a = b
        b = a + b 
        n = n + 1

l1 = []
for n in fib(6):
    l1.append(n)
print(l1)


习题10
创建一个能接收不定长位置参数(数字)函 数,返回是所有参数的和。
 现要求在这个函数每次调用时都有进行屏幕 打印(该函数被调用)。
 请在不改动这个函数内部及调用的前提下实 现。
def foo (*agrs):
    return sum(list(agrs))

def mycalucate(func,l1 = []):
    print('方法:',func.__name__,'被调用了')
    return func(*l1)
mycalucate(foo,[1,3,5])

1 个评论

请以sorted函数,定义一个偏函数sortedDESC
这个没看太懂。。。。应该是固定sorted这个函数里的一个参数的。你自己又写一个新函数。这样好像更麻烦了。

快排的,再想想,可以更简单去解决。

闭包的那题,很棒的。。用相加的方法,体现函数能记住其外部的这个事实。

要回复文章请先登录注册

返回顶部