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
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