练习题
1. 文件a1.txt内容
序号 部门 人数 平均年龄 备注
1 python 30 26 单身狗
2 Linux 26 30 没对象
3 运营部 20 24 女生多
.......
通过代码,将其构建成这种数据类型:
[{'序号':'1','部门':Python,'人数':30,'平均年龄':26,'备注':'单身狗'},......]
import os a = ''' 序号 部门 人数 平均年龄 备注 1 python 30 26 单身狗 2 Linux 26 30 没对象 3 运营部 20 24 女生多 ''' with open('a1.txt',encoding='utf-8',mode='w+') as write_f: write_f.write(a) l1 = [] # 定义一个list f1 = open('a1.txt',encoding='utf-8',mode='r') data1 = f1.readline().split() for i in f1: # 循环文件所有元素 dic = {} # 定义一个dict l = i.split() # 将得到结果删除空格 for j in range(len(l)): # 循环每个f1文件每行的长度 dic[data1[j]] = l[j] # 利用输出的长度来得到结果键值对 l1.append(dic) # 一个循环玩后添加到l1元组中 print(l1) f1.close()
2. 传入函数的字符串中,[数字]、[字母]、[空格] 以及 [其他]的个数,并返回结果。
def func1(x): num = 0 letter = 0 blank = 0 other = 0 for i in x: if i.isdecimal(): # 数字个数 num += 1 elif i.isalpha(): # 字母个数 letter += 1 elif i.isspace(): # 空格个数 blank += 1 else: # 其他字符 other += 1 print("数字个数为{},字母个数为{},空格个数为{},其他字符个数为{}".format(num,letter,blank,other)) func1('jinyuan123;;; ')
3. 写函数,接收两个数字参数,返回比较大的那个数字。
def func2(x, y): return x if x > y else y print(func2(88, 44))
4. 写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
dic = {"k1": "v1v1", "k2": [11,22,33,44]}
PS:字典中的value只能是字符串或列表
def func3(arg): ret = {} for key,value in arg.items(): # 把每个key、value取出 if len(value) > 2: ret[key] = value[:2] # 将ret添加key、value else: ret[key] = value return ret dic = {"k1": "v1v1", "k2": [11,22,33,44],'k3':'aaaaaa'} print(func3(dic))
5. 写函数,此函数只接收一个参数且此参数必须是列表数据类型,此函数完成的功能是返回给调用者一个字典,
此字典的键值对为此列表的索引及对应的元素。例如传入的列表为:[11,22,33] 返回的字典为 {0:11,1:22,2:33}。
def func4(*args): a = 0 b = {} # 定义字典 for i in args[0]: # args[0]用于取出值 b[a] = i # 值添加b字典中 a += 1 return b print(func4([11,22,33,44]))
6. 写函数,函数接收四个参数分别是:姓名,性别,年龄,学历。用户通过输入这四个内容,
然后将这四个内容传入到函数中,此函数接收到这四个内容,将内容追加到一个student_msg文件中。
def func5(*args): # 传入值 import os # 调用模块 with open('student_msg',encoding='utf-8',mode='a') as f1: # 打开文件(或者打开文件)a为追加 for i in args: # 把每个值循环添加到文件里 f1.write(i+' ') name = input("输入名字:") sex = input("输入性别:") age = input("输入年龄:") degree = input("输入学历:") func5(name,sex,age,degree)
7. 对第6题升级:支持用户持续输入,Q或者q退出,性别默认为男,如果遇到女学生,则把性别输入女。
def func7(name,age,degree,sex = '男'): import os a = name,sex,age,degree with open('student_msg',encoding='utf-8',mode='a') as f1: for i in a: f1.write(i+' ') while 1: name = input("输入名字q/Q退出:").upper() if name == 'Q': break # sex = input("输入性别默认为男:") age = input("输入年龄:") degree = input("输入学历:") sex = input("输入性别默认为男:") if sex == '女': func7(name,sex,age,degree) else: func7(name,age,degree)
8. 写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作。
读代码,回答:代码中,打印出来的值a,b,c分别是什么?为什么?
a=10
b=20
def test5(a,b):
print(a,b)
c = test5(b,a)
print(c)
# a = 20 b = 10 c = None # 因为a、b作为实参时调用了位置,所以a=20 b=10 # c因为只是用来调用函数,而在函数里没有使用return来构造一个返回值
9. 读代码,回答:代码中,打印出来的值a,b,c分别是什么?为什么?
a=10
b=20
def test5(a,b):
a=3
b=5
print(a,b)
c = test5(b,a)
print(c)
# a = 3 b = 5 # 因为a、b在全局虽然已经定义了变量,但是在函数体里又重新赋值 # c因为只是用来调用函数,而在函数里没有使用return来构造一个返回值
10. 写函数,传入函数中多个实参(均为可迭代对象如字符串,列表,元祖,集合等),将每个实参的每个元素依次添加到函数的动态参数args里面.
例如 传入函数两个参数[1,2,3] (22,33)最终args为(1,2,3,22,33)
def func10(*args): print(args) func10(*[1,2,3],*(22,33)) # 特殊定义
11. 写函数,传入函数中多个实参(实参均为字典),将每个实参的键值对依次添加到函数的动态参数kwargs里面.
例如 传入函数两个参数{‘name’:’alex’} {‘age’:1000}最终kwargs为{‘name’:’alex’ ,‘age’:1000}
def func11(**kwargs): print(kwargs) func11(**{"name":"alex"} ,**{"age":1000}) #特殊定义
12判断下列函数是否成立
# 题目一: # a = 2 # def wrapper(): # print(a) # wrapper() # 成立 # 题目二: # a = 2 # def wrapper(): # a += 1 # print(a) # wrapper() # 不成立 因为a为全局变量,函数体内不能对全局变量进行修改,只能调用 # 题目三: # def wrapper(): # a = 1 # # def inner(): # print(a) # inner() # wrapper() # 成立 # 题目四: # def wrapper(): # a = 1 # # def inner(): # a += 1 # print(a) # inner() # wrapper() # 不成立 因为函数体就算嵌套都是单独存在的,只能进行调用,不能修改
13. 写函数,接收两个数字参数,将较小的数字返回.
def func13(x,y): return x if x < y else y print(func13(1,2))
14. 写函数,接收一个参数(此参数类型必须是可迭代对象),将可迭代对象的每个元素以’_’相连接,形成新的字符串,并返回.
例如 传入的可迭代对象为[1,'老男孩','武sir']返回的结果为’1_老男孩_武sir
def func14(args): print(args) a = "" # 定义一个None for i in args: # 调用每个元素 a += str(i)+'_' # 在每个元素后面添加'_' return a.strip('_') # 删除字符串左右'_' print(func14([1,'老男孩','武sir']))
15. 写函数,传入n个数,返回字典{‘max’:最大值,’min’:最小值}
例如:如:min_max(2,5,7,8,4) 返回:{‘max’:8,’min’:2}(此题用到max(),min()内置函数)
def func15(*args): print('min:',min(args),'max:',max(args)) # min函数取最小 max函数取最大 func15(9,3,4,6)
16. 写函数,传入一个参数n,返回n的阶乘
例如:cal(7) 计算7*6*5*4*3*2*1
def func16(n): sum = 1 for i in range(n, 0, -1): # n为传入的值 倒叙复制 sum = sum * i # 求和 现有sum=1 1*7=7 然后7*6一直递归42*5 return sum # 返回结果 print(func16(7))
17. 写函数,返回一个扑克牌列表,里面有52项,每一项是一个元组
例如:[(‘红心’,2),(‘草花’,2), …(‘黑桃’,‘A’)]
def func17(): let1 = [2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K', 'A'] let2 = ['红心','草花','黑桃','方片'] let3 = [] for i in let1: # 循环let1所有元素 for j in let2: # 循环let2所有元素 let3.append((j,i)) # 将值添加到let3中,注意加(),按要求取每对为元组 return let3 print(func17())