###########函数############
#函数的定义
def关键字,依次写出函数名、括号、括号中的参数和冒号 :
在缩进块中编写函数体,函数的返回值用 return 语句返回。
name为该函数的参数
def 函数名(name): pass (函数体) return 返回值
定义一个什么事也不做的空函数,可以用 pass 语句;
pass 可以用来作为占位符,还没想好怎么写函数的代码,
就可以先放一个 pass ,让代码能运行起来
def fun(): pass fun() print('abc')
#函数的调用
定义函数不会执行里边的内容
def hello(): print('hello') hello() #函数的调用
#函数的嵌套
def fentiao(): print("is fentiao.....") def cooffee(): print("cooffee") cooffee() #函数嵌套定义函数时,要将定义的函数调用,否则不会执行 fentiao()
#形参与实参
def welcome(name): #name为形参,定义函数时的变量 print("welcom "+name) welcome('cooffee') #cooffee,floatong为实参,真实的数据信息,调用函数时传的参数 welcome('floating')
def fun(): print(fun.x) fun.x=3 #动态添加 fun() # del fun.x ##动态删除 # fun()
#形参的分类
位置参数:形参和实参的个数必须保持一致
def getInfo(name,age): #按照位置传参数 print(name,age) getInfo(12,'name') getInfo(age=18,name='cooffee')
默认参数
有多个参数时,变化大放前面,变化小的放后面;
必选参数在前,默认参数在后
def mypow(x,y=2): #默认参数y ''' 求x的y次方,y默认值为2 :param x: :param y: ''' print(x**y) mypow(4) mypow(4,3)
可变参数
可变参数就是传入的参数个数是可变的,可以是 1 个、2 个
到任意个,还可以是 0 个。*args
def mySum(*args): ''' 用户可以输入任意个数值,计算数值的和 注意: *args是可变参数 args是元组数据类型 :param args: :return: ''' sum = 0 for item in args: sum += item print(sum) mySum(1, 2, 3, 4)
关键字参数
关键字参数允许你传入 0 个或任意个含参数名的参数;
这些关键字参数在函数内部自动组装为一个 dict;
关键字参数用**kwargs
def getStuInfo(name,age,**kwargs): ##*kwargs关键字参数 ''' **kwargs是一个字典;可以传递任意多的key-value对 :param name: :param age: :param kwargs: :return: ''' print(name,age) print(kwargs) getStuInfo("westos",19,hobbies=['code','running'],gender='female')
#参数解包
score=(12,23,45,67,78,89) minScore,*middleScore,maxScore = score #*middleScore将中间的数据装起来 print(minScore,middleScore,maxScore) #没有解包 print(minScore,*middleScore,maxScore) #解包
对list tuple set解包时,只需要在变量前加*
nums = [1,3,4,6,23,56] nums1= (1,3,4,6,23,56) nums2={1,3,4,6,23,56} print(*nums) print(*nums1) print(*nums2)
对字典解包:一个星号是获取所有的key值
d=dict(a=1,b=2) print(*d)
# 参数数据类型的判断
isinstance(参数,类型)
isinstance(1, int)
Out[4]: True
isinstance(1.0, int)
Out[5]: False
isinstance(1, (int, float))
Out[6]: True
isinstance(True, (int, float))
Out[7]: True
isinstance([1,2,3], (int, float))
Out[8]: False
#参数的组合
参数组合是指可以必选参数、 默认参数、 可变参数和关键
字参数一起使用。
参数定义的顺序必须是:必选参数、 默认参数、可变参数和
关键字参数。
#函数的返回值:函数运算的结果,还需要进一步操作时,给一个返回值;
return用来返回函数执行结果的,如果没有返回,默认为None;
一旦遇到return,函数执行结束,后面的代码不会执行,(yield)
若return后有多个参数时,返回的数据类型为元组
def mypowandsum(x,y=2): ''' 求x的y次方,以及x与y的和,y的默认值为2 :param x: :param y: :return: ''' return x**y,x+y print(mypowandsum(5))
#全局变量与局部变量
局部变量:在函数内部定义的普通变量,只在函数内部起作用,函数执行结束,变量会自动删除
可变:函数内部改变会影响外部变量的值
不可变:函数内部改变不会影响外部变量的值
全局变量:在整个程序中使用的变量
global关键字:强制将局部变量转换为全局变量
a=1 #全局变量 print("outside:",id(a)) def fun(): a=5 #局部变量 print("inside",id(a)) fun() print(a)
a=1 print("outside:",id(a)) def fun(): global a a=5 print("inside",id(a)) fun() print(a,id(a))
############小测试############
1.后台管理员只有一个用户: admin, 密码: admin
当管理员登陆成功后, 可以管理前台会员信息.
会员信息管理包含:
添加会员信息
删除会员信息
查看会员信息
退出
def Useradd(): ''' 添加会员信息 :return: ''' print("添加会员信息".center(50, '*')) addUser = input("添加会员名:") if addUser in userinfo: print("用户%s已经存在" % (addUser)) else: li=['name','age','passwd'] userdir=dict() for i in li: msg=input("请输入%s:" %(i)) userdir.setdefault(i,msg) userinfo.setdefault(addUser,userdir) print("添加用户%s成功" % (addUser)) def Userdel(): ''' 删除会员信息 :return: ''' print("删除会员信息".center(50, '*')) delUser = input("删除会员名:") if delUser in userinfo: userinfo.pop(delUser) print("删除会员%s成功!" % (delUser)) else: print("%s用户不存在" %(delUser)) def Userlook(): ''' 会员信息查看 :return: ''' print("查看会员信息".center(50, '*')) # print("\t用户名\t密码") # userCount = len(users) # 2 # # 0,1 # for i in range(userCount): # print('\t%s\t%s' % (users[i], passwds[i])) userlook=input("请输入用户名:") if userlook in userinfo: for k,v in userinfo[userlook].items(): print(k+':'+v) else: print("%s用户不存在" %(userlook)) print("管理员登陆".center(50, '*')) inuser = input('UserName:') inpasswd = input('Password:') userinfo={ 'cooffee':{ 'name':'cooffee', 'age':'18', 'passwd':'cooffee', }, 'floating':{ 'name':'floating', 'age':'18', 'passwd':'floating' }, } if inuser == 'admin' and inpasswd == 'admin': print("管理员登陆成功!") print("会员管理".center(50, '*')) while True: print(""" 操作目录 1 - 添加会员信息 2 - 删除会员信息 3 - 查看会员信息 4 - 退出 """) choice = input("请选择你的操作:") if choice == '1': Useradd() elif choice == '2': Userdel() elif choice == '3': Userlook() elif choice == '4': exit() else: print("请输入正确的选择") else: print("管理员登陆失败!")
2.打地老鼠游戏
编写代码模拟打地鼠的小游戏,
假设一共有5个洞口,老鼠在里面随机一个洞口;
人随机打开一个洞口,如果有老鼠,代表抓到了,
如果没有,继续打地鼠;但是地鼠会跳到其它洞口
import random mosedirt = { '1': 'None', '2': 'None', '3': 'None', '4': 'None', '5': 'None', } def mouseIn(): number=str(random.randint(1,5)) mosedirt.update({number:'Yes'}) return mosedirt trycount=0print("老鼠可能出现的洞口号有1,2,3,4,5") while trycount<5: trycount+=1 number1=input("请你输入老鼠所在的洞口号:") if number1 in ['1','2','3','4','5']: mouseIn() if mosedirt[number1]=='Yes': print("恭喜你抓到老鼠了!") mosedirt.update({number1:'None'}) else: print("老鼠不在%s号洞口!" %(number1)) mosedirt.update({number1:'None'}) else: print("不存在%s号洞口" %(number1)) else: print("游戏结束!")
3.打字软件正确率
编写函数,计算字符串匹配的准确率。(类似于打字软件)
orginStr为原始内容,userStr为用户输入内容
def worldright(str1, str2): ''' str1为原始内容,str2为用户输入内容 :param str1: :param str2: :return: ''' count = 0 for i in range(len(str1)-1): if str1[i] == str2[i]: count += 1 return (count / float(len(str1))) * 100 print("%.2f%%" %(worldright('orginStr', 'userStr')))