函数基础:
1.写函数,计算传入数字参数的和。(动态传参):用不固定参数的*args不限定输入的参数,然后用for循环把每个元素加到一起,函数里的args不用加*
def sum1(*args): j = 0 for i in args: # 不固定参数输入元祖后,调用不需要加* j = j + i print(j) sum1(1,2,3,4,5,6)
2.写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作:原来打算打开文件后,遍历每行数据,每行数据为字符串S--》每行数据用,分割成元素为字符串的列表A--》判断是否需要修改--》修改后赋值给原来的列表A--》再把列表A用‘,’.join(list)转成也就是原来的字符串S--》再用seek,truncate写回原来文件。
也就是说不用弄一个空列表就能实现修改信息写回文件,然而写的时候发现问题出在--》修改后赋值给原来的列表A 这里,要赋值就要再用一次循环,然后用到枚举enumerae来定位索引值,而枚举列表的元素类型为str,刚好原来列表A的元素也是字符串,字符串是不可变的元素,不能通过枚举索引修改元素,所以还是得弄一个空列表l,把修改后的信息加到空列表l里--》做完后感觉用字典的话应该不用像列表一样做这么多for循环,因为字典索引是用key,赋值不用index索引去找
用到的东西:str.split(‘,‘),list.append(str),文件写入方法(for i in list ,f.write(‘\n),seek(0),truncate()),for index,i in enuerate(list) -->if correction-->list[index] = i
def file_change(filename,newinfo,oldinfo): f = open(filename,‘r+‘) d = f.readlines() # 信息变成列表,元素是一个一个的字符串,一个字符串就是一行 l = [] n = 0 for i in d: for i1, e in enumerate(i): # 在d里i是每行信息字符串的列表i e = i.split(‘,‘) # 把每行信息字符串变成以,隔开的列表e # print(i) for index2,j in enumerate(e): if j == oldinfo: j = newinfo # 每个小的字符串检查,如果有符合的替换掉 e[index2] = j # 通过索引方式把修改后的值赋值回遍历的列表e n += 1 # 加一个功能,计算修改的次数 e2 = ‘,‘.join(e) # 把列表e用,重新组成字符串e2 l.append(e2) # 把e2加到空列表l # print(l) f.seek(0) f.truncate() # 清空文件内容 f = open(filename, ‘w‘) for k in l: f.write(‘{}\n‘.format(k)) # 把i信息重新写入 f.close()file_change(‘D:test.txt‘,‘AAA‘,‘BBB‘)
3.写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容。:all(),any()只能判断可迭代对象
def check(n): print(‘没有空内容‘) if all(n) else print(‘有空内容‘) check(None)TypeError: ‘NoneType‘ object is not iterable
4.写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
用到:dict.keys(),dict.values(),dict.items()--K,V
dic = {"k1": "v1v1", "k2": [11,22,33,44]} PS:字典中的value只能是字符串或列表
dic = {"k1": "v1v1", "k2": [11,22,33,44]}def check(i): for k,v in i.items(): if len(v) > 2: i[k] = v[:2] print(i) check(dic)
答案用的return i和else continue有什么作用?不用输出也是一样
解释闭包的概念
不懂,回去再看一遍
原文地址:https://www.cnblogs.com/jackfree/p/9640631.html