Python基础升级班第三次作业

定义一个函数,接收任意3个数字的输入,并按顺序从小到大输出

def sortNum():
    num=['']*3
    m=[None]*3
    i=0
    while i<3:
        num[i]=(int)(input('Please input 3 numbers: '))
        i+=1
    m[0]=min(num) 
    m[2]=max(num)
    m[1]=num[0]+num[1]+num[2]-m[0]-m[2]
    print('num=',num)
    return m
sortNum()   

要求创建一个函数,它可以接收,位置参数,不定长位置参数,不定长关键词参数,并按要求输出。

输入班级名,班级特色(如’勤奋’,’颜值高’ )等等不同特色,班级不同同学的姓名与年龄。

要求输出,班级名,班级特色,班级成员,班级成员的平均年龄。

def classStu(className,classTese,*args,stuName='',stuAge=0,**kwargs):
    print('班级:',className,'班级特色:',classTese)
    classMembers=[stuName]
    classAge=[stuAge]
    
    for i in args:
        print(i)
    for key,value in kwargs.items():
        classMembers.append(key)
        classAge.append(value)
    average=sum(classAge)
    return classMembers,average/len(classMembers)

classStu(302,'高富帅',stuName='张三',stuAge=18,王健林=60,马云=58,雷军=40,史玉柱=63)

使用reduce函数实现找出一组数字列表中的最大值

from functools import reduce
l1=[4,6,8,3,2,5,9,4,10,12,19,15,18,17]

reduce(max,l1)

def mymax(x,y):
    if x>=y:return x
    else:return y
reduce(mymax,l1)

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

def func(x):
    return x%3==0 and x%7==0

l1=[i for i in range(1000)] 

l2=list(filter(func,l1)) 
l2

def func2(x):
    if x%3==0 and x%7==0:return x
    else: return None
l3=[i for i in range(1,1000)]
l3
l4=list(map(func2,l3))
def func3(x):
    if x!=None:return x
l5=list(filter(func3,l4))

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

val=0
def foo1(fnum):
    print('this is foo1 function ',fnum)
    def foo2(*args):
        global val  #不加globa,val在foo2重新声明了
        val=fnum
        for i in args:
            val+=i
        print("this is foo2 function, sum is=",val)
        def foo3():
            print('this is fool3 function')
            global val
            val*=10
            return val
        return foo3
    return foo2
foo1(1)(2,3,4,5,6)()

请以round函数,定义一个偏函数roundN,调用为输入一个数字N,返回圆周率后N位的数字

提示:import math math.pi

import math
import functools
r3 = functools.partial(round, base=3)

r3(3.145)

def roundN(x, base=2):
    x*=(10**(base+1))
    x=x//10
    return int(x)
n=roundN(math.pi,6)
print('n=',n)
print('math.pi=',math.pi)

list1=[7, -8, 5, 4, 0, -2, -5]
def sortedDESC(l1):
    return sorted(list1,reverse=True)
print('list=',sortedDESC(list1))

要求使用map与filter函数,输出一个输入字符串里每个字符出现的次数

 提示:结合dict使用实现

d={}
str1=''
while not str1:
    str1=input('Please input a string: ')
    
str2=list(map(lambda x:{x:str1.count(x)},str1))
for i in str2:
    d.update(i)
print('dict d=',d)

用filter删除含有空格项???

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

def mSort(lst1):
    if len(lst1)==1:
        return lst1
    else:
        return sorted([lst1[0]]+mSort(lst1[1:]))

L=[2,6,3,1,8,5,4]
mSort(L)


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

dic={"北京":{"东城":["天坛","东单","王府井"],"西城":["西单","军博","复兴门"],
    "上海":{"杨铺":['五角场','政通路','世界路'],
     "天津":['天津巷']}}
    }
def printDictFunc(dic1): 
    for key,value in dic1.items():
        if type(value)!=dict:
            print("value=",value)
        else:
            printDictFunc(dic1[key])
printDictFunc(dic)

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

L = [x * x for x in range(10)]
L   
g = (x * x for x in range(10))
g
def fib(n):
    k,a,b=0,0,1
    while k<n: 
        yield b
        a,b=b,a+b
        k+=1
        
a=fib(6)
for i in a:
    print(i)

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

 现要求在这个函数每次调用时都有进行屏幕打印(该函数被调用)。请在不改动这个函数内部及调用的前提下实现。

import functools
def printLog(start='Hello',end='Byebye',**kwargs):
    for key,value in kwargs.items():
        print(key,value)
    
    def wrapper(func):
        @functools.wraps(func)
        def inner(*args,**kwargs):
            print(start)
            x=func(*args,**kwargs)
            print(end)
            return x
        return inner
    return wrapper


@printLog(start="I'm coming",end='I am leaving')
def mySum(*args):
    sum=0
    for i in args:
        sum+=i
    return sum

s=mySum(1,2,3,4,5)
print('s= ',s)
mySum.__name__

1 个评论

看到有新同学提交作业,,开森。


第一题,可以不用m[1]=num[0]+num[1]+num[2]-m[0]-m[2]这样,代码长容易错。可以考虑,在输入的时候就用split函数进行分割后。加一个临时变量用于比较,也可以。

第二题的,*args没有体现出来 可变长定位 参数。再想想

filter和map做得漂亮
最后的装饰器,已经加上了参数。。很好

第一次作业就很棒~~~
等你补上第四课的作业

要回复文章请先登录注册

返回顶部