python 练习题(三)
1.根据下图所示,对print_info里的代码进行实现
def info(name, age, sex, hobblie): print( ‘‘‘ -------------------------info------------------------------ Name : %s Age : %s Sex : %s Hobblie : %s --------------------end------------------------------------ ‘‘‘ % (name, age, sex, hobblie)) info(name=‘alex‘, age=‘22‘, sex=‘m‘, hobblie=‘swim‘) info(name=‘ww‘, age=‘23‘, sex=‘w‘, hobblie=‘book‘)
写函数,计算传入数字参数的和。(动态传参)
x = int(input("输入要计算的值x: ")) # 定义动态输入的x值 y = int(input("输入要计算的值y: ")) # 定义动态输入的y值 def calc(x, y): result = x + y return ("结果是:", result) a = calc(x, y) print(a)
写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作
import os def update_file(new_filename,old_str, new_str): old_f = open(‘file3.txt‘, ‘r‘, encoding=‘utf-8‘) new_f = open(new_filename, ‘w‘, encoding=‘utf-8‘) for line in old_f: if line == old_str: line = line.replace(old_str, new_str) # 替换文件内容 new_f.write(line) old_f.close() new_f.close() os.replace(‘file3.txt‘,new_filename) # 替换文件名 update_file(‘file1.txt‘,‘天天向上‘,‘学习榜样‘) #file1.txt 新文件名 #‘天天向上‘ 旧内容 #‘学习榜样‘ 新内容
写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容。
def check(str1,list1,tuple1): if str1.is\space(): print("未输入字符串") else: print(‘字符串是:‘,str1) if len(list1) == 0: print("未输入列表") else: print("列表是:",list1) if len(tuple1) == 0: print("未输入元组") else: print("元组是:",tuple1) check(‘jj‘,[],(2,2))
写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容(对value的值进行截断),并将新内容返回给调用者,注意传入的数据可以是字符、list、dict
dict1={‘name‘:‘jack‘,‘sex‘:‘man‘,‘k3‘:[0,1,2,3]} # 定义字典 def check_len(dict1): new = [] for i in dict1.values(): if len(i) > 2: # 判断长度 new.append(i[0:2]) # 截取前2位 else: continue return new # 输出列表值 a=check_len(dict1) print(a)
闭包的概念
关于闭包,即函数定义和函数表达式位于另一个函数的函数体内(嵌套函数)。
而且这些内部函数可以访问他们所在的外部函数中声明的所有局部变量,参数。
当其中一个这样的内部函数在包含他们的外部函数之外被调用时候,就形成了闭包。
也就是说,内部函数会在外部函数返回后被执行。而当这个内部函数执行的时候,
它仍然必需访问其外部函数的局部变量,参数以及其他内部函数,这些局部变量,
参数声明(最初时)的值是外部函数返回时候的值,但也会受到内部函数的影响。
闭包的意义:返回的函数对象,不仅仅是一个函数对象,在该函数外还包裹了一层作用域,这使得,该函数无论在何处调用,优先使用自己外层包裹的作用域
简单的说,闭包就是一个内部函数+外部环境写函数,返回一个扑克牌列表,里面有52项,每一项是一个元组
例如:[(‘红心’,2),(‘草花’,2), …(‘黑桃A’)]
def card(): list1=[] num=[2,3,4,5,6,7,8,9,10,‘J‘,‘k‘,‘Q‘,‘A‘] type = [‘红心‘, ‘草花‘, ‘方块‘, ‘黑桃‘] for i in num: for j in type: list1.append((j,i))# 添加元组 return list1 a=card() print(a)
- 写函数,传入n个数,返回字典{‘max’:最大值,’min’:最小值}
例如:minmax(2,5,7,8,4)
返回:{‘max’:8,’min’:2}
def funnc(*args): the_max = args[0] # 最大值在数组之中 the_min = args[0] # 最小值在数组之中 for i in args: if i > the_max: the_max = i elif i < the_min: the_min = i return {‘max‘: the_max, ‘min‘: the_min} # 返回字典 res = funnc(1, -3, 2, 8, 4) print(res)
8.写函数,专门计算图形的面积
其中嵌套函数,计算圆的面积,正方形的面积和长方形的面积
调用函数area(‘圆形’,圆半径) 返回圆的面积
调用函数area(‘正方形’,边长) 返回正方形的面积
调用函数area(‘长方形’,长,宽) 返回长方形的面积
#代码模板 def area(): def 计算长方形面积(): pas\s def 计算正方形面积(): pas\s def 计算圆形面积(): pas\s import math print(‘‘‘ 请按照如下格式输出: 调用函数area(‘圆形’,圆半径) 返回圆的面积 调用函数area(‘正方形’,边长) 返回正方形的面积 调用函数area(‘长方形’,长,宽) 返回长方形的面积‘‘‘) def area(name, *args): def areas_rectangle(x, y): return ("长方形的面积为:", x * y) def area_square(x): return ("正方形的面积为:", x ** 2) def area_round(r): return ("圆形的面积为:", math.pi * r * r) if name == ‘圆形‘: return area_round(*args) elif name == ‘正方形‘: return area_square(*args) elif name == ‘长方形‘: return areas_rectangle(*args) print(area(‘长方形‘, 3, 4)) print(area(‘圆形‘, 3)) print(area(‘正方形‘, 3))
9.写函数,传入一个参数n,返回n的阶乘
例如:cal(7)
计算7654321
def cal(n): res=1 # 初始值1 for i in range(n,0,-1): # 初始值n 末尾值1 步长-1 res=res*i return res print(cal(7))
17.有列表 li = [‘alex’, ‘egon’, ‘smith’, ‘pizza’, ‘alen’], 请将以字母“a”开头的元素的首字母改为大写字母;
li = [‘alex‘, ‘egon‘, ‘smith‘, ‘pizza‘, ‘alen‘] li_new=[] for i in li: if i.startswith(‘a‘): # 以 a 开头 li_new.append(i.capitalize()) # 装换成大写A else: li_new.append(i) print(li_new)
18.有列表 li = [‘alex’, ‘egon’, ‘smith’, ‘pizza’, ‘alen’], 请以列表中每个元素的第二个字母倒序排序;
li = [‘alex‘, ‘egon‘, ‘smith‘, ‘pizza‘, ‘alen‘] print(list(sorted(li, key=lambda x: x[1], reverse=True)))
19.有名为poetry.txt的文件,其内容如下,请删除第三行;
昔人已乘黄鹤去,此地空余黄鹤楼。
黄鹤一去不复返,白云千载空悠悠。
晴川历历汉阳树,芳草萋萋鹦鹉洲。
日暮乡关何处是?烟波江上使人愁。
import os f1=open(‘poetry.txt‘,‘r‘,encoding=‘utf-8‘) f2=open(‘poetry_new.txt‘,‘w‘,encoding=‘utf-8‘) for index,line in enumerate(f1): if index==2: line=‘ ‘ f2.write(line) f1.close() f2.close() os.remove(‘poetry.txt‘) os.replace(‘poetry_new.txt‘,‘poetry.txt‘)
20.有名为username.txt的文件,其内容格式如下,写一个程序,判断该文件中是否存在”alex”, 如果没有,则将字符串”alex”添加到该文件末尾,否则提示用户该用户已存在;
pizza
alex
egon
import os f1=open(‘username.txt‘,‘r+‘,encoding=‘utf-8‘) f2=open(‘username_new.txt‘,‘w‘,encoding=‘utf-8‘) data=f1.readlines() # 先读取到内存中,f1文件无法读取长度 for index,line in enumerate(data): f2.write(line) # 先写入文件 if ‘alex‘ in line: # 判断用户是否在文件里面,就退出 print("alex 用户已存在!") f1.close() f2.close() break if ‘alex‘ not in line and index == len(data)-1: # 不在里面,就在末尾追加 f2.write(‘alex‘) f1.close() f2.close() #新旧文件替换 os.remove(‘username.txt‘) os.replace(‘username_new.txt‘,‘username.txt‘)
21.有名为user_info.txt的文件,其内容格式如下,写一个程序,删除id为100003的行;
pizza,100001
alex, 100002
egon, 100003
import os f1=open(‘user_info.txt‘,‘r+‘,encoding=‘utf-8‘) f2=open(‘user_info_new.txt‘,‘w‘,encoding=‘utf-8‘) for line in f1: if ‘100003‘ in line: line=‘ ‘ # 空格代替删除 f2.write(line) f1.close() f2.close() os.remove(‘user_info.txt‘) os.replace(‘user_info_new.txt‘,‘user_info.txt‘)
22.有名为user_info.txt的文件,其内容格式如下,写一个程序,将id为100002的用户名修改为alex li;
pizza,100001
alex, 100002
egon, 100003
import os f1=open(‘user_info.txt‘,‘r+‘,encoding=‘utf-8‘) f2=open(‘user_info_new.txt‘,‘w‘,encoding=‘utf-8‘) data=f1.readlines() for line in data: if ‘100002‘ in line: line=‘alex li,100002\n‘ # 替换新内容 f2.write(line) f1.close() f2.close() os.remove(‘user_info.txt‘) os.replace(‘user_info_new.txt‘,‘user_info.txt‘)