python基础入门升级版 第3课练习及作业 机器龙007


题目1: 定义一个函数,接收任意3个数字的输入,并按顺序从小到大输出
方法1:
def seq3(x,y,z):
    l1=[x,y,z]
    l1.sort()
    return l1

seq3(3,3,2)

方法2:
def maxthree(x,y,z):
    s1=min(x,y,z)
    s3=max(x,y,z)
    ll=[x,y,z];ll.remove(s1);ll.remove(s3)
    s2=ll[0]
    return s1,s2,s3

maxthree(2,4,1)


题目2:要求创建一个函数,它可以接收,位置参数,不定长位置参数,不定长关键词参数,并按要求输出。
输入班级名,班级特色(如’勤奋’,’颜值高’ )等等不同特色,班级不同同学的姓名与年龄。
要求输出,班级名,班级特色,班级成员,班级成员的平均年龄。
def classinfo(classname,*character,**stuinfo):
    work=character[0]
    look=character[1]
    name=stuinfo.keys()
    aveage=sum(stuinfo.values())/len(stuinfo)
    print('\n','classname:',classname,'\n','workhow:',work,'\n',
         'looklike:',look,'\n','namelist',list(name),'\n',
         'average age:',aveage)
classinfo('Class1','love study','nice',Tom=15,Mary=14,John=16)


题目3:使用reduce函数实现找出一组数字列表中的最大值
from functools import reduce
def findmax(onelist):
    return reduce(lambda a,b:max(a,b),onelist)


题目4:求1000以内能同时被3和7整除的数有哪些。要求使用map与filter函数
方法1:
def div37(i):
    if (i%3==0)&(i%7==0):
        return i
    else:
        pass
print(list(filter(div37,range(1001))))

方法2:
a=list(map(div37,range(1001)))
print([i for i in a if i])


题目5:体现闭包的思想,创建一个三层嵌套的函数,并调用。
def first(slt):
    slt1=slt   #slt是second的全局
    def second(slt1):
        slt2=slt1   #slt1是third的全局
        def third(slt2):
            return 'third',slt2
        return 'second',slt1,third(slt1)
    return 'first',slt,second(slt)

first([1,2])


题目6:
请以round函数,定义一个偏函数roundN,调用为输入一个数字N,返回圆周率后N位的数字(提示:import math math.pi)
请以sorted函数,定义一个偏函数sortedDESC,结果为输入一个序列,返回为按降序排列后序列
import functools
import math
print('pi:',math.pi)
def roundNr(npi,N):
    compstr=[i for i in str(npi) if i!='.']
    print('pi list:',compstr)
    if N>len(compstr):
        print('over length')
    else:
        print("pi's bottom N:",''.join(compstr[len(compstr)-N::]))
roundN=functools.partial(roundNr,math.pi)   #partial函数先传入默认参数

roundN(17)
print('-----------------------------')
roundNr(math.pi,16)

import functools
sortedDESC=functools.partial(sorted,reverse=True)
sortedDESC([3,7,0,4,1,3])


题目7:要求使用map与filter函数,输出一个输入字符串里每个字符出现的次数(提示:结合dict使用实现)
方法1:
string=input('write a string:')
mapstr=list(map(lambda s:{s:string.count(s)},string))

def myfilter(s):
    if list(s.values())[0] != 1:
        return True
    else:
        return False
notonelm=list(filter(myfilter,mapstr))

def deldup(notonelm):
    final=[]
    for i in notonelm:
        if i not in final:
            final.append(i)
        else:
            pass
    return final

deldup(notonelm)+[s for s in mapstr if list(s.values())[0] == 1]

方法2:
string=input('write a string:')
mapstr=list(map(lambda s:{s:string.count(s)},string))
ld=[s for s in mapstr if list(s.values())[0] != 1]
lu=[s for s in mapstr if list(s.values())[0] == 1]
ldu=[]
for i in ld:
    if i not in ldu:
        ldu.append(i)
    else:
        pass
ldu+lu


题目8:创建一个能够快速排序的递归函数
def rankq(listn):
    if len(listn)==1:
        return listn
    else:
        return sorted([listn[0]]+rankq(listn[1:]))

rankq([2,1,3,5,0])


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


题目10:编写一个生成器,实现fib数列的效果
import numpy as np
def fib(n):
    Fib=np.zeros(n).tolist()
    for i in range(n):
        if (i==1)|(i==0):
            Fib[i]=1
        else:
            Fib[i]=Fib[i-1]+Fib[i-2]
    return Fib

def fibyeild():
    for i in fib(10):
        yield i

f1=fibyeild()
print(next(f1))
print(next(f1))
print(next(f1))
print(next(f1))
print(next(f1))
print(next(f1))
print(next(f1))


题目11:创建一个能接收不定长位置参数(数字)函数,返回是所有参数的和。
现要求在这个函数每次调用时都有进行屏幕打印(该函数被调用)。
请在不改动这个函数内部及调用的前提下实现。
def sumvarlen(*numtup):
    print('the function is used')
    return sum(numtup)

sumvarlen(1,2,3,9,11)
已邀请:

机器龙007

赞同来自:


题目6:
请以round函数,定义一个偏函数roundN,调用为输入一个数字N,返回圆周率后N位的数字(提示:import math math.pi)
请以sorted函数,定义一个偏函数sortedDESC,结果为输入一个序列,返回为按降序排列后序列

上面贴的答案是完全自定义偏函数
下面是试图解:请以round函数,定义一个偏函数roundN,调用为输入一个数字N,返回圆周率后N位的数字
import functools
import math
def getbottomN(Npi,N):
    Nlen=len(str(Npi))-1
    frontN=Nlen-1-N   #保留前frontN位小数
    if N>Nlen:
        print('over length')
    elif N==Nlen:
        print(math.pi)
    else:
        if round(math.pi,frontN)<math.pi:
            print([i for i in list(str(math.pi-round(math.pi,frontN))) if i != '.'][0:N])
        else:
            rtail=0.1**frontN
            subrtail=round(math.pi,frontN)-rtail
            print([i for i in list(str(math.pi-subrtail)) if i != '.'][0:N])
            
print(math.pi)
print(getbottomN(math.pi,15))
print(getbottomN(math.pi,2))
print(getbottomN(math.pi,5))
print(getbottomN(math.pi,3))


但是由于python里对pi存储四舍五入机制不是很清楚,有个别位数取值不对

要回复问题请先登录注册

返回顶部