def add(a,b): ?#def定义一个函数 ? ? print("exec ?add function") ? ? return a+b ? #return(返回值)
print( add(1,2)) result = add(3,4) print(result)
1.方便维护,模块设计 2.减少代码重复利用
函数的参数 ?1.形参:函数定义的时候,指定的参数 ?2.实参:函数调用的时候,传递的参数
?按形参来分: ?1.必选参数 ?2.默认参数 ?3.可变长位置参数 ?4.可变长关键字参数
?实参来分; ?1.位置参数 ?2.关键字参数
必选参数 def ?stuinfo(name,age,sex): ? ? print(f"myname is {name}, my age is {age}, my sex is {sex}") #位置参数 stuinfo("sc",4,'f')
默认参数 def ?stuinfo(name,age,sex="f"): ? ? print(f"myname is {name}, my age is {age}, my sex is {sex}")
stuinfo("sc",4) stuinfo("sc",5,"m") ?
#关键字参数 stuinfo("sc",sex='m',age=6) 注意定义顺序 默认参数放在必选参数后面 注意调用属性 关键字参数必须放在位置参数的后面
可变长位置参数 def myargs(name,*num): ? ? print(f"{name}:{num}") ? ? print(type(num), *num) ?#-->print(type(num),1,2) 相当于解包,输出3个数值
myargs("sc") myargs("sc1",1) myargs("sc2",1,2)
pcking(打包)和 unpacking(解包) packing 1,2 --> 元组(1,2) *num --->unpacking (1,2) --> 1,2
可变长关键字参数 def myargs2(**num): ? ? print(num)
myargs2(a=1,b=2) myargs2(a=1) myargs2(a=1,b=2,c=3) packing ---> a=1,b=2 --> {'a': 1, 'b': 2} unpacking --> {'a': 1, 'b': 2} -- > ?a=1,b=2
形参定义顺序 (必选参数,可变长位置参数,默认参数,可变长关键字参数) 实参 (位置参数,关键字参数) def sumt(*args): ? ? sum1=0 ? ? for i in args: ? ? ? ?sum1+=i ? ? ? ? print({sum1}) ? ? print(f"和为: {sum(args)}") sumt(1,2,3,4,5)
函数的return语句 退出函数,并且返回结果的 一个函数一旦执行到return就退出,不会执行后面的语句 如果函数没有return语句,默认返回None,如果return后面不接人任何表达式,也是返回None return可以有多个 return一次也可以返回多个值
def maxnum(x,y): ? ? print("teturn 语句。。。。") ? ? if x>y: ? ? ? ? print("return x") ? ? ? ? return x ? ? elif x<y: ? ? ? ? print("return y") ? ? ? ? return y ? ? return x,y ? ? print("return end...")
result = maxnum(3,5) i,j = maxnum(5,5) print(f"结果为{result},i为{i},j为{j}")
#匿名函数 lambda 参数1 参数2 : 表达式 不需要创建函数名 只能有一个表达式,不用写return,该表达式的结果就是返回值
def add(a,b): ? ? return ?a+b print(add(1,3))
sum1 = lambda *d,**f: print(f"{sum(d)} - {sum(f)}") sum1(1,4,6,7,8)
使用匿名函数来返回两个数之间的最大值: max = lambda x,y: x if x>y else y
max1 = lambda x,y: max(x,y)
使用匿名函数,将传入浮点数保留两位小数: f = lambda x:float('%.2f'%x) f = lambda x:round(x,2) ? ? ? ? #round() 方法返回浮点数x的四舍五入值 print(f(3.234523))
#递归函数 自己调用自己,形成循环 定义出口条件,什么时候结束递归 通常是把一个大问题通过寻找规律可以缩小规模的时候使用
求取n的阶乘 n!=1*2*3....*n f(n) = n*f(n-1)
def add1(n): ? ? if n == 1: ? ? ? ? return 1 ? ? return n*add1(n-1) print(add1(6))
使用递归实现斐波拉契数列 1,1,2,3,5,8,13 第一第二都是1,后面的数都是前两个数的和 f(n) = f(n-1)+f(n-2)
def add1(n): ? ? if n == 1 or n ==2: ? ? ? ? return 1 ? ? return add1(n-1) + add1(n-2) print(add1(13))
函数的参数传递本质上都是传递引用 变量的空间作用域
不可变数据类型 def func1(x): ? ? print(x) ? ? #局部变量 ? ? x=100 ? ? print(x)
#全部变量 x=1 func1(x) print(x)
#可变数据类型 def f(x): ? ? x[0] = 100 ? ? print(x)
a = [1,2,3] f(a) print(a)
参数定义的时候,默认参数避免定义成一个可变数据类型 def f(a=[]): ? ? a.append(1) ? ? print(a) f() f() f()
变量的作用域 def f(): ? ? #x=2 ?如果你要申明全局变量,那就不要定义同名的局部变量,否则报错 ? ? global x ? #申明x为全局变量 ? ? x=5
x=1 f() print(x)
变量名的解析(LEGB) 1.在本地变量中找 -- locals 2.在任意上层函数中找 ?-- enclosing 3.在全局作用域 ?-- globals 4.在内置作用域 ?-- builtin print(a) def f(): ? ? #x = 2 ? ? def f2(): ? ? ? ? #x = 3 ? ? ? ? #print(x) ? ? ? ? print(__name__) ? ? f2() #x=1 f()
文档注释 文档注释是包,模块,类或者函数第一个引用三引号引起来的字符串
内建函数和工厂函数 内建:Python已经建好的,我们无需导入,直接调用就好 内建函数:Python已经建好的函数 内建方法:一般是针对面向对象而言,是类的方法。 内建方法就是指一个自带的对象所带的方法。如list的的pop操作
工厂:所谓工厂函数就是指这些内建函数都是类对象? 它们看上去象函数, 实质上他们是类。? 当你调用它们时, 实际上是生成了该类型的一个实例, 就象工厂生产货物一样。
? 用户密码复杂度验证 (封装成函数) ? 长度超过8位(必须) +1分 ? 包括大、小写字母.数字.其它符号,以上四种至少三种 +1分 ? 不能有长度超过或等于3的子串重复 +1分 ? 密码的评分等级,默认2分,以上条件满足一条加1分 ? 返回密码的评分等级,及要改进的点: ? 如 return 3, ['长度小于8', '密码没有由3种以上字符组成']
passwd=input("请输入你的密码") score=2
def func0(): ? ? func1() ? ? func2() ? ? if sum(lst1) < 3: ? ? ? ? print("没有三种以上的字符") ? ? func3() ? ? print(f'密码等级为:{score}')
def func1 (): ? ? global score ? ? if len(passwd) < 8: ? ? ? ? print('密码长度不够哦!') ? ? else: ? ? ? ? score += 1 ? ? return score
lst1=[0,0,0,0] def func2(): ? ? global score ? ? for i in passwd: ? ? ? ? if sum(lst1) >= 3: ? ? ? ? ?score += 1 ? ? ? ? ?break ? ? ? ? else: ? ? ? ? ? ? if i.isupper(): ? ? ? ? ? ? ? ? lst1[0]=1 ? ? ? ? ? ? elif i.islower(): ? ? ? ? ? ? ? ? lst1[1]=1 ? ? ? ? ? ? elif i.isdigit(): ? ? ? ? ? ? ? ? lst1[2]=1 ? ? ? ? ? ? else: ? ? ? ? ? ? ? ? lst1[3]=1 ? ? return lst1
def func3(): ? ? global score ? ? score1 = 0 ? ? for i in range(len(passwd)): ? ? ? ? substr=passwd[i:i+3] ? ? ? ? subcount = passwd.count(substr) ? ? ? ? if subcount >= 3: ? ? ? ? ? ? print(f'{substr}有三个重复出现的字符串') ? ? ? ? ? ? score1=0 ? ? ? ? ? ? break ? ? ? ? else: ? ? ? ? ? ? score1=1 ? ? score = score + score1
func0()
购物系统 需求分析 1.登录注册模块 ? ? 欢迎进入三乐购物系统 ? ? 1.登录 ? ? ? ?需要用户名和密码 ? ? ? ?登陆成功就跳转到购物菜单 ? ? 2.注册 ? ? ? ?需要用户名和密码 ? ? ? ?注册成功就回到登录初始化界面 2.购物模块 ? ? ?1.充值 ? ? ?2.选择购买商品 ? ? ? ? a查看商品列表 ? ? ? ? b选购商品---检测余额是否充足 ? ? ?3.查看购物车 ? ? ?4.结算 user_dict = {"root":{"passwd":"123456","money":0}, ? ? ? ? ? ? ?"admin":{"passwd":"admin","moeny":0} ? ? ? ? ? ? ?}
product_list = {'1': {'name':'苹果', 'price':32}, ? ? ? ? ? ? ? ? '2': {'name':'香蕉', 'price':55}, ? ? ? ? ? ? ? ? '3': {'name':'橙子', 'price':88}}
def check_login(username, passwd): ? ? if username in user_dict and passwd == user_dict[username]["passwd"]: ? ? ? ? return True ? ? return False
def register(username, passwd): ? ? if username not in user_dict: ? ? ? ? user_dict[username] = {"passwd":passwd,"money":0} ? ? ? ? return True ? ? return False
def ?menu(): ? ? print("登陆成功,进入购物".center(30," ")) ? ? print("1.充值 ? ?".center(30," ")) ? ? print("2.选择购买商品".center(30," ")) ? ? print("3.查看购物车 ".center(30," ")) ? ? print("4.结算 ? ?".center(30, " "))
shopcart=[] #消费的金额为0 price=0 def show_product(): ? ? global price ? ? print("商品列表".center(30," ")) ? ? print("gid".center(10," "),"name".center(10, " "),"price".center(10," ")) ? ? print("1".center(10, " "), "苹果".center(10, " "), "32".center(10, " ")) ? ? print("2".center(10, " "), "香蕉".center(10, " "), "55".center(10, " ")) ? ? print("3".center(10, " "), "橙子".center(10, " "), "88".center(10, " "))
print(f"欢迎进入三乐购物系统".center(30,"*")) while True: ? ? print(f"1.登陆系统".center(30, " ")) ? ? print(f"2.注册用户".center(30, " ")) ? ? print(f"3.退出系统".center(30, " ")) ? ? option = input("请输入你的选择:") ? ? if option == "1": ? ? ? ? username = input("请输入用户名:") ? ? ? ? passwd = input("请输入密码:") ? ? ? ? if check_login(username, passwd): ? ? ? ? ? ? while True: ? ? ? ? ? ? ? ? menu() ? ? ? ? ? ? ? ? option1 = input("请输入你的选择:") ? ? ? ? ? ? ? ? if option1 == "1": ? ? ? ? ? ? ? ? ? ? money = input("请输入充值金额:") ? ? ? ? ? ? ? ? ? ? user_dict[username]["money"] += int(money) ? ? ? ? ? ? ? ? ? ? print(f"当前用户余额为:{user_dict[username]['money']}") ? ? ? ? ? ? ? ? elif option1 == "2": ? ? ? ? ? ? ? ? ? ? show_product() ? ? ? ? ? ? ? ? ? ? if user_dict[username]["money"] < 0: ? ? ? ? ? ? ? ? ? ? ? ? print(f"{user_dict[username]['money']}不足,欢迎下次光顾") ? ? ? ? ? ? ? ? ? ? ? ? break ? ? ? ? ? ? ? ? ? ? option2 = input("请输入你要购买的商品") ? ? ? ? ? ? ? ? ? ? if option2 == '1': ? ? ? ? ? ? ? ? ? ? ? ? price += 12 ? ? ? ? ? ? ? ? ? ? ? ? shopcart.append('苹果 12元') ? ? ? ? ? ? ? ? ? ? elif option2 == '2': ? ? ? ? ? ? ? ? ? ? ? ? price += 55 ? ? ? ? ? ? ? ? ? ? ? ? shopcart.append('香蕉 55元') ? ? ? ? ? ? ? ? ? ? elif option2 == '3': ? ? ? ? ? ? ? ? ? ? ? ? price += 88 ? ? ? ? ? ? ? ? ? ? ? ? shopcart.append('橙子 88元') ? ? ? ? ? ? ? ? ? ? else: ? ? ? ? ? ? ? ? ? ? ? ? print("输入错误") ? ? ? ? ? ? ? ? elif option1 == "3": ? ? ? ? ? ? ? ? ? ? print("您购买的商品如下") ? ? ? ? ? ? ? ? ? ? print("商品名称 ?商品价格") ? ? ? ? ? ? ? ? ? ? for i in shopcart: ? ? ? ? ? ? ? ? ? ? ? ? print(i) ? ? ? ? ? ? ? ? ? ? print(f"一共消费{price}!") ? ? ? ? ? ? ? ? elif option1 == "4": ? ? ? ? ? ? ? ? ? ? money = user_dict[username]["money"] - price ? ? ? ? ? ? ? ? ? ? print(f'您所剩的余额为{money}!') ? ? ? ? ? ? ? ? ? ? print("欢迎下次光临,祝您一路生风!!!") ? ? ? ? ? ? ? ? ? ? break ? ? ? ? else: ? ? ? ? ? ? print("登陆失败!") ? ? elif option == "2": ? ? ? ? username = input("请输入用户名:") ? ? ? ? passwd = input("请输入密码:") ? ? ? ? if register(username, passwd): ? ? ? ? ? ? print("注册成功!") ? ? ? ? ? ? print(user_dict) ? ? ? ? else: ? ? ? ? ? ? print("注册失败!") ? ? elif option == "3": ? ? ? ? Q = input("退出系统!!") ? ? ? ? break ? ? else: ? ? ? ? print("输入错误,请重新输入") ? ? ? ? break
|