python基础升级 第三课 练习与作业 离歌

练习1

def mySort(a,b,c):
    L1=[a,b,c]
    L1.sort()
    for i in L1:
        print(i)
   

练习2

def myClass(className,*args,**kwargs):
    print(className)
    age=0
    for i in args:
        print(i)
    for key,word in kwargs.items():
        print(key)
        age+=word
    print(age//len(kwargs))
myClass('高三','henha','hhhhh','fdsafds',jack=23,jim=21)

练习3:使用reduce函数实现找出一组数字列表中的,最大值

 #不使用reduce时,代码需要很多行
def myReduce(*args):
    for i in args:
        if i==len(args)-1:
            return args[i]
        elif args[i]>args[i+1]:
            args[i],args[i+1]=args[i+1],args[i]

使用后代码很简洁

from functools import reduce
def myReduce(x,y):
    if x>=y:
        return x
    else:
        return y
reduce(myReduce,[1,3,5,9,4,2,6])

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

def myFun(sum):
    if sum %3==0 and sum%7==0:
        return True
list(filter(myFun,[x for x in range(1001)]))
def myFun1(sum):
    if sum %3==0 and sum%7==0:
        return sum
map(myFun1,[x for x in range(1001)])

练习4 体现闭包的思想,创建一个三层嵌套的函数,并调用。

def closePack(name):
    def closing(age):
        print(name,age)
        def func(args):
            print(name,age,args)
        return func
    return closing
a=closePack('lige')
b=a('23')
b('很好')

练习5 请以round函数,定义一个偏函数roundN,调用

为输入一个数字N,返回圆周率后N位的数字  提示:  import math

# math.pi
## 请以sorted函数,定义一个偏函数sortedDESC,

结果为输入一个序列,返回为按降序排列后序列。

import math
def roundN(sum):
    temp=round(math.pi,sum)
    sum=int((temp*pow(10,sum)))
    return sum
roundN(20)

def sortedDESC(*args):
    args=sorted(args)
    args=args[::-1]
    return args
L1=[1,5,6,2,3,5,8,9]
sortedDESC(*L1)

练习6要求使用map与filter函数,输出一个输入字

符串里每个字符出现的次数

 #提示:结合dict使用实现
d={}
def myDict(str):
    if str not in d.keys():
        d[str]=1
    else:
        d[str]=d[str]+1
    return str
list(map(myDict,'ttthhhyyytgjijhgtt'))
print(d)
def myDict1(str):
    if str not in d.keys():
        d[str]=1
    else:
        d[str]=d[str]+1
    return True
list(filter(myDict1,'ttthhhyyytgjijhgtt'))
print(d)

练习7创建一个能够快递排序的递归函数

    def  mySorted(args):
        for i in range(len(args)):
            if i==len(args)-1:
                return  args[0],mySorted(args[1:])
            elif args[0]<args[i+1]:
                args[0],args[i+1]=args[i+1],args[0]

练习8创建一个能打印一个字典中包含所有字典对象的递归函数

# dic = {
# "北京": {
## "东城": ["天坛", "东单", "王府井"],
# "西城": ["西单", "军博", "复兴门"],
# },
# "上海": {
# "杨浦":['五角场','政通路','世界路’]
# },
# "天津":['天津港']
# }
def myDictory(d):
    for key,value in d.items():
        if type(value)==dict:
            print(value)
            myDictory(value)

练习9 编写一个生成器,实现fib数列的效果

def fib(sum):
    a,b,i=0,1,0
    while i<=sum:
        yield(b)
        i+=1
        a,b=b,a+b

作业:创建一个能接收不定长位置参数(数字)函数,返回是所有参数的和。

# 现要求在这个函数每次调用时都有进行屏幕打印(该函数被调用)。
# 请在不改动这个函数内部及调用的前提下实现。 
    
    #装饰器
    def myDec(funtion):
        def innerFun(*args):
            print("this",funtion.__name__)
            return funtion(*args)
        return innerFun
    @myDec        
    def weFun(*args):
        a=0
        for i in args:
            a=a+i
        return a
    weFun([1,3,5,2,3])  #调用
   
已邀请:

ClownFish

赞同来自:


使用reduce后,代码可以更简洁哦。再想想

快递排序是一种算法,先分一半,再分一半,再分一半.........,直到结束 。
再想想怎么实现。

其它都完全得很好。

等你第四课作业

要回复问题请先登录注册

返回顶部