函数作业
1、写一个函数,接收n个数字,求解这n个数字的和
1 def get(*args): 2 j=0 3 for i in args: 4 j=i+j 5 return(j) 6 print(get(1,2,3))
2、读代码、回答代码中打印出来的值a,b,c分别是什么,为什么?
技巧:一般情况下代码的执行顺序是从上往下执行,一点问题没有,但是有两个意外,一个是while循环另一个就是函数,所以一定要注意函数的执行顺序
a=10 b=20 def func(a,b):#这里的a,b是形参和第5行代码中的实参a,b没有任何关系 print(a,b)#从第五行得到的参数在这里得到执行 c=func(b,a)#第一次读到这里时候,是把括号里面的两个参数提出来然后交给第四行代码。第二次代码读到这里,由于前面的代码没有return,所以c不能接收到func(a,b)运行的结果,所以下面的print(c)结果是none print(c) #上面这段代码按照行号的执行顺序是:1>2>3>5>4>5>6 D:\anoconda\python.exe F:/python/python学习/人工智能/第一阶段day2/练习.py 20 10 None Process finished with exit code 0
再加上一个技巧:注意没有return,就意味着返回值是none
加上return
a=10 b=20 def func(a,b): print(a,b)#从第五行得到的参数在这里得到执行 return a,b c=func(b,a)#第一次读到这里时候,是把括号里面的两个参数提出来然后交给第四行代码。第二次代码读到这里,由于前面的代码有return,所以c接收到func(a,b)运行的结果,所以下面的print(c)结果是一个元组 print(c) #上面这段代码按照行号的执行顺序是:1>2>3>5>4>5>6 D:\anoconda\python.exe F:/python/python学习/人工智能/第一阶段day2/14.py 20 10 (20, 10) Process finished with exit code 0
3、读代码、回答代码中打印出来的值a,b,c分别是什么,为什么?
a=10 b=20 def func(a,b): a=3#这里由第7行的位置参数,变成关键字参数 b=5 print(a,b) c=func(b,a)#同样这里没有return,默认返回值是none print(c) #代码执行顺序:1>2>3>6>4>5>6>7 D:\anoconda\python.exe F:/python/python学习/人工智能/第一阶段day2/14.py 3 5 None Process finished with exit code 0
4、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者
自己的答案1,
l=[] def func(*args): j=0 for i in args: j=j+1 if j%2==0: pass else: l.append(i) return i func(1,2,3,4,5) print(l) D:\anoconda\python.exe F:/python/python学习/人工智能/第一阶段day2/14.py [1, 3, 5] Process finished with exit code 0
自己做的方法2,这个方法能够满足题目的意思
l=[] def func(*args): for i in args[0]: if args[0].index(i)%2==0: pass else: l.append(i) func((1,2,3,4,5)) print(l) D:\anoconda\python.exe F:/python/python学习/人工智能/第一阶段day2/14.py [2, 4] Process finished with exit code 0
老师的方法,直接用切片,很精妙
def func(l): return(l[1::2])#直接用切片 print(func((1,2,3,4))) D:\anoconda\python.exe F:/python/python学习/人工智能/第一阶段day2/14.py (2, 4) Process finished with exit code 0
5、写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5.
自己的答案
def func(l): if len(l)>=5: print('false') else: print('true') func('zxcd') D:\anoconda\python.exe F:/python/python学习/人工智能/第一阶段day2/14.py true Process finished with exit code 0
老师的答案
def func(l): return len(l)>=5 print(func('abcd5'))
注意技巧:再函数中一定要慎用print,提倡使用return,因为使用return后,后面的代码还可以套用结果继续执行,但是使用print后就不能套用代码的结果了
6、写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者
自己的代码
def func(l): return l[0:2] print(func((0,1)))
7、写函数,计算传入字符串中数字、字母、空格以及其他的个数,并返回结果。
def func(s): dic={'num':0,'alpha':0,'space':0,'other':0} for i in s: if i.isdigit(): dic['num']+=1 elif i.isalpha(): dic['alpha']+= 1 elif i.isspace(): dic['space']+= 1 else: dic['other']+= 1 return dic print(func('djljlj+ disfsph'))
8、写函数、检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容,并返回结果。
def func(s): if type(s) is str and s:#当参数是字符串,这里and s的意思是且这个s字符串不为空 for i in s: if i=='': return True elif s and type(s) is list or type(s) is tuple:#当参数是列表或者元组 for i in s: if not i: return True elif not s:#或者这个字符串、列表或者元组本身就为空 return True print(func([1,'',1]))
9、写函数,检查传入字典的每一个value,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
dic={'k1':[1,2,3],'k2':'kxcv'} def func(dic): for k in dic:#遍历字典中的每一个键 if len(dic[k])>2: dic[k]=dic[k][:2] return dic print(func(dic)) D:\anoconda\python.exe F:/python/python学习/人工智能/第一阶段day2/14.py {'k1': [1, 2], 'k2': 'kx'} Process finished with exit code 0
10、写函数,接收两个数字参数,返回比较大的那个数字
自己的做法:
def func(a,b): return max(a,b) print(func(1,2))
老师的做法1:
def func(a,b): if a>b: return a else: return b print(func(1,2))
老师的做法这里引出一个新的知识点:三元运算符
a=1 b=5 c=a if a>b else b#这就是三元运算符 print(c)
三元运算符的结构:变量=条件返回True的结果 if 条件 else 条件返回False的结果
适用条件:
必须要有结果
必须要有if和else
只能是简单的情况
三元运算符的目的是为了是代码更为简单
运用三元运算符来修改代码
def func(a,b): return a if a>b else bprint(func(1,2))