Loading

Python--练习题

练习题 函数篇

  • 01篇
    # 1、1+2+3+4+5+6+7+8+...+100
    def sum(n):
        s = 0
        count = 1
        while count <= n:
            s += count
            count += 1
        return s
    
    
    # 2、判断一个数是奇数是偶数。
    def fun(n):
        if n % 2 == 0:
            return "偶数"
        return "奇数"
    print(fun(2))
    
    
    # 3、写函数,检查获取传入裂变或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
    def func(lis):
        new_list = []
        for i in range(len(lis)):
            if i % 2 == 1:
                new_list.append(lis[i])
        return new_list
        
    
    # 4、写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。
    def func(s):
        return s > 5
    
    
    # 5、写函数,检查传入列表的长度,如果大于2,将列表的前两项内容返回给调用者。
    def func(lis):
        if len(lis) > 2:
            return lis[0], lis[1]
    
            
    # 6、写函数,计算传入函数的字符中,数字、字母、空格 以及 其它内容的个数,并返回结果。
    def func(s=""):
        shuzi,zimu,kongge,qita = 0, 0, 0, 0
        for i in s:
            if i.isdigit():
                shuzi += 1
            elif i.isalpha():
                zimu += 1
            elif i == " ":
                kongge += 1
            else:
                qita += 1
        return "数字个数:%s \n字母个数:%s \n空格个数:%s \n其它个数:%s"%(shuzi,zimu,kongge,qita)        
    
    
    # 7、写函数,接收两个数字参数,返回比较大的那个数字。
    def func(num1, num2):
        num = num1 if num1 > num2 else num2
        return num
    
    
    # 8、写函数,检查传入字典的每个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
    #   dic = {"k1":"v1v1", "k2":[11,22,33,44]}
    #   dic = {"k1":"v1", "k2":[11,22]}
    #   PS:字典中的value只能是字符串或列表
    def func(dic):
        new_dict = {}
        for k,v in dic.items():
            if len(v)>2:
                nue_dict[k]=v[0:2]
            else:
                nue_dict[k]=v
        return nue_dict
    
    
    # 9、写函数,此函数只接收一个参数且此参数必须是列表数据类型,此函数完成的功能是返回给调用者一个字典,此字典的键值对为此列表的索引及对应的元素。列如传入的列表为:[11,22,33] 返回的字典为 {0:11, 1:22,2:33}。
    def func(lis):
        dic = {}
        for i in range(len(lis)):
            dic[i]=lis[i]
        return dic
    
    
    # 10、写函数,函数接收四个参数分别是:姓名、性别、年龄、学历。用户通过输入这四个内容,然后将这四个内容传入到函数中,此函数接收到这四个内容,将内容追加到一个student_msg文件中。
    def func(name,sex,age,edu):
        with open("student_msg", mode="a", encoding="utf-8") as f:
            f.write(name+"_"+sex+"_"+age+"_"+edu+"\n")
            f.flush()
            f.close()
    name = input("请输入姓名:")
    sex = input("请输入性别:")
    age = input("请输入年龄:")
    edu = input("请输入学历:")
    
    
    # 11、对第10题升级,支持用户持续输入,Q或者q退出,性别默认为男,如果遇到女学生,则把性别输入女。
    def func(name,age,edu,sex="",):
        with open("student_msg", mode="a", encoding="utf-8") as f:
            f.write(name+"_"+sex+"_"+age+"_"+edu+"\n")
            f.flush()
            f.close()
    while True:
        num = input("还要继续录入信息吗?输入Q退出")
        if num.upper() == "Q":
            break
        name = input("请输入姓名:")
        sex = input("请输入性别:")
        age = input("请输入年龄:")
        edu = input("请输入学历:")
        if sex == "":
            func(name, age, edu)
        else:
            func(name,age,edu,sex)
    
    
    # 12、写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作。
    import os
    def func(finename,old,new):
        with open(finename, mode='r', encoding="utf-8") as f1,\
            open(finename+"_副本", mode='w', encoding='utf-8') as f2:
            for line in f1:
                s = line.replace(old, new)
                f2.write(s)
            f2.flush()
            f2.close()
        os.remove(finename)
        os.rename(finename+"_副本", finename)
    func("student_msg", "", "")
  • 02篇
    # 接受n个参数,返回最大值和最小值(字典)
    def func(*args):
        m = args[0] # 假设第0项是最大值
        mi = args[0]
        for el in args:
            if el > m:
                m = el  # 当前这个元素比假设的那个大,记录当前这个比较大的数
            if el < mi:
                mi = el
        return {"最大值":m, "最小值":mi}
    
    # 方法2
    def func1(*args):
        return {"最大值":max(args), "最小值":min(args)}
  • 03篇(推导式)
    # 1. 过滤掉长度小于3的字符串列表,并将小写转换成大写字母
    lis = ['xiaobai', 'we', 'xiaohei', 'xiaohuang', 'xi', 'he', 'daw', 'xiao']
    
    print([ i.upper() for i in lis if len(i) >= 3 ])
    
    # 2. 求(x,y)其中的x是0-5之间的偶数,y是0-5之间的奇数组成的元组列表
    print([ (i, j)for i in range(1,6) if i % 2 == 0 for j in range(1,6) if j % 2 == 1])
    
    # 3. 求M中 3,6,9 组成的列表 M = [[1,2,3],[4,5,6],[7,8,9]]
    M = [[1,2,3],[4,5,6],[7,8,9]]
    print([ i[2] for i in M ])
    M = [3, 6, 9]
    print([[i-2, i-1, i] for i in M ])
    
    # 4. 求出50以内能够被3整除的数的平方,并放入到一个列表中
    print([ i*i for i in range(51) if i % 3 == 0 ])
    
    # 5. 构建一个列表:[(0,1),(1,2),(2,3),(3,4),(4,5),(5,6)]
    print([ (i,i+1) for i in range(6) ])
    
    # 6. 构建一个列表:[0,2,4,6,8,10,12,14,16,18]
    print([i for i in range(0,20,2)])
    
    # 7. 有一个列表ll = ["小明","小白","小黑","小张"]将其构造成这种列表["小明1","小白2","小黑3","小张4"]
    ll = ["小明","小白","小黑","小张"]
    print([ ll[i] + str(i) for i in range(len(ll)) ])
    
    # 8. 有以下数据类型:
    x = {
        'name':'xiaobai',
        'Values':[
            {'timestamp':1517991992.94,'values':100},
            {'timestamp':1517991992.94,'values':200},
            {'timestamp':1517991992.94,'values':300},
            {'timestamp':1517991992.94,'values':400},
            {'timestamp':1517991992.94,'values':500},
        ]
    }
    将上面的数据通过列表推导式转换成下面的类型:[[1517991992.94,100],[1517991992.94,200],[1517991992.94,300],[1517991992.94,400],[1517991992.94,500]]
    print([ [i['timestamp'],i['values']]for i in x['Values']]) 

