一、函数的初始
程序中如果没有函数的引用,会产生重复代码多,可读性差的特点。
函数就是封装一个功能。
二、函数名,函数体,关键字,函数的返回值
def my_len(): #def 关键字 定义一个函数 #my_len 函数名书写规则与变量一样 #def与函数名中间一个空格 #函数名():加上冒号 #函数体 count = 0 for j in l1: count += 1 print(count) my_len
函数的执行:函数名+()
while True: print(222) print(666) print(len([1,23,4]))
函数的返回值:
写函数,不要在函数中写print()
return
1、在函数中,遇到return结束函数。
2、将返回值给函数的调用者。
无 return = return None
return 1个值 该值是什么,就直接返回给函数的调用者,函数名()
return 多个值,将多个值放到一个元组中,返回给函数的调用者。
三、函数的传参
函数分为形参和实参:
形参:形式参数,不代表实际的变量。
形参传参:1、位置传参。按顺序,一一对应。
2、默认参数。传参则覆盖,不传则默认,默认参数永远在位置参数的后面。
实参:实际参数,带入形参中的变量
形参传参:1位置传参。按顺序,一一对应。
2、关键字传参,不按顺序,一一对应。
3、混合传参,关键字参数永远在位置参数的后面。
# def my_len(l): # l 形式参数 形参 # print(l) # count = 0 # for j in l: # count += 1 # return count # a = 'fdsafdsafdsagfsadf' # print(my_len(a)) # 实际参数 ,实参 # print(my_len([1,2,3])) #实参角度: #1,位置传参。按顺序,一一对应。 # def func(a,b,c): # print(a) # print(b) # print(c) # func('fdsafdas',3,4) #写一个函数,功能比大小, # def max_min(a,b): # if a > b: # return a # else: # return b # num1 = int(input('请输入一个数:')) # num2 = int(input('请输入另一个数:')) # print(max_min(num1,num2)) #ps: 三元运算 # def max_min(a,b): # if a > b: # return a # else: # return b # print(max_min(100,200)) # def max_min(a,b): # return a if a > b else b # print(max_min(300,200)) #2,关键字传参,不按顺序,一一对应。 # def max_min(a,b): # return a if a > b else b # print(max_min(b = 300,a = 200)) #3,混合传参,关键字参数永远在最后面。 # def func1(a,b,c,d,e): # print(a) # print(b) # print(c) # print(d) # print(e) # func1(1,2,d=4,c=3,e=5) # func1(1,4,d=2,c=3,e=5) # 按照形参角度。 #1,位置传参。按顺序,一一对应。 # def func(a,b,c): # print(a) # print(b) # print(c) # func('fdsafdas',3,4) #2,默认参数。 def func(a,b=666): # print(a,b) # func(1,2) # func(1,777) func(1,2) # s = 'alex'.center(30,'*') # print(s) # def Infor_entry(username,sex='男'): # with open('name_list',encoding='utf-8',mode='a') as f1: # f1.write('{} {} '.format(username,sex)) # # while True: # username = input('请输入姓名(男生以1开头)').strip() # if '1' in username: # username = username[1:] # Infor_entry(username) # else: # Infor_entry(username,'女')
# 2、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。 ''' def new_file(x): li = [] for i in range(len(x)): if i%2 == 1: li.append(x[i]) return li l1 = ['adf','asdf','ab'] #写的函数 print(new_file(l1)) ''' ''' def not_know_file(x): li = [] for i in range(len(x)): if i%2 == 1: li.append(x[i]) return li not_know_list = input('>>>') l1 = not_know_file(not_know_list) print(l1) ''' # 3、写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。 ''' def decide_value(x): return 'length > 5' if len(x) > 5 else 'length <= 5' decide = [1,2,3,4,5,6] print(decide_value(decide)) ''' ''' def decide_value(x): new_list = [] for i in x: new_list.append(i) if len(x) > 5: return '输入的对象大于5' else:return '输入的对象小于等于5' value_input = input(">>") print(decide_value(value_input)) ''' # 4、写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。 ''' def length_list(x): new_list = [] for i in x: new_list.append(i) if len(x) > 2: return x[0:2] new_input = ['adfasd','sadf','saf'] print(length_list(new_input)) ''' # 5、写函数,计算传入字符串中【数字】、【字母】、【空格] 以及 【其他】的个数,并返回结果。 ''' def leng_count(x): return len(x) new_input = input('>>>') print(leng_count(new_input)) ''' # 6、写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容,并返回结果。 ''' def decide_value(x): for i in x: if i == ' ': return '含有空内容' else:return '不含空内容' value_input = [1,2,' ',4] print(decide_value(value_input)) ''' # 7、写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。 # dic = {"k1": "v1v1", "k2": [11,22,33,44]} # PS:字典中的value只能是字符串或列表 ''' def dic_value(dic): for i,j in dic.items(): if len(j) > 2: j = j[0:2] dic[i] = j return dic dic = {"k1": "v1v1", "k2": [11, 22, 33, 44]} print(dic_value(dic)) ''' # 8、写函数,接收两个数字参数,返回比较大的那个数字。 ''' def max_num(x,y): return x if x > y else y one_input = input('>>') two_input = input('>>') print(max_num(int(one_input),int(two_input))) ''' # 9、写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作(进阶)。 import os def file_revise(new_name,old_name,new_content,old_content): with open(old_name,encoding='utf-8') as f1, open(new_name,'w',encoding='utf-8') as f2: for i in f1: i = i.replace(old_content,new_content) f2.write(i) os.remove(old_name) os.rename(new_name,old_name) new_file_name = 'new.txt' old_file_name = 'old.txt' new_file_conten = 'aaaa' old_file_conten = 'bbbb' file_revise(new_file_name,old_file_name,new_file_conten,old_file_conten) # 10、写一个函数完成三次登陆功能,再写一个函数完成注册功能(进阶) def authentication(): i = 0 while i < 3: i += 1 user_name = input('username') user_passwd = input('password') with open('text.txt',encoding='utf-8') as f: for j in f: j =j.strip().split(':') if j[0] == user_name and j[1] == user_passwd: return True def register(): username = input('username') password = input('password') with open('text.txt','a',encoding='utf-8') as f1: f1.write(' ') f1.write(username) f1.write(':') f1.write(password) return '注册成功' msg = '''请登录按A/a进行账号密码输入,按R/r进行注册''' print(msg) a_input = input("请输入>>") if a_input.upper()== 'A': authentication_name = authentication() if authentication_name == None: print('登录失败,请按R进行注册') name_input = input('请输入') if name_input.upper() == 'R': register() else: print("SB") elif a_input.upper() == 'R': register()