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
人生是条无名的河,是浅是深都要过;
人生是杯无色的茶,是苦是甜都要喝;
人生是首无畏的歌,是高是低都要唱。