练习题
写函数,计算传入数字参数的和。(动态传参)
写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作
写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容。
写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容(对value的值进行截断),并将新内容返回给调用者,注意传入的数据可以是字符、list、dict
解释闭包的概念
写函数,返回一个扑克牌列表,里面有52项,每一项是一个元组
例如:\[\(‘红心’,2\),\(‘草花’,2\), …\(‘黑桃A’\)\]
7.写函数,传入n个数,返回字典{‘max’:最大值,’min’:最小值}
例如:minmax(2,5,7,8,4)
返回:{‘max’:8,’min’:2}
8._写函数,专门计算图形的面积_
其中嵌套函数,计算圆的面积,正方形的面积和长方形的面积
调用函数area(‘圆形’,圆半径) 返回圆的面积
调用函数area(‘正方形’,边长) 返回正方形的面积
调用函数area(‘长方形’,长,宽) 返回长方形的面积
#代码模板
def area():
def 计算长方形面积():
pass
def 计算正方形面积():
pass
def 计算圆形面积():
pass
9._写函数,传入一个参数n,返回n的阶乘_
例如:cal(7)
计算7654321
10.编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码
11.生成器和迭代器的区别?
12 生成器有几种方式获取value?
13.通过生成器写一个日志调用方法, 支持以下功能
根据指令向屏幕输出日志
根据指令向文件输出日志
根据指令同时向文件&屏幕输出日志
以上日志格式如下
2017-10-19 22:07:38 [1] test log db backup 3
2017-10-19 22:07:40 [2] user alex login success
#注意:其中[1],[2]是指自日志方法第几次调用,每调用一次输出一条日志
- 代码结构如下
def logger(filename,channel=’file’):
“””
日志方法
:param filename: log filename
:param channel: 输出的目的地,屏幕(terminal),文件(file),屏幕+文件(both)
:return:
“””
…your code…
#调用
logobj = logger(filename=”web.log”,channel=’both’)
log_obj.__next()
log_obj.send(‘user alex login success’)
14.用map来处理字符串列表,把列表中所有人都变成sb,比方alex_sb
name=[‘alex’,’wupeiqi’,’yuanhao’,’nezha’]
15.用filter函数处理数字列表,将列表中所有的偶数筛选出来
num = [1,3,5,6,7,8]
16.如下,每个小字典的name对应股票名字,shares对应多少股,price对应股票的价格
portfolio = [
{‘name’: ‘IBM’, ‘shares’: 100, ‘price’: 91.1},
{‘name’: ‘AAPL’, ‘shares’: 50, ‘price’: 543.22},
{‘name’: ‘FB’, ‘shares’: 200, ‘price’: 21.09},
{‘name’: ‘HPQ’, ‘shares’: 35, ‘price’: 31.75},
{‘name’: ‘YHOO’, ‘shares’: 45, ‘price’: 16.35},
{‘name’: ‘ACME’, ‘shares’: 75, ‘price’: 115.65}
]
通过哪个内置函数可以计算购买每支股票的总价
用filter过滤出,单价大于100的股票有哪些
17.有列表 li = [‘alex’, ‘egon’, ‘smith’, ‘pizza’, ‘alen’], 请将以字母“a”开头的元素的首字母改为大写字母;
18.有列表 li = [‘alex’, ‘egon’, ‘smith’, ‘pizza’, ‘alen’], 请以列表中每个元素的第二个字母倒序排序;
19.有名为poetry.txt
的文件,其内容如下,请删除第三行;
昔人已乘黄鹤去,此地空余黄鹤楼。
黄鹤一去不复返,白云千载空悠悠。
晴川历历汉阳树,芳草萋萋鹦鹉洲。
日暮乡关何处是?烟波江上使人愁。
20.有名为username.txt
的文件,其内容格式如下,写一个程序,判断该文件中是否存在”alex”, 如果没有,则将字符串”alex”添加到该文件末尾,否则提示用户该用户已存在;
pizza
alex
egon
21.有名为user_info.txt的文件,其内容格式如下,写一个程序,删除id为100003的行;
pizza,100001
alex, 100002
egon, 100003
22.有名为user_info.txt的文件,其内容格式如下,写一个程序,将id为100002的用户名修改为alex li
;
pizza,100001
alex, 100002
egon, 100003
23.写一个计算每个程序执行时间的装饰器;
24.lambda是什么?请说说你曾在什么场景下使用lambda?
25.题目:写一个摇骰子游戏,要求用户压大小,赔率一赔一。要求:三个骰子,每个骰子的值从1-6,摇大小,每次打印摇出来3个骰子的值。
作业
一些关键练习题的参考答案
递归二分查找
a = [1,3,4,6,7,8,9,11,15,17,19,21,22,25,29,33,38,69,107]
def binary_search(start,end,n,d_list):
"""
每次把列表规模折半,查找一个数据最多只需要2的n次方 < len(d_list),是2的多少次方,就是最多查多少次。
假如列表长度为200,那最多只需查询8次(2**8次方)
:param start: 查找的起始位置
:param end: 查找的结束位置
:param n: 要查找的值
:param d_list: 要找的列表
:return:
"""
if start < end: # 查找的范围[start:end]依然大于0个
mid = (start + end)//2 # 找到中间位置
if d_list[mid] > n: # 如果中间的这个值比要找的n大,代表要往d_list[mid]左边找
print("go left",start,mid,end,"--",d_list[start],d_list[mid],d_list[end-1])
binary_search(start,mid,n,d_list)
elif d_list[mid] < n : # 要往右边找,继续折半
print("go right..",start,mid,end,"--",d_list[start],d_list[mid],d_list[end-1])
binary_search(mid+1,end,n,d_list)
else: # 找到了
print("find:",d_list[mid],mid)
else: # 假设start=9,end=9, 那d_list[9:9]已经取不到值了,在这种情况下,只能说明,要找的这个值不在这个列表里
print("cannot find %s in this data list" % n)
binary_search(0, len(a), 22, a)