Python 小栈_10:Python 作业练习

作业

 

1、写函数:根据范围获取其中3和7整除的所有数的和,并返回调用者:符合条件的数字个数以及符合条件的数字的总和。


解法一:递归 def func(start, end, a=0, b=0): if start == end: return a, b if start % 3 == 0 and start % 7 == 0: a += 1 b += start ret = func(start+1,end,a,b) return ret ret=func(1,100) print(ret)

>>>4,210 解法二:for循环 def func(start,end): a=[] b=0 for i in range(start,end): if i%3==0 and i%7==0: b+=i a.append(i) print(len(a)) print(b) func(1,100)

>>>4,210
注意:能用递归的函数就一定能用for循环。

2、用集合set的方法,把两个集合合并为一个

s1={1,2,3,4} s2={3,4,5,6} print(set(s1)&set(s2))

>>>{3,4}

3、定义函数统计一个字符串中大写字母、小写字母、数字的个数,并以字典为结果返回给调用者
def satisfy(x):
    A=0
    a=0
    num=0
    for i in x:
        if i.isupper():
            A+=1
        elif i.islower():
            a+=1
        elif i.isdigit():
            num+=1
    dic = {"大写": A, "小写": a, "数字": num}
    return dic
set=satisfy("JHSDKasjfhsh2472341")
print(set)

>>>
{'大写': 5, '小写': 7, '数字': 7}

 4、利用内置函数zip,实现功能,获取字符串s='alex_is_sb'


l1=['alex',1,2,3,4] l2=['is',1,2,3] l3=['sb',2,5,6] new_list=zip(l1,l2,l3) s="_".join(list(new_list)[0]) print(s)


>>>alex_is_sb

 5、函数传递参数时,是引用还是复制值?并证明。(即对于一个函数来说,外面传入的值和里面使用的值的是不是一个内存地址

引用
证明:
name='hello' def show(): print(id(name)) print(id(name)) show() >>>2294808738928 2294808738928

 6、定义函数,实现阶乘

方法一:for循环

def num(a): res=1 for i in range(a,1,-1): res=res*i return res res=num(8) print(res)

>>>40320

  

方法二:reduce函数

from functools import reduce
print(reduce(lambda x,y:x*y,range(1,9)))

>>>40320

 

方法三:

def num(a):
    if a==1:
        return 1
    return a*num(a-1)
res=num(8)
print(res)

>>>40320

  

 

posted @ 2020-03-14 16:32  七七)  阅读(143)  评论(0)    收藏  举报