函数的魅力你值得拥有* <^> *

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

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值