zoukankan      html  css  js  c++  java
  • Day 09 初识函数

    1. 函数

      函数是对功能的封装

        语法:

      def 函数名(形参列表):
        函数体(代码块, return)

      调用:
        函数名(实参列表)

    # while 1:
    #     print("打开手机")
    #     print("打开陌陌")
    #     print("搜索一下你心仪的对象")
    #     print("走吧. 出去玩啊")
    #     print("出发!")

    2. 返回值
      return : 在函数执行的时候. 如果遇到return. 直接返回
        1.如果函数什么都不写, 不写return, 没有返回值. 得到的是None
        2.在函数中间或者末尾写return, 返回的是None
        3.在函数中写return 值. 返回一个值.
        4.在函数中可以返回多个返回值, return 值1, 值2, 值3...., 接收的是元组

    #多个返回值接收到的是元组

    # ret = yue()
    # print(ret)
    # yue()

    # 写函数. 让用户输入a和b, 返回a+b的结果

    # def sum():
    #     a = int(input("请输入一个a:"))
    #     b = int(input("请输入一个b:"))
    #     c = a + b
    #     return c
    # ret = sum()
    # print(ret)

    3. 参数
      函数执行的时候给函数传递信息.
        *形参:函数声明的位置的变量
        *实参:函数调用的时候给的具体的值
         传参:把实参交给形参的过程

      1. 实参:
        1. 位置参数, 按照形参的参数位置, 给形参传值
        2. 关键字参数, 按照形参的名字给形参传值
        3. 混合参数. 即用位置参数, 也用关键参数
      2. 形参:
        1. 位置参数
        2. 默认值参数 先位置后默认值
        3. 动态参数

    # 在函数声明的位置的变量:形参
    # def yue(tools): # tools就是个变量
    #     print("打开手机")
    #     print("打开%s" % tools)
    #     print("搜索一下你心仪的对象")
    #     print("走吧. 出去玩啊")
    #     print("出发!")
    #
    # # 在函数调用的地方给的具体的值: 实参
    # yue("探探")
    # yue("微信")
    # yue("陌陌")
    # yue("alex")
    
    #
    # 位置参数, 当函数的参数很多的时候, 必须要记住每一个位置是什么
    # 关键字参数, 按照形参的名字给形参传值
    # def chi(good_food, no_good_food, drink, ice_cream): # 形参位置参数
    #     print(good_food, no_good_food, drink, ice_cream)
    #
    # # chi("大白梨", "法国大蜗牛", "卫龙辣条",  "哈根达斯")
    # # chi(drink="神仙水", ice_cream="老冰棍", good_food="盖浇饭", no_good_food="锅包肉")
    # chi("盖浇饭", "汉堡", ice_cream="巧乐兹", drink="营养快线") # 顺序:先位置后关键字
    
    
    def regist(name, phone, gender=""): # 默认值参数必须在参数列表的最后
        print(name, phone, gender)
    
    regist("阿凡达", "10086")
    regist("阿凡提", "10010")
    regist("阿甘", "10000")
    regist("女神","13315251","")

    09. 前⽅⾼能-初识函数

    本节内容:

    • 1. 什么是函数
    • 2. 函数定义, 函数名, 函数体以及函数的调⽤
    • 3. 函数的返回值
    • 4. 函数的参数

    ⼀. 什么是函数
    我们可以先去定义⼀个事 情或者功能. 等到需要的时候直接去⽤就好了. 那么这⾥定义的东⻄就是⼀个函数.

    函数: 对代码块和功能的封装和定义

    执行流程:

    三. 函数的返回

    执⾏完函数之后. 我们可以使⽤return来返回结果. 函数中return的使⽤:

    返回值可以是多个结果:

    总结⼀下:

    1. 遇到return. 此函数结束, 函数后⾯的东⻄将不会再执⾏

    2. return 返回值 关于返回值: 如果return什么都不写 或者 ⼲脆不写return .那么返回的就是None 如果

    return后⾯写了⼀个值. 则调⽤者可以接收⼀个结果 如果return后⾯写了多个结果, 则调⽤者可以接收

    ⼀个tuple, 调⽤者可以直接解构成多个变量 OK. 完美. 可以得到结果了. 但是我们的约的⽅式是不是有

    点⼉问题呢?, 陌陌现在还能约到 么?约不到了吧. 该换探探了. 那过两天探探也死掉了呢? 是不是还会

    有⼀个替代品. 那你想. 有⼀个替代的.你就需要去改⼀下代码. 是不是不太合适了. 最好的⽅式是不是想

    ⽤什么约就 ⽤什么约? ok. 我们可以通过函数的参数来给函数传递⼀些信息.

    四. 函数的参数 参数, 函数在调⽤的时候指定具体的⼀个变量的值. 就是参数. 语法:

    复制代码
    def fun():
        print("你无情,你残酷,你无理取闹!")
        print("我哪里无情,哪里残酷,哪里无理取闹!")
        print("你就是无情,就是残酷,就是无理取闹!")
        return "你才无情,你才残酷,你才无理取闹!","我没有无情,没有残酷,没有无理取闹!","ending"
    
    a,b,c = fun()
    print(a)
    print(b)
    print(c)
    复制代码
    参数:在函数执行过程中给函数才传递的信息
    形参:在函数声明的位置,声明出来的变量
    实参:在函调用过程中,实际你给函数传递的值

    复制代码
    game(Internet,games):#形参
        print("打开手机")
        print("连上%s" % Internet)
        print("打开%s" % games)
        print("玩到手机关机!")
    #函数的参数的个数没有限制
    game("数据","王者荣耀")#实参
    game("WiFi","刺激战场
    复制代码

    注意参数的顺序:

    复制代码
    mation(id,name,age,sex):
        print("序号:%s
    姓名:%s
    年龄:%s
    性别:%s" % (id,name,age,sex))
    
    information(1,"corn",21,"男")#位置参数
    information(id = 2,name = "corn1",age = 22,sex = "女")#关键字参数
    
    information(3,"corn2",age = 23,sex = "不详")#混合参数:注意顺序,位置参数在前,关键字参数在后
    
    #默认值参数和为主参数的混合参数:位置参数在前,默认值参数在后
    
    def regist(id,name,age,sex = "男"):#默认值参数
        print("序号:%s
    姓名:%s
    年龄:%s
    性别:%s" % (id,name,age,sex))
    regist(1,"corn",21)
    regist(2,"corn1",22)
    regist(3,"corn3",23
    复制代码

    注意, 必须先声明位置参数, 才能声明默认值参数

    作业:

    二.写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
    def odd(lst):
        li = []
        for i in range(len(lst)):
            if i%2 != 0:
                li.append(lst[i])
        return li
    
    a = odd([1,2,3,4,5,6,7,8,9])
    print(a)
    三.写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。
    def i(lst):
        if len(lst) > 5:
            return"长度大于5"
        else:
            return"长度不大于5"
    
    a = i([1,2,3,4,5,6])
    print(a)
    四.写函数,检查传入列表的长度,如果大于2,将列表的前两项内容返回给调用者。
    def i(lst):
        if len(lst) > 2:
            return lst[0],lst[1]
        else:
            return"列表长度不大于2"
    a = i([1,2,3])
    print(a)
    五,写函数,计算传入函数的字符串中, 数字、字母、空格 以及其他内容的个数,并返回结果。
    def time(l):
        num = 0
        zm = 0
        blank = 0
        other = 0
        for i in l:
            if i.isdigit() == True:
                num += 1
            elif i.isalpha() == True:
                zm += 1
            elif i == " ":
                blank += 1
            else:
                other += 1
        return "数字出现了%s次,字母出现了%s次,空格出现了%s次,其他出现了%s次" % (num,zm,blank,other)
    a = time("1 2 3 4 5 6 a,b,c,d,e,f,")
    print(a)
    六,写函数,接收两个数字参数,返回比较大的那个数字。
    def n(num,num1):
        if num > num1:
            return num
        elif num < num1:
            return num1
        else:
            return"两个数一样大"
    
    a = n(32,34)
    print(a)
    七.写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
    PS:字典中的value只能是字符串或列表
    dic = {"k1": "v1v1", "k2": [11,22,33,44]}
    def zd(dic):
        for i in dic:
            if len(dic[i]) > 2:
                dic[i] = dic[i][0:2]
        return dic
    
    a = zd({"1":"dasd","2":[1,2,3,4,5,6],"3":"你好!"})
    print(a)
    八,写函数,此函数只接收一个参数且此参数必须是列表数据类型,
    此函数完成的功能是返回给调用者一个字典,此字典的键值对为此列
    表的索引及对应的元素。例如传入的列表为:[11,22,33] 返回的字典
    为 {0:11,1:22,2:33}。
    def d(lst):
        dic = {}
        for i in range(len(lst)):
            dic[i] = lst[i]
        return dic
    
    a = d([11,22,33,44,55,66,77,88])
    print(a)
    九,写函数,函数接收四个参数分别是:姓名,性别,年龄,学历。用户通过输入这四个内容,
    然后将这四个内容传入到函数中,此函数接收到这四个内容,将内容追加到一个student_msg文件中。
    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,"专科")
    十,对第9题升级:支持用户持续输入,Q或者q退出,性别默认为男,如果遇到女学生,则把性别输入女。
    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)


    十一,写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作(升级题)。

    
    
    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","我不好!","我很好!")
    
    
    十二,写一个函数完成三次登陆功能,再写一个函数完成注册功能(升级题)
    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("指令错误!")
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    洛谷 P2678 跳石头
    洛谷 P1145 约瑟夫
    LibreOJ #515. 「LibreOJ β Round #2」贪心只能过样例
    洛谷 P2966 [USACO09DEC]牛收费路径Cow Toll Paths
    网络编程 --- TCP
    进程
    并发编程
    网络编程 --- UDP
    网络编程
    面向对象编程 --- 反射
  • 原文地址:https://www.cnblogs.com/songhuasheng/p/9445252.html
Copyright © 2011-2022 走看看