神马是函数
函数: 对功能或者动作的封装
函数的定义
def 函数名(形参列表):
函数体(return)
ret = 函数名(实参列表)
函数的返回值
return,只要执行到return 函数的本次调用就会被停止
1.如果函数不写return, 没有返回值。 接收到的是None
2.写了return。 return后面什么都不写或者return后面的是None. 返回None
3.return 一个值。 返回一个结果
4.return 值,值,值 返回多个值。结果是元组
函数的参数(一部分)
参数:函数在调用的时候给函数传递的信息
形参: 在函数声明的位置的变量
实参: 在函数调用的时候给出的具体的值
传参: 把实参赋值给形参的过程
分类:
实参:
1. 位置参数. 按照位置给形参传递信息
2. 关键字参数. 按照形参的名字给参数传递信息
3. 混合参数. 先位置后关键字
形参:
1. 位置参数
2. 默认值参数, 必须写在位置参数后面
3. 动态参数
1,写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
def odd_index(lis): my_lis = [] for i in range(len(lis)): if i % 2 == 1: my_lis.append(lis[i]) return my_lis lis=[0,1,2,3,4,5,6,7,8,9,] print(odd_index(lis))
1,写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。
def my_len(el): if type(el)==int or type(el)==float: el=str(el) count = 0 for x in el: count += 1 if count >= 5: return True else: return False # test=[1,2,3,4,1,2.3,] test=123456.1 # test="abcdefg" # test=(1,2,3,4,5) if my_len(test): print("这个对象长度大于等于5") else: print("这个对象长度小于5")
1,写函数,检查传入列表的长度,如果大于2,将列表的前两项内容返回给调用者。
def back2(el): if type(el)==int or type(el)==float: el=str(el) count=0 for i in el: count+=1 if count>2: return el[0],el[1] else: return False test=[1,3,2,4,4,4,6,34,5,6] if back2(test): print(back2(test)) else: print("列表小于或等于2")
1,写函数,计算传入函数的字符串中, 数字、字母、空格 以及 其他内容的个数,并返回结果。
def count_str(el): if type(el)==str: num,str_num,white=0,0,0 for i in el: if i.isdigit(): num+=1 elif i.isalpha(): str_num+=1 else: white+=1 return num,str_num,white else: return False test="abcd...1234..1 234sd" if count_str(test): s=count_str(test) print("这串字符%s中包含数字:%s,字母:%s,其他:%s"%(test,s[0],s[1],s[2])) else: print("老铁,请输入字符串")
6,写函数,接收两个数字参数,返回比较大的那个数字。
def compare(num1,num2): if num1>num2: return num1,num2 else: return num2,num1 # else: # return False # num1,num2=1.9,2.1 num1=input("请输入第一个数字:") num2=input("请输入第二个数字:") if (type(num1) == int or type(num1) == float) and (type(num2) == int or type(num2) == float): num1, num2 = float(num1), float(num2) else: print("请重新输入数字") resurt=compare(num1,num2) if resurt: print("%s和%s进行比较,结果是%s>%s"%(num1,num2,resurt[0],resurt[1])) else: print("请输入两组数字进行比较")
写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
def chack(el): dict_new={} for k,v in el.items(): if len(v)>2: dict_new[k]=v return dict_new # dict={"A":"aaaa","B":"Bbbbb","C":"ccc","a":"a"} dic = {"k1": "v1v1", "k2": [11,22,33,44],"new":[1]} print(chack(dic))
写函数,此函数只接收一个参数且此参数必须是列表数据类型,此函数完成的功能是返回给调用者一个字典,此字典的键值对为此列表的索引及对应的元素。例如传入的列表为:[11,22,33] 返回的字典为 {0:11,1:22,2:33}。
def count_list_to_dict(el): if type(el)==list: dic={} for i in range(len(el)): dic[i]=el[i] return dic else: return False lis=[11,22,33] print(count_list_to_dict(lis))
# 9,写函数,函数接收四个参数分别是:姓名,性别,年龄,学历。
# 用户通过输入这四个内容,然后将这四个内容传入到函数中,此函数接收到这四个内容,
# 将内容追加到一个student_msg文件中。
def student_msg(name,sex,age,Bachelor_of_Science): dict={"name":name,"sex":sex,"age":age,"学历":Bachelor_of_Science} f=open("student_msg",mode="a",encoding="utf-8") f.write(str(dict)+"\n") f.flush() f.close() return dict # name="big" # sex="man" # age="18" # Bs="本科" name=input("请录入姓名:") sex=input("请录入性别:") age=int(input("请录入年龄:")) Bs=input("请录入学历:") print(student_msg(name,sex,age,Bs))
8,对第9题升级:支持用户持续输入,Q或者q退出,性别默认为男,如果遇到女学生,则把性别输入女。
def student_msg(name,age,Bachelor_of_Science,sex="男"): dic={"name":name,"sex":sex,"age":age,"学历":Bachelor_of_Science} f=open("student_msg",mode="a",encoding="utf-8") f.write(str(dic)+"\n") f.flush() f.close() return dict # name="big" # sex="man" # age="18" # Bs="本科" def Q_break(el): if el.upper()=="Q": return False flag=True while flag: print("请输入Q退出") sex = input("请录入性别(默认:男-直接回车即可):") if sex=="": sex="男" if Q_break(sex) == False: break name=input("请录入姓名:") if Q_break(name)==False: break age=input("请录入年龄:") if Q_break(age)==False: break Bs=input("请录入学历:") if Q_break(Bs)==False: break student_msg(name,age,Bs,sex)
8,写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作(升级题)。
def change_name(file_name1,file_name2): f=open("./test/%s"%(file_name1),mode="a",encoding="utf-8") f1= open("./test/%s" % (file_name2), mode="a",encoding="utf-8") f.write(content) f.flush() f.close() f1.write(content) f1.flush() f1.close() # print(f.read()) # print(f1.read()) # f1=open("./test",mode="wb") # for i in f: # f1.write(i) # pass file_name1=input("请输入要改的文件名:") file_name2=input("请输入要改的文件名:") # file_name3=input("请输入要改的文件名:") content=input("请输入要修改的内容:[反斜线 (“\n”) 作为换行符]") # content="今天我\n寒夜里看雪飘过\n喜欢你" change_name(file_name1,file_name2)
写一个函数完成三次登陆功能,再写一个函数完成注册功能(升级题)
def register(username,passwd):#定义注册函数,把收到的用户名和密存到文件 dic={} dic["username"]=username.strip() dic["passwd"] =passwd.strip() add_user = open("./users.txt", mode="a", encoding="utf-8") add_user.write(str(dic) + "\n") add_user.flush() add_user.close() flag_use=True flag_passwd=True while flag_use or flag_passwd : username=input("请输入你的用户名(必须大于两个字符!):").strip() if len(username)<3: print("用户名太短,必须大于两个字符!") continue else: flag_use = False file_user=open("./users.txt",mode="r",encoding="utf-8") for el in file_user: dict_name1 = eval(el.strip()) if username == dict_name1["username"]: print("用户名已经存在,请重新输入用户名!") break else: passwd=input("请输入密码:(必须包含大写字母,小写字母或其他字符,还没开发出来)").strip() if len(passwd)<8: print("密码太短,必须大于8个字符!") continue else: flag_passwd=False register(username,passwd) def login(username_input,passwd_input): file_chack=open("./users.txt",mode="r",encoding="utf-8") for i in file_chack: dict_name = eval(i.strip()) if username_input==dict_name["username"] and passwd_input==dict_name["passwd"]: return True else: return False count=0 while count<3: username_input=input("请输入用户名:").strip() passwd_input=input("请输入密码:").strip() back=login(username_input, passwd_input) if back: print("恭喜老铁登录成功!") break else: print("老铁三碗不过岗,下次再来玩!(剩余次数%s):"%(2-count)) count+=1