python 函数初识
##########################总结#####################
初识函数
定义: 对动作或者功能的封装.
语法:
def 函数名(形参):
函数体(return)
函数名(实参)
形参: 在函数声明的位置写的变量
1. 位置参数
2. 默认值参数.
实参: 在函数调用的位置给出的具体的值
1. 位置参数
2. 关键字参数
3. 混合 位置, 关键字
传参: 把实参传递给形参的过程
return: 返回, 程序如果运行到return, 函数结束运行.
1. 当我的函数不写return, 表示默认返回None
2. 函数中写return, 返回None
3. return 值, 有一个返回值
4. return 值1, 值2, 值3 多个返回值, 返回的是元组
################################作业######################
2, 写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素, 13579
# 并将其作为新列表返回给调用者。
# def func(lst): # return list(lst[1::2]) # # print(func([1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,34,45,6]))
3,写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。
# def func(s): # return len(s) > 5 # # print(func("哈哈1233"))
4. 写函数,检查传入列表的长度,如果大于2,将列表的前两项内容返回给调用者。
def func(lst):
if len(lst) > 2:
return lst[0], lst[1]
return lst[0:2]
print(func(['11','2','3','4']))
5,写函数,计算传入函数的字符串中, 数字、字母、空格 以及 其他内容的个数,并返回结果。
def func(s=""): shuzi = 0 zimu = 0 kongge = 0 qita = 0 for c in s: if c.isdigit(): shuzi += 1 elif c.isalpha(): zimu += 1 elif c == " ": kongge += 1 else: qita += 1 return shuzi, zimu, kongge, qita print(func("jin san pang zuo tian lai zhao alex yao 5000 kuai $$$"))
6. 写函数,接收两个数字参数,返回比较大的那个数字。
def func(a, b): return a if a > b else b
7.写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
dic = {"k1": "v1v1", "k2": [11,22,33,44]}
PS:字典中的value只能是字符串或列表
def func(dic={}):
for k, v in dic.items():
if len(v) > 2:
dic[k] = v[:2]
return dic
print(func({"k1": "v1v1", "k2": [11,22,33,44]}))
8,写函数,此函数只接收一个参数且此参数必须是列表数据类型,
# 此函数完成的功能是返回给调用者一个字典,
# 此字典的键值对为此列表的索引及对应的元素。
# 例如传入的列表为:[11,22,33] 返回的字典为 {0:11,1:22,2:33}。
def number(b): dic={} for i in range(len(b)): dic[i]=b[i] return dic print(number([11,22,33]))
# 9. 写函数,函数接收四个参数分别是:姓名,性别,年龄,学历。用户通过输入这四个内容,
# 然后将这四个内容传入到函数中,
# 此函数接收到这四个内容,将内容追加到一个student_msg文件中。
# name = input('请输入姓名:') # xinbie = input('请输入性别:') # age = input('请输入年纪:') # xueli = input('请输入学历:') # # def tongji(a,b,c,d): # with open('student_msg',mode="a+",encoding='utf-8') as f: # f.write("%s+%s+%s+%s+\n" %(a,b,c,d)) # tongji(name,xinbie,age,xueli)
10,对第9题升级:支持用户持续输入,Q或者q退出,性别默认为男,如果遇到女学生,则把性别输入女。
# def func(name, age, edu, gender="男"): # f = open("student_msg", mode="a", encoding="utf-8") # f.write(name+"_"+gender+"_"+age+"_"+edu+"\n") # f.flush() # f.close() # while 1: # n = input("请输入你的名字:") # g = input("请输入你的性别:") # a = input("请输入你的年龄:") # e = input("请输入你的学历:") # # if g == "": # func(n, a, e) # else: # func(n, a, e, g) # # content = input("信息录入完毕, 是否继续录入(Q退出)") # if content.upper() == "Q": # break
11,# 写函数,用户传入修改的文件名,与要修改的内容,执行函数,
# 完成整个文件的批量修改操作(升级题, 此题认真阅读和理解. 应该有3个参数才对)
def modify_file(file,old,new):
with open(file,mode='r',encoding='utf-8') as f1,\
open(file+'bak',mode='w',encoding='utf-8') as f2:
for i in f1:
i=i.replace(old,new)
f2.write(i)
os.remove(file)
os.rename(file+'bak',file)
modify_file("a.txt", "name", "bbb")
12. 写一个函数完成三次登陆功能,再写一个函数完成注册功能(升级题)
def regist(): uname = input("请输入你的用户名:") # wusir # 判断一下用户名是否重复: f = open("userinfo", mode="r", encoding="utf-8") for line in f: # alex_123 un = line.split("_")[0] # 文件中的用户名 alex if un == uname: # 一次判断 没有判断出结果.必须等整个循环结束才能出结果 print("对不起. 您的用户名已经重复. ") return else: print("用户名可用!") f.close() upwd = input("请输入你的密码:") f = open("userinfo", mode="a", encoding="utf-8") f.write(uname+"_"+upwd+"\n") f.flush() f.close() # regist() def login(): count = 1 while count <= 3: uname = input("请输入你的用户名:") upwd = input("请输入你的密码:") f = open("userinfo", mode="r", encoding="utf-8") for line in f: u,p = line.strip().split("_") if uname == u and upwd == p: print("登录成功") return True else: print("登录失败, 用户名或密码错误") count += 1 login()