练习 递归篇

  • 递归遍历目录
    #! /usr/bin/env python
    # -*- coding: utf-8 -*-
    # __author__ = "YJL"
    # Date: 2018/11/13
    
    
    import os
    def lookUp(fileDir):
        # 得到当前目录下的所有的文件
        fileList = os.listdir(fileDir)
        for filename in fileList:
            # 判断是否是目录(用绝对路径)
            if os.path.isdir(os.path.join(fileDir, filename)):
                print("文件夹:%s" %(filename))
                # 是目录,递归调用函数本身
                lookUp(os.path.join(fileDir, filename))
            else:
                print("文件:%s" % (filename))
    
    Dir = "/Python/python1"
    lookUp(Dir)
    
    结果:
    [root@centos7-1 ~]# python3.6 lookUpDir.py 
    文件夹:a
    文件:file1
    文件:file2
    文件:file3
    文件:file4
    文件:file5
    文件夹:b
    文件:text1
    文件:text2
    文件:text3
    文件:text4
    文件:text5
    文件夹:c
    文件:test1
    文件:test2
    文件:test3
    文件:test4
    文件:test5
    
    
    
    这样结果不怎么好看,美化下
    #! /usr/bin/env python
    # -*- coding: utf-8 -*-
    # __author__ = "YJL"
    # Date: 2018/11/13
    
    
    import os
    def lookUp(fileDir, n):
        # 得到当前目录下的所有的文件
        fileList = os.listdir(fileDir)
        for filename in fileList:
            # 判断是否是目录(用绝对路径)
            if os.path.isdir(os.path.join(fileDir, filename)):
                print("\t"*n, "文件夹:%s" %(filename))
                # 是目录,递归调用函数本身
                lookUp(os.path.join(fileDir, filename), n+1)
            else:
                print("\t"*n, "文件:%s" % (filename))
    
    Dir = "/Python/python1"
    lookUp(Dir, 0)
    
    
    结果:
    [root@centos7-1 ~]# python3.6 lookUpDir.py 
     文件夹:a
         文件:file1
         文件:file2
         文件:file3
         文件:file4
         文件:file5
     文件夹:b
         文件:text1
         文件:text2
         文件:text3
         文件:text4
         文件:text5
     文件夹:c
         文件:test1
         文件:test2
         文件:test3
         文件:test4
         文件:test5
  • 栈模拟递归遍历目录(深度递归)

    #! /usr/bin/env python
    # -*- coding: utf-8 -*-
    # __author__ = "YJL"
    # Date: 2018/11/13
    
    import os
    
    
    def getAllDirDe(path):
        stack = []
        stack.append(path)
    
        # 处理栈,当栈为空的时候结束循环
        while len(stack) != 0:
            # 从栈里取出数据
            dirPath = stack.pop()
            #print(dirPath)
            # 目录下所有文件
            filesList = os.listdir(dirPath)
            #print(filesList)
    
            # 处理每一个文件,如果是普通文件则打印出来,如果是目录则将该目录的地址压栈
            for fileName in filesList:
                fileAbsPath = os.path.join(dirPath, fileName)
                if os.path.isdir(fileAbsPath):
                    # 是目录就压栈
                    print("目录:" + fileName)
                    stack.append(fileAbsPath)
                else:
                    # 打印普通文件
                    print("普通文件:" + fileName)
    
    path = "/Python/python1"
    getAllDirDe(path)
    
    
    
    结果:
    [root@centos7-1 ~]# python3.6 lookUpDir.py 
    目录:a
    目录:b
    目录:c
    普通文件:test1
    普通文件:test2
    普通文件:test3
    普通文件:test4
    普通文件:test5
    普通文件:text1
    普通文件:text2
    普通文件:text3
    普通文件:text4
    普通文件:text5
    普通文件:file1
    普通文件:file2
    普通文件:file3
    普通文件:file4
    普通文件:file5
  • 队列模拟递归遍历目录(广度递归)
    #! /usr/bin/env python
    # -*- coding: utf-8 -*-
    # __author__ = "YJL"
    # Date: 2018/11/13
    
    import os
    import collections
    def getAllDirQU(path):
        queue = collections.deque()
        # 进队
        queue.append(path)
        while len(queue) != 0:
            # 出队
            dirPath = queue.popleft()
            # 找出所有的文件
            filesList = os.listdir(dirPath)
    
            for fileName in filesList:
                # 绝对路径
                fileAbsPath = os.path.join(dirPath, fileName)
                # 判断是否是目录,是目录就进队,不是就打印
                if os.path.isdir(fileAbsPath):
                    print("目录:" + fileName)
                    queue.append(fileAbsPath)
                else:
                    print("普通文件:" + fileName)
    
    path = "/Python/python1"
    getAllDirQU(path)
    
    
    结果:
    [root@centos7-1 ~]# python3.6 lookUpDir.py 
    目录:a
    目录:b
    目录:c
    普通文件:test1
    普通文件:test2
    普通文件:test3
    普通文件:test4
    普通文件:test5
    普通文件:text1
    普通文件:text2
    普通文件:text3
    普通文件:text4
    普通文件:text5
    普通文件:file1
    普通文件:file2
    普通文件:file3
    普通文件:file4
    普通文件:file5

     

 

posted @ 2018-11-08 12:26  别来无恙-  阅读(499)  评论(0编辑  收藏  举报