python基础入门 升级版 第三课作业:


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

def sor(List):
    Li = []
    while len(List) > 0:
        t = min(List)
        Li.append(t)
        List.remove(t)
    return Li

if __name__ == '__main__':
    print('请输入数字,用空格间隔两个数字:')
    list01 = sys.stdin.readline().strip()
    list01 = list(map(int,list01.split()))
    sortResult = sor(list01)
    print(sortResult)


'''练习二:
要求创建一个函数,它可以接收,位置参数,不定长位置参数,不定长关键词参数,并按要求输出 。
 输入班级名,班级特色(如’勤奋’,’颜值高’ )等等不同特色,班级不同同学的姓名与年龄。
 要求输出,班级名,班级特色,班级成员,班级成员的平均年龄。
'''
def fun(classname,*args,**kwargs):
    print('班级名是:', classname)
    print('班级特色:')
    for item in args:
        print('>>>', item)
    print('班级成员有:')
    c = 0
    Sum = 0
    for key , value in kwargs.items():
        print('>>>',key, 'age = ', value)
        c = c + 1
        Sum = Sum + value
    average = Sum / c
    print('平均年龄为:',average)

if __name__ == '__main__':
    fun('三年级二班','勤奋','颜值高',张山 = 9,李四 = 8,王武 = 9, 张三 = 10, 王五= 9)


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

reduce 是两两进行比较

'''
import sys
from functools import reduce
print('请输入一组数列,用空格间隔两个数字:')
list01 = sys.stdin.readline().strip()
list01 = list(map(int,list01.split()))
result = reduce(lambda a,b:a if a>b else b,list01)
print(result)


'''练习四:
求1000以内能同时被3和7整除的数有哪些。要求使用map与filter函数
'''
def division(n):
    if n % 3 ==0 and n % 7 ==0:
        return n

result = list(filter(None,list(map(division,list(range(1,1001))))))
print(result)


l= list(map(lambda x: x if x % 3==0 and x % 7 ==0 else None,list(range(1,1001))))
result = list(filter(None,l))

print(result)


'''练习四:
体现闭包的思想,创建一个三层嵌套的函数,并调用。
'''
def f1(num1, num2):
    print('nums 此时在f1中,可以被访问:', num1, num2)

    def f2():
        print('nums 此时在f2中,可以被访问:', num1, num2)
        result1 = sum(num1)
        print('---->  ', result1)

        def f3():
            print('nums 此时在f3中,可以被访问:', num1, num2)
            result2 = sum(num2)
            print('******》  ', result2)
            return result1 + result2

        return f3

    return f2


print(f1([4, 4, 6], [23, 64, 10])()())


'''练习五
请以round函数,定义一个偏函数roundN,调用为输入一个数字N,返回圆周率后N位的数字
'''
import math
def roundN(N):
    return round(math.pi,N)

'''
请以sorted函数,定义一个偏函数sortedDESC,结果为输入一个序列,返回为按降序排列后序列。
'''
def sortedDESC(st):
    return sorted(st,reverse=True)


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

代码一:

st = input('请输入一段字符串:')
s = list(set(st))
count = []
for i in range(len(s)):
    c = 0
    for j in range(len(st)):
        if st[j] == s[i]:
            c = c + 1
    count.append(c)
print('各个字符出现的字数如下:\n')
for i in range(len(s)):
    print('字符 ' , s[i], '出现的次数为:', count[i])

代码二:

st = input('请输入一段字符串:')
result = list(map(lambda x:(x,st.count(x)),st))
for i in range(len(result)):
    print('字符 ', result[i][0],'出现的字数为:',result[i][1])

没想明白老师提示的结合dict使用实现的方法




'''习题7
创建一个能够快递排序的递归函数
'''
def quicksort(num,low,high):
    i = low
    j = high
    if i >= j:
        return num
    key = num[i]
    while i < j :
        while j > i and num[j] >= key:
            j = j-1
        num[i] = num[j]
        num[j] = key
        while i < j and num[i] <= key: #这里我开始写为 num[i]< key,当待排数据中含有相同的数据,我的算法陷于死循环中!
            i = i +1
        num[j] = num[i]
    num[i] = key
    quicksort(num,low,i-1)
    quicksort(num,j+1,high)
    return num

L = [2,3,5,2,8,10,4499,0,3,54]
print(L)
Lafter = quicksort(L,0,len(L)-1)
print(Lafter)


'''习题8
 创建一个能打印一个字典中包含所有字典对象的递归函数
 dic = {
 "北京": {
 "东城": ["天坛", "东单", "王府井"],
 "西城": ["西单", "军博", "复兴门"],
 },
 "上海": {
 "杨浦":['五角场','政通路','世界路’]
 },
 "天津":['天津港']
 }
'''
def printdic(di):
    print(di)
    for k in di:
        if type(di[k]) == dict:
            print('---'*8)
            printdic(di[k])

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


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

f = fib(10)
i =0
while i<10:
    print(next(f))
    i = i+1


'''作业1:
创建一个能接收不定长位置参数(数字)函数,返回是所有参数的和。
 现要求在这个函数每次调用时都有进行屏幕打印(该函数被调用)。
 请在不改动这个函数内部及调用的前提下实现
'''
def callfun(func):
    def warpper(*args,**kwargs):
        print('函数被调用')
        return func(*args,**kwargs)
    return warpper

@callfun

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

def mysum(*args):
    return sum(args)


print(mysum(3,5,2,5,6))
已邀请:

要回复问题请先登录注册

返回顶部