zoukankan      html  css  js  c++  java
  • 巨蟒python全栈开发-第9天 初识函数

    一.今日主要内容总览(重点)
    1.什么是函数?
    f(x)=x+1
    y=x+1
    函数是对功能或者动作的封装
    2.函数的语法和定义
    def 函数名():
    函数体
    调用:函数名()
    3.关于函数的返回值
    return:返回
    (1)当程序没写过return,不返回任何结果.如果你非要接收,接收到的是None
    (2)当函数写return 值,有一个返回值.
    (3)当函数写了 return 值1,值2,值3...... 返回多个结果,多个结果打包成元组
    (4)当程序执行到return,函数结束执行
    总结:return,停止函数调用
    4.函数的参数(部分)
    小括号是什么,小括号表示调用,传参
    1.什么是参数:参数是给函数传递的信息
    形参:在函数us恒明的位置写的变量
    1.位置参数
    2.默认值
    3.动态传参(明天讲解), *,**
    实参:在函数调用的时候给函数传递的具体值
    1.位置参数
    2.关键字参数
    3.混合:位置,关键字
    传参:把实参给形参的过程

    DAY9-初识函数

    二.今日内容大纲
    1.什么是函数?
    2.函数的语法和定义
    3.关于函数的返回值
    4.函数的参数(部分)

    内容详解:
    1.什么是函数?
    (1)引子
    约妹子
    print('拿出手机')
    print('打开陌陌')
    print('找一个心仪的小姐姐')
    print('有没有时间啊,聊一聊人生')
    print('一起出来吃饭唱歌,看电影')
    开心,上瘾,再来一次
    print('拿出手机')
    print('打开陌陌')
    print('找一个心仪的小姐姐')
    print('有没有时间啊,聊一聊人生')
    print('一起出来吃饭唱歌,看电影')
    为了减少代码的重复
    while循环也不行

    2.函数的语法和定义
    (1)初尝函数
    先计划一下,约应该怎么约...然后在需要的时候吧这个事情拿出来做一次.
    先定义好一个函数,后期需要用,再调用就可以直接用了了
    理解:我们可以使用函数来定义一个动作
    define 定义
    def yue():
        #描述你的动作
        print('拿出手机')
        print('打开陌陌')
        print('找一个心仪的小姐姐')
        print('有没有时间啊,聊一聊人生')
        print('一起出来吃饭唱歌,看电影')
    #调用函数
    yue()
    print('上班')
    print('上班')
    print('上班')
    yue()

    结果:

    拿出手机
    打开陌陌
    找一个心仪的小姐姐
    有没有时间啊,聊一聊人生
    一起出来吃饭唱歌,看电影
    上班
    上班
    上班
    拿出手机
    打开陌陌
    找一个心仪的小姐姐
    有没有时间啊,聊一聊人生
    一起出来吃饭唱歌,看电影

    下面的程序对比上边的程序

    def yue():
        #描述你的动作
        print('拿出手机')
        print('打开陌陌')
        print('找一个心仪的小姐姐')
        print('有没有时间啊,聊一聊人生')
        print('一起出来吃饭唱歌,看电影')
    #调用函数
    print('上班')     #先打印这一行
    yue()
    print('上班')
    print('上班')
    print('上班')
    yue()
    #避免了重复写代码,也就是重复造轮子
    (2)
    def yue():
        print('你好')
    print(yue)  #16位 结果:内存地址:<function yue at 0x000001C666601E18>
    函数名字是一个内存地址,内部的代码块存储在内存地址内

    3.关于函数的返回值
    (1)
    return
    继续约#超级重点
    def yue():
        #描述你的动作
        print('拿出手机')
        print('打开陌陌')
        print('找一个心仪的小姐姐')
        print('有没有时间啊,聊一聊人生')
        print('一起出来吃饭唱歌,看电影')
        #得到一个结果
        return '小姐姐'
    yue()
    这里调用的函数,返回值就返回给这里
    谁调用就返回给谁,没有人调用就不返回,这里就是这种情况,不会返回'小姐姐'
    (2)
    def yue():
        #描述你的动作
        print('拿出手机')
        print('打开陌陌')
        print('找一个心仪的小姐姐')
        print('有没有时间啊,聊一聊人生')
        print('一起出来吃饭唱歌,看电影')
        #得到一个结果
        return '小姐姐'
    ret=yue()   #这里调用的函数,返回值就返回给这里,结果就会有"小姐姐"了
    print(ret)
    (3)
    return多个字符串,调用的结果除原来的代码块,还有return的多个值,以元组的形式返回
    同时返回多个结果,返回的是元组
    def yue():
        #描述你的动作
        print('拿出手机')
        print('打开陌陌')
        print('找一个心仪的小姐姐')
        print('有没有时间啊,聊一聊人生')
        print('一起出来吃饭唱歌,看电影')
        #得到一个结果
        return '小姐姐','大妈','流浪汉'  #同时返回多个结果,返回的是元组
    ret=yue()   #这里调用的函数,返回值就返回给这里
    print(ret)

    结果:

    结果:
    拿出手机
    打开陌陌
    找一个心仪的小姐姐
    有没有时间啊,聊一聊人生
    一起出来吃饭唱歌,看电影
    ('小姐姐', '大妈', '流浪汉')
    (4)
    当代码块下面有多个return时,最终调用的返回,只返回第一个返回值
    def yue():
        #描述你的动作
        print('拿出手机')
        print('打开陌陌')
        print('找一个心仪的小姐姐')
        print('有没有时间啊,聊一聊人生')
        print('一起出来吃饭唱歌,看电影')
        #得到一个结果
        return '小姐姐'    #只能返回小姐姐,其他的都不会执行
        return'大妈'
        return'流浪汉'
    ret=yue()       #这里调用的函数,返回值就返回给这里
    print(ret)
    (5)
    函数的返回值问题总结:
    函数可以有返回值,也可以没有返回值
    函数如果没有返回值,在函数最后执行完毕的时候会默认返回None
    在函数中只写了return,但是没有写返回值
    在函数中写了return 值, 返回一个结果
    在函数中写 return 值1,值2,值3 ,最终返回值会以元组形式返回
    def yue():
        #描述你的动作
        print('拿出手机')
        print('打开陌陌')
        print('找一个心仪的小姐姐')
        return None     #返回的是None,后面的就不再执行了
        print('有没有时间啊,聊一聊人生')
        print('一起出来吃饭唱歌,看电影')
    ret=yue()
    print(ret)

    结果:

    拿出手机
    打开陌陌
    找一个心仪的小姐姐
    None
    (6)
    练习:写一个函数,在函数内部,要求用户输入两个数,返回大的那个数
    我的两种解法
    #解法一:
    def big():
        a=1
        b=2
        if a>b:       #普通写法
            print(a)
        else:
            print(b)
    big()
    
    #解法二:
    def big():
        a=1
        b=2
        print(a if a>b else b)  #三元运算符
    big()
    #老师讲解1
    def func():#定义函数
        a=int(input('请输入第一个数:'))
        b=int(input('请输入第二个数:'))
        if a>b:
            return a
        else:
            return b
    ret=func()
    print(ret)
    
    #老师讲解2 ,#只有Python是用这种:三元运算符或者叫三目运算符
                #模式:值1 if 条件 else 值2
    def func():#定义函数
        a=int(input('请输入第一个数:'))
        b=int(input('请输入第二个数:'))
        #三目运算
        c=a if a>b else b  #c装的是a,b中大数
        #模式:值1 if 条件 else 值2
        return c
    ret=func()
    print(ret)
    4.函数的参数(部分)
    (1)回顾上边讲的
    def chi():
        print('池什么')
        print('酸菜鱼')
    chi()   #小括号表示调用
    (2)
    def yue(tools):
        #描述你的动作
        print('拿出手机')
        print('打开%s'%tools)
        print('找一个心仪的小姐姐')
        print('有没有时间啊,聊一聊人生')
        print('一起出来吃饭唱歌,看电影')
    yue('微信')
    yue('探探')
    yue('陌陌')
    上边定义的函数,如果调用的时候,没有参数,则会报下面的错误
    # yue()    #报错:  yue() missing 1 required positional argument: 'tools'
    (3)
    def chi(zhushi,fushi,tang,tiandian):
        print("主食:%s"%zhushi)
        print('副食:%s'%fushi)
        print('汤:%s'%tang)
        print('甜点:%s'%tiandian)
    # chi('大米饭','锅包肉',tiandian='哈根达斯','酸辣汤') #错误写法,关键字必须在位置参数后面
    chi('大米饭','锅包肉',tiandian='哈根达斯',tang='酸辣汤') #正确写法
    #规则,调用时,先写位置参数,再写关键字参数
    (4)#练习
    def regist(name,age,edu,gender):
        print('name:',name)
        print('age:',age)
        print('edu:',edu)
        print('gender:',gender)
    regist('赵玉冰','19','中专','')
    regist('韩志远','25','本科','')
    regist('董忠浩','25','高中','')
    regist('刘力','21','本科','')
    (5)总结
    需求:根据你指定的APP去约
    在括号内的东西叫参数
    在函数声明的位置,写的参数叫形参
    在函数调用的地方,写的参数叫实参
    传参:把实参传递给形参的过程叫做传参

    在函数调用的时候,必须保证所有的参数都有值
    yue() #错误的,必须保证有参数

    1.关于实参:
    (1)位置参数, 按照位置给形参传递信息
    (2)关键字参数,按照形参声明的变量名进行传递
    (3)混合参数.位置参数+关键字(规定)
    2.形式参数(2):#今天只说两个简单的
    1.位置参数,按照位置声明的变量
    2.默认值参数
    3.当默认值和位置参数同时存在的时候,规定:默认值必须写在后面
    4.动态传参(明天)
    总结:所有带等号的,都写在后面

    今日作业:
    2,写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,
    并将其作为新列表返回给调用者。
    def fun(a):
        lst=[]
        for i in range(len(a)):
            if i%2==1:
                lst.append(a[i])
        return lst
    k=fun([1,2,3,4,5,6,7,0])
    print(k)
    a=fun((1,2,3,4,5,6,7))
    3,写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。
    def func(a):
        if len(a)>5:
            print('长度大于5')
        else:
            print('长度小于等于5')
    func('skt')
    func((1,2,3,4,5,6,7))
    func([1,2,3,4,5,6,7,8,9])
    4,写函数,检查传入列表的长度,如果大于2,将列表的前两项内容返回给调用者。
    def func(a):
        if len(a)>2:
            # return a[0],a[1]      #以元组形式返回给调用者
            return a[0:2]           #以列表形式返回给调用者
    a=func([1,2,3])
    print(a)
    5,写函数,计算传入函数的字符串中, 数字、字母、空格 以及 其他内容的个数,并返回结果。
    def func(canshu):
        num=0
        zimu=0
        kongge=0
        qita=0
        for i in canshu:
            if i.isdigit():
                num+=1
            elif i.isalpha():
                zimu+=1
            elif i is " ":
                kongge+=1
            else:
                qita+=1
        return '数字:',num,'字母:',zimu,"空格:",kongge,'其他:',qita
        #一定要注意return放置的位置
    s=func(' 1w3v')
    print(s)
    6,写函数,接收两个数字参数,返回比较大的那个数字。
    def func():
        a=int(input('请输入一个数:'))
        b=int(input('请输入另一个数:'))
        if a>b:
            return a
        else:
            return b
    k=func()
    print('返回值是:',k)
    7,写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,
    并将新内容返回给调用者。
    dic = {"k1": "v1v1", "k2": [11,22,33,44]}
    PS:字典中的value只能是字符串或列表
    def func(a):
        for i in a:
            a[i]=a[i][0:2]
        return a
    s=func({"k1": "v1v1", "k2": [11,22,33,44]})
    print(s)
    #如果长度小于2不操作
    8,写函数,此函数只接收一个参数且此参数必须是列表数据类型,此函数完成的功能是返回给调用者一个字典,
    此字典的键值对为此列表的索引及对应的元素。例如传入的列表为:[11,22,33]
    返回的字典为 {0:11,1:22,2:33}。
    def func(lst):
        dic={}
        for i in range(len(lst)):
            dic[i]=lst[i]
        return dic
    a=func([11,22,33])
    print(a)
    9,写函数,函数接收四个参数分别是:姓名,性别,年龄,学历。
    用户通过输入这四个内容,然后将这四个内容传入到函数中,此函数接收到这四个内容,
    将内容追加到一个student_msg文件中。
    #方法一:我的想法
    def func(name,sex,age,xueli):
        with open('student_msg',mode='a',encoding='utf-8') as f:
            f.write(name)       #注意,这个write只能接收一个参数,且必须是字符串类型的
            f.write(sex)
            f.write(age)
            f.write(xueli)
    func('小冬瓜	','','28	','小学本科	')
    #方法二:另一种想法
    def w(name,sex,age,edu):
        f = open("student_msg",mode='w',encoding="utf-8")
        f.write("姓名:%s
    性别:%s
    年龄:%s
    学历:%s" % (name,sex,age,edu))   #一句话搞定写入,格式化
        f.flush()
        f.close()
    w("corn","",21,"专科")
    10,对第9题升级:支持用户持续输入,Q或者q退出,性别默认为男,如果遇到女学生,则把性别输入女。
    方法一:
    while 1:
        a=input('请输入要输入的姓名:')
        b=input('请输入要输入的性别:')
        c=input('请输入要输入的年龄:')
        d=input('请输入要输入的学历:')
        if a.upper()=="Q"or b.upper()=="Q"or c.upper()=="Q"or d.upper()=="Q":
            break
        def func(name,age,xueli,sex=''):
            with open('student_msg',mode='a',encoding='utf-8') as f:
                f.write(name)       #注意,这个write只能接收一个参数,且必须是字符串类型的
                f.write(sex)
                f.write(age)
                f.write(xueli)
        func(a,b,c,d)
    方法二:
    while 1:
        s=input('要输入的格式(姓名,年龄,学历,性别)或者输入Q退出:')
        if s.upper()=='Q':
            break
        a,b,c,d=s.split(',')
        def func(name,age,xueli,sex=''):
            with open('student_msg',mode='a',encoding='utf-8') as f:
                f.write(name)       #注意,这个write只能接收一个参数,且必须是字符串类型的
                f.write(sex)
                f.write(age)
                f.write(xueli)
        func(a,b,c,d)
    方法三:
    def func(name, age,edu,sex =""):
        f = open("student.msg", mode="a", encoding="utf-8")
        f.write(name+"_"+str(age)+"_"+sex+"_"+edu+"
    ")
        f.flush()
        f.close()
    
    while 1:
        content = input("请问. 是否要录入学生信息, 输入q退出:")
        if content.upper() == "Q":
            break
        n = input("请输入名字:")
        a = input("请输入年龄:")
        s = input("请输入性别:")
        e = input("请输入学历:")
        if s == "":
            func(n,a,e)
        else:
            func(n,a,e,s)
    11,写函数,用户传入修改的文件名,与要修改的内容,执行函数,
    完成整个文件的批量修改操作(升级题, 此题认真阅读和理解. 应该有3个参数才对)。
    def mod(r,m,n):
        import  os
        with open(r,mode="r",encoding="utf-8")as f, 
                open("a1.txt",mode="w",encoding="utf-8")as f1:
            for line in f:
                s = line.replace(m,n)
                f1.write(s)
        os.remove(r)
        os.rename("a1.txt",r)
    
    mod("a.txt","我不好!","我很好!")
    12,写一个函数完成三次登陆功能,再写一个函数完成注册功能(升级题)
    参考网上的操作
    def dl():
        count = 3
        while count > 0:
            account = input("请输入你的账号:")
            password = input("请输入你的密码:")
            count -= 1
            for i in dic:
                if account == i and password ==dic[i]:
                    print("登录成功")
                    return
    
            print('账号或者密码错误,请重新输入(还剩%s次机会):' % count)
            x = input("按Q返回上一菜单,其他键继续:")
            if x.upper().strip() == "Q":
                return
    
    
    def login():
        while 1:
            account = input("请输入你注册的账号(6位以上):")
            password = input("请输入你的密码:")
            password1 = input("请重新输入一遍你的密码:")
            if len(account) <= 6 or account.isdigit() == False:
                print("账号不合法!请重新输入!")
            elif password == password1:
                dic[account] = password
                print("恭喜你,注册成功!")
                return
            else:
                print("你输入的两次密码不匹配,请重新输入")
                x = input("按Q返回上一菜单,其他键继续:")
                if x.upper().strip() == "Q":
                    break
    dic = {}
    menus = ("1, 登录", "2, 注册", "3, 退出")
    while 1:
        for item in menus:
            print(item)
        s = input('请输入您要选择的菜单项:')
        if s == '1':
            dl()
        elif s == "2":
            login()
        elif s == "3":
            break
        else:
            print("指令错误!")
    #利用文件操作来进行操作(有时间再升级成这样)
    明日默写。
    ①,return的作用。
    ②,传参的几种方法,每个都简单写一个代码。
    如,实参,按位置传参。
    def func(x,y):
    Pass
    func(‘a’,’b’)




     
  • 相关阅读:
    不会吧不会吧,还有开发不会Java填充PDF模板数据的,赶紧看看吧
    关于Redis分布式锁这一篇应该是讲的最好的了,先收藏起来再看!
    iOS-----后台运行
    iOS-----使用GCD实现多线程
    iOS-----线程同步与线程通信
    iOS-----多线程之NSThread
    iOS-----MFMessageCompose 和 MFMailComposeViewController的使用方法
    iOS-----使用AddressBookUI管理联系人
    iOS-----使用addressBook管理联系人之修改联系人
    iOS-----简易地CocoaAsyncSocket使用
  • 原文地址:https://www.cnblogs.com/studybrother/p/10075188.html
Copyright © 2011-2022 走看看