day19
第三次作业:
对函数,内置函数的用法,递归,程序运行顺序的考试
1.列举布尔值为False的值
0 False ‘’ [] () {} None
2.写函数:
根据范围获取其中3或7整除的所有数的和,并返回调用者:
符合条件的数字个数以及符合条件的数字总和,如:def func(start,end):
def func(start,end): res=0 sum=0 while start<=end: if start%3==0 or start%7==0: res+=1 sum+=start start+=1 return res,sum t=func(3,7) print(t) #(3,16)
def func(start,end,res=0, sum=0): if start%3==0 or start%7==0: res+=1 sum+=start if start==end: return res,sum ret=func(start+1,end,res,sum) return ret t=func(3,7) print(t) #(3,16)
3.函数的默认返回值是None
4.简述break/continue/return的区别
break:结束当前循环
continue:结束本次循环进入下一次循环
return:结束函数,并返回结果,默认为None
5.函数传递参数时,是引用还是复制值?并证明 引用(是否为同一个内存地址)
name='sanxi' def func(): print(id(name)) print(id(name)) func() # 34532704 # 34532704
6.简述三元运算书写格式及应用场景
变量=值一 if 条件一 else 值二
将简单的条件判断精简写
7.简述lambda表达式书写格式
函数名=lambda 形参:功能
将简单的函数书写为匿名函数,减少代码
8.使用set集合获取两个列表l1=[11,22,33],l2=[22,33,44]中相同的元素集合
l1=[11,22,33] l2=[22,33,44] print(set(l1)&set(l2))
9.定义函数统计一个字符串中大写字母,小写字母,数字的个数,并以字典为结果返回给调用者
def func(str): dic={} count_num=0 count_cap=0 count_low=0 for i in str: if i.isdigit(): count_num +=1 elif i.isupper(): count_cap+=1 elif i.islower(): count_low+=1 dic['数字']=count_num dic['大写字母']=count_cap dic['小写字母']=count_low return dic print(func('sss'))
10.简述函数的位置参数,关键字参数,默认参数,可变长参数的特点以及注意事项
位置参数:按形参的位置传入叫位置参数,就是普通参数
关键字参数:传入实参时指定形参的值
默认参数:形参直接指定默认值的参数
可变长参数:*args**kwargs,前者只能接收没有位置参数的实参或传入的列表、元组,
11.输出结果
def func(a): return a+100 func=lambda a:a+200 ret=func(10) print(ret) #210
23.将字符串‘三夕’转换成utf-8编码的字节类型
要转换成字节必须指明编码方式
s='三夕' print(s.encode('utf-8')) print(bytes(s,'utf-8')) # b'\xe4\xb8\x89\xe5\xa4\x95' # b'\xe4\xb8\x89\xe5\xa4\x95'
26.利用内置函数zip(),实现功能
l1=['alex',22,33] l2=['is',22,33]
l3=['good',22,33] l4=['guy',22,33]
请获取字符串s='alex_is_good_guy'
l1=['alex',22,33] l2=['is',22,33] l3=['good',22,33] l4=['guy',22,33] print('_'.join(list(zip(l1,l2,l3,l4))[0])) print(zip(l1,l2,l3,l4)) # alex_is_good_guy # <zip object at 0x00B64508>
27.只有调用了函数才会执行函数
函数可以当做参数传递
name='sanxi' def func(): name = "seven" def outer(): name = "eric" def inner(): global name name = "蒙逼了吧..." print(name) print(name) ret=func() print(ret) print(name) # seven # None # sanxi
name = "root" def func(): name = "seven" def outer(): name = "eric" def inner(): global name name = "蒙逼了吧..." print(name) o = outer() print(o) print(name) ret = func() print(ret) print(name) # eric # None # seven # None # root
global关键字用来在函数或其他局部作用域中使用全局变量
nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量
name = "root" def func(): name = "seven" def outer(): name = "eric" def inner(): nonlocal name name = "蒙逼了吧..." inner() print(name) o = outer() print(o) print(name) ret = func() print(ret) print(name) # 蒙逼了吧... # # None # # seven # # None # # root
28.
name='alex' def outer(func): name='sanxi' func() def show(): print(name) outer(show) #alex
name='alex' def outer(): name='sanxi' def inner(): print(name) return inner() ret=outer() print(ret) # sanxi # None
name='alex' def outer(): name='sanxi' def inner(): print(name) return inner #返回一个内存地址 ret=outer() ret() print(ret) result=ret() print(result) # sanxi # <function outer.<locals>.inner at 0x02173030> # sanxi # None
33.利用递归实现1*2*3*4*5*6*7=5040 #########递归的每一层都必须有返回值
def func(x,sum): sum=sum*x if x==7: return sum ret=func(x+1,sum) return ret print(func(1,1))
def func(x): if x==1: return 1 return x*func(x-1) print(func(7))
35.利用with实现同时打开两个文件(一读,一写,并将读取的内容写入到写入模式的文件中)
with open('a.txt','r') as x,open('b.txt','w') as y: y.write(x.read())
37.猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾就多吃了一个,第二天早上又将剩下的桃子吃了一半,还是不过瘾又多吃了一个,以后每天如此,到第十天刚好剩一个,问猴子第一天摘了多少桃子?1534
def func(x,y): if y==10: return x return func((x+1)*2,y+1) print(func(1,1))