• python之道09


    整理函数相关知识点,写博客。

    1. 看代码写结果
    1.
    def func():
        for i in range(3):
            print(i)
        return 666
    print(func()) # 0 1 2 666
    
    2.
    def func():
        for i in range(3):
            return 666
    print(func())  # 666
    
    3.
    def func():
        while 1:
            print(666)
            return 111
    print('太白')
    print(func())
    print('23期') # 太白 666 111 23期
    
    1. 写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。

    答案

    l1 = [11, 22, 33, 44, 55]
    def func(a):
        l2 = []
        for j in range(len(a)):
            if j % 2 != 0:
                l2.append(a[j])
        return l2
    ret = func(l1)
    print(ret)
    
    # 输出结果
    [22, 44]
    
    # 讲解答案
    def func(l): returnl[1::2]
    print(fun([1,2,3,4]))
    
    1. 写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。

    答案

    l1 = [11, 22, 33, 44, 55, 77]
    def func(a):
        return True if len(a) > 5 else False
    ret = func(l1)
    print(ret)
    
    # 输出结果
    True
    
    # 讲解
    def func(argv):
        if len(argv) > 5:
            return True
        else:
            return False
    
    def func(argv):
        return True if len(argv)>5 else False
    
    def func(argv):
        return len(argv) > 5
    print(func('fhdskafdsa'))
    print(func('f'))
    
    1. 写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。

    答案

    # 方法一: 
    # 如果列表长度小于2
    l1 = []
    def func(a):
        return a[:2] if len(a) > 2 else a[:2]
    ret = func(l1)
    print(ret)
    # 输出结果
    []
    
    
    # 方法二: 
    # 如果列表长度小于2
    l1 = []
    def func(a):
        l2 = []
        if len(a) > 2:
            l2.append(l1[:2])
            return l2[0]
        else:
            return l2
    ret = func(l1)
    print(ret)
    
    # 输出结果
    [] # 应该返回的是之前列表的本身 
    
    # 如果列表长度大于2
    l1 = [11, 22, 33, 44, 55, 77]
    def func(a):
        l2 = []
        if len(a) > 2:
            l2.append(l1[:2])
            return l2[0]
        else:
            return l2
    ret = func(l1)
    print(ret)
    # 输出结果
    [11, 22]
    
    # 讲解结果
    def func(argv):
        if len(argv) > 2:
            return argv[:2]
        else:
            return argv
    
    def func(argv):
        return argv[:2] if len(argv) > 2 else argv
    l1 = [1,2,3,4]
    l1 = [1,]
    print(l1[:2])
    
    
    def func(argv):
        return argv[:2]
    
    # func([1,2,3,4])
    print(func([1,]))
    
    1. 写函数,计算传入函数的字符串中,[数字]、[字母] 以及 [其他]的个数,并返回结果。

    答案

    s1 = 'djeid2djsoj7dfj789k#$@'
    def func(a):
        num = 0
        letter = 0
        other = 0
        for i in a:
            if i.isdecimal():
                num += 1
            elif i.isalpha():
                letter += 1
            else:
                other += 1
        return f'数字个数:{num},字母个数:{letter},其他:{other}'
    ret = func(s1)
    print(ret)
    
    # 输出结果
    数字:5个,字母:14个,其他:3个
    
    # 讲解
    s1 = '中国afdf'
    print(s1.isalpha())
    
    1. 写函数,接收两个数字参数,返回比较大的那个数字。

    答案

    # 位置传参
    def func(x,y):
    
        return x if x > y else y
    ret = func(5,10)
    print(ret)
    
    # 返回结果
    10
    
    # 关键字传参
    def func(x,y):
    
        return x if x > y else y
    ret = func(y=5,x=10)
    print(ret)
    
    # 返回结果
    10
    
    1. 写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
      dic = {"k1": "v1v1", "k2": [11,22,33,44]}
      PS:字典中的value只能是字符串或列表

    答案

    dic = {"k1": "v1v1", "k2": [11,22,33,44]}
    def func(a):
        dic_new = {}
        for i,j in a.items():
                if len(j) > 2:
                    dic_new[i]=j[:2]
        return dic_new
    ret = func(dic)
    print(ret)
    # 输出结果
    {'k1': 'v1', 'k2': [11, 22]}
    
    1. 写函数,此函数只接收一个参数且此参数必须是列表数据类型,此函数完成的功能是返回给调用者一个字典,此字典的键值对为此列表的索引及对应的元素。例如传入的列表为:[11,22,33] 返回的字典为 {0:11,1:22,2:33}。

    答案

    # 传入列表
    l1 = [11,22,33,44,55]
    def func(a):
        dic1 = {}
        if type(a) == list:
            for i,j in enumerate(a):
                dic1[i]=j
    
        else:
            return '警告:传入的参数必须是列表数据类型'
        return dic1
    ret = func(l1)
    print(ret)
    # 结果
    {0: 11, 1: 22, 2: 33, 3: 44, 4: 55}
    
    # 传入非列表
    l1 = 'dfajdsfj123'
    def func(a):
        dic1 = {}
        if type(a) == list:
            for i,j in enumerate(a):
                dic1[i]=j
    
        else:
            return '警告:传入的参数必须是列表数据类型'
        return dic1
    ret = func(l1)
    print(ret)
    # 输出结果
    警告:传入的参数必须是列表数据类型
    
    # 讲解答案
    def func(argv):  # [11,22,33]
        # return {0:argv[0],1:argv[1],}
        dic = {}
        for i in range(len(argv)):
            dic[i] = argv[i]
        return dic
    
    print(func([11,22,33,44,56]))
    
    1. 写函数,函数接收四个参数分别是:姓名,性别,年龄,学历。用户通过输入这四个内容,然后将这四个内容传入到函数中,此函数接收到这四个内容,将内容追加到一个student_msg文件中。

    答案

    def func(name,sex,edu,age):
        text = f'姓名:{name},性别:{sex},年龄:{age},学历:{edu}'
        with open('student_msg',mode='a',encoding='utf-8') as f:
            f.write('
    ' + text)
    
        return '已添加,内容:',text
    ret = func('太白金星','男','博士',18)
    print(ret)
    # 输出结果
    ('已添加,内容:', '姓名:太白金星,性别:男,年龄:18,学历:博士')
    student_msg中内容:
    姓名:太白金星,性别:男,年龄:18,学历:博士
    姓名:太白金星,性别:男,年龄:18,学历:博士
    
    # 讲解答案
    def register(name,sex,age,edu):
        with open('student_msg',encoding='utf-8',mode='a') as f1:
            f1.write(f'{name},{sex},{age},{edu}
    ')
    n,s,a,e = input('请依次输入姓名,性别,年龄,学历并以逗号隔开').strip().replace(',',',').split(',')  # '立业,男,35,小本'
    register(n,s,a,e)
    
    
    1. 对第9题升级:支持用户持续输入,Q或者q退出,性别默认为男,如果遇到女学生,则把性别输入女。

    答案

    def func():
        while 1 :
    
                name=input('请输入姓名:')
                age=input('请输入年龄:')
                edu=input('请输入学历:')
                sex=input("请输入性别:")
                if sex=="":
                    s=open('a1',mode="a+",encoding='utf-8')
                    s.write('姓名:%s,年龄:%s,学历:%s,性别:男' %(name,age,edu) + '
    ')
                else:
                    s = open('a1', mode="a+", encoding='utf-8')
                    s.write('姓名:%s,年龄:%s,学历:%s, 性别:%s' % (name, age, edu,sex) + '
    ')
                i = input('Q退出/回车继续')
                if i.upper() == "Q":
                    exit()
    print(func())
    # 输出结果
    # 文件内容
    姓名:太白,年龄:18,学历:博士,性别:男
    姓名:杨丽丽,年龄:19,学历:本科, 性别:女
    
    
    1. 写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作(选做题)。

    答案

    def func(filename1,filename2,old_content,new_content):
        with open(filename1, mode="r", encoding='utf-8') as f1,
            open(filename2, mode='a+', encoding='utf-8') as f2:
            for content in f1:
                content = content.replace(old_content,new_content)
                # f2.seek(0,0)
                f2.write(content)
            import os
            os.remove(filename1)
            os.rename(filename2,filename1)
    func('a1.txt','a2.txt','sb','alex')
    
    
  • 相关阅读:
    闯荡Linux帝国:nginx的创业故事
    一个HTTP数据包的奇幻之旅
    远去的传说:安全软件群雄混战史
    默认浏览器争霸传奇
    浏览器主页锁定之战——IE:我太难了
    产品vs程序员:你知道www是怎么来的吗?
    手把手教你从零开始搭建SpringBoot后端项目框架
    使用IntelliJ IDEA新建Java Web后端resfulAPI模板
    如何正确的在项目中接入微信JS-SDK
    html2canvas关于图片不能正常截取
  • 原文地址:https://www.cnblogs.com/zanao/p/11047881.html
Copyright © 2020-2023  润新知