Python 基础入门升级 第三课练习和作业


习题1

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

def sort3(a,b,c):
    l = list((a,b,c))
    l.sort()
    print(l)
sort3(3,2,1)


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

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

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

def summary(classname, *features, **ages):
    print('class name', classname)
    for feature in features:
        print('class feature', feature)
    totalage=0

    for name,age in ages.items():
        totalage += age
        print('member:',name,' age:',age)
    print(list(ages.items()))
    print('the class average age is', sum(ages.values())/len(ages))

summary('三年四班', '坚持', 'hard working', 'talented', 'genius', **{'xiao':18, 'tangya':20, 'wangjihua':15, 'liumin': 80})


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

from functools import reduce
def maxList(l):
    return reduce(lambda x,y:max(x,y),l)
l1 = [3.234,3,5,1,3,6,6,7,890,12,3]
maxList(l1)


求1000以内能同时被3和7整除的数有哪些。

要求使用map与filter函数

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


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

def foo1(l):
    print('foo1 executed')
    def inner1():
        print('list from foo1', l)
        innerl = list(map(lambda x:x*2, l))
        def inner2():
            print('list from inner1', innerl)
        return inner2
    return inner1
foo1(['dfsdf', 3,34, 'ads'])()()


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

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

 import math

 math.pi

from functools import partial
import math
roundN=partial(round, math.pi)
roundN(5)


请以sorted函数,定义一个偏函数sortedDESC, 结果为输入一个序列,返回为按降序排列后序列。

from functools import partial
sortedDESC=partial(sorted,reverse=True)
l2 = sortedDESC([1,2,3,4,5])
print(l2)


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

 提示:结合dict使用实现

def fooSum(string):
    return dict(map(lambda x:(x, string.count(x)), string))
fooSum('abcdhajdflkajsdfkljasdf')


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

def quicksort(l, start, end):
    if (end - start + 1) <= 1:
        pass
    else:
        midnum = l[(start + end)//2]

        left=start
        mid=start
        right=end
        while mid <= right:
            if l[mid]<midnum:
                l[left], l[mid] = l[mid], l[left]
                left +=1
                mid +=1
            elif l[mid]>midnum:
                l[right], l[mid] = l[mid], l[right]
                right -=1
            else:
                mid +=1
        quicksort(l, start, left - 1)
        quicksort(l, right + 1, end)


l2=[239,2384,2,5,32,13,4,16,13,6,1234,657]
quicksort(l2, 0, len(l2) - 1)
l2


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

 }

dic={ "北京": {

"东城": ["天坛", "东单", "王府井"],

"西城": ["西单", "军博", "复兴门"], },

"上海": { "杨浦":['五角场','政通路','世界路’]

}, "天津":['天津港']


def printdict(d):
    for k,v in d.items():
        if type(v) is dict:
            printdict(v)
        else:
            print(k,'==>',v)

dic={
    "北京": {
        "东城":["天坛", "东单", "王府井"],
        "西城":["西单", "军博", "复兴门"],
    },
    "上海":{
        "杨浦":['五角场','政通路','世界路'],
    }, 
    "天津":['天津港']
}
printdict(dic)     

def fibgen(num):
    a,b=0,1
    for i in range(num):
        yield a
        a,b=b,a+b
g1 = fibgen(10)
print(list(g1))

def extrafoo(func):
    def inner(*args):
        print('function:', func.__name__,"get called")
        return func(*args)
    return inner

@extrafoo
def allSum(*args):
    return sum(args)

allSum(1,2,3,4,5,6)
allSum(1,2,3,4,5,6)
allSum(1,2,3,4,5,6)
allSum(1,2,3,4,5,6)
allSum(1,2,3,4,5,6)
已邀请:

qq用户321660

赞同来自:


第三课的作业完成的也是很好。

快递排序算法的函数,可以设计为不用指定start,end,会更简洁。

要回复问题请先登录注册

返回顶部