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

浙公网安备 33010602011771号