一、函数

1、用户传入修改的文件名,指定要修改的内容,执行函数,完成批量修改的操作

def modify_file(filename,old,new):

import os

with open(filename,'r',encoding='utf-8') as read_f,open('.bak.swap','w',encoding='utf-8') as write_f:

for line in read_f:

if old in line:

line=line.replace(old,new)

write_f.write(line)          #修改过的内容写到临时文件.bak.swap

os.remove(filename)                  #将源文件删除

os.rename('.bak.swap',filename)          #将临时文件.bak.swap重命名为之前的文件名filename

modify_file('/Users/jieli/a.txt','some','same')    #用户传递参数,实现将a.txt中的some改为same

2、写函数,计算传入字符串中【数字】、【字母】、【空格] 以及 【其他】的个数

def check(msg):

res = {

'num': 0,

'string': 0,

'space': 0,

'other': 0,

}

for s in msg:

if s.isdigit():             #判断属于数字

res['num'] += 1

elif s.isalpha():           #判断属于字符串

res['string'] += 1

elif s.isspace():           #判断属于空格

res['space'] += 1

else:

res['other'] += 1

return res

res = check('hello name:jim passowrd:win2008')   #给函数传入参数‘hello name:jim passowrd:win2008’

print(res)                           #结果是{'num': 4, 'string': 23, 'space': 2, 'other': 2}

3、写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5

def func1(str,list,tup):

zi = len(str)

li = len(list)

tup = len(tup)

if zi > 5:

print("字符串长度大于5")

else:

print("字符串长度小于或等于5")

if li > 5:

print("列表长度大于5")

else:

print("列表长度小于或等于5")

if tup > 5:

print("元组长度大于5")

else:

print("元组长度小于或等于5")

func1("kwkwqehk",[11,22,33],(1,"215",5,6,59,6))

4、写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。

def func1(seq):

if len(seq) > 2:

seq=seq[0:2]           #根据索引取元素,索引为0和1的

return seq

print(func1([1,2,3,4]))            #结果是[1, 2]

5、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者

def func2(seq):

return seq[::2]            #按照索引判断,指定步长为2

print(func2((1,2,3,4,5,6,7)))       #结果是(1, 3, 5, 7)

6、写函数,检查字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者

def func3(dic):

d={}

for key,value in dic.items():

if len(value) > 2:           #value长度大于2的

d[key]=value[0:2]       #新的value保留两个长度的内容,并和key组成新字典d

return d

print(func3({'k1':'abcdef','k2':[1,2,3,4],'k3':('a','b','c')}))    #结果是{'k1': 'ab', 'k2': [1, 2], 'k3': ('a', 'b')}

二、装饰器

1、写一个执行的时间是随机的函数

import random

import time

def func1():

time.sleep(random.randrange(1,5))    #random的randrange生成随机的时间1到4秒

print('welecome to func1')

func1()

2、编写装饰器,为函数加上统计时间的功能

import time

import random

from functools import wraps

def wrap(func):

def auth(*args,**kwargs):

start = time.time()

res=func(*args, **kwargs)

stop = time.time()

print('run time is %s' % (stop - start))

return res

return auth

@wrap              #装饰器语法,相当于执行wrap(func)

def func():

time.sleep(random.randrange(1, 5))

print('welecome to func')

func()

3、编写装饰器,为函数加上认证的功能

import time

def wrap(func):

def auth(*args,**kwargs):

while True:

name=input('username: ').strip()

password=input('pwd: ').strip()

if name=='wang' and password=='123':

print('successful')

res=func(*args, **kwargs)

return res

else:

print('error')

continue

return auth

@wrap

def index():

print('welecome to func1')

index()

4、编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码

db文件内容:{'alex':'123','wang':'123'}

login_status={'user':None,'status':False}           #用户输入一次,不管正确还是错误都结束程序

def auth(auth_type='file'):

def auth2(func):

def wrapper(*args,**kwargs):

if login_status['user'] and login_status['status']:

return func(*args,**kwargs)

if auth_type == 'file':

with open(r'C:\Users\db',encoding='utf-8') as f:

dic=eval(f.read())

name=input('username: ').strip()

password=input('password: ').strip()

if name in dic and password == dic[name]:

login_status['user']=name

login_status['status']=True

res=func(*args,**kwargs)

return res

else:

print('username or password error')

elif auth_type == 'sql':

print('from sql')

else:

print('error press')

return wrapper

return auth2

@auth()

def index():

print('index')

@auth(auth_type='file')

def home(name):

print('welcome %s to home' %name)

index()

home('wang')

5、编写装饰器,为多个函数加上认证功能,要求登录成功一次,在超时时间内无需重复登录,超过了超时时间,则必须重新登录

import time,random

user={'user':None,'login_time':None,'timeout':3.000003,}

def timmer(func):

def wrapper(*args,**kwargs):

s1=time.time()

res=func(*args,**kwargs)

s2=time.time()

print('%s' %(s2-s1))

return res

return wrapper

def auth(func):

def wrapper(*args,**kwargs):

if user['user']:

timeout=time.time()-user['login_time']

if timeout

return func(*args,**kwargs)

name=input('name>>: ').strip()

password=input('password>>: ').strip()

if name == 'egon' and password == '123':

user['user']=name

user['login_time']=time.time()

res=func(*args,**kwargs)

return res

return wrapper

@auth

def index():

time.sleep(random.randrange(3))

print('welcome to index')

@auth

def home(name):

time.sleep(random.randrange(3))

print('welcome %s to home ' %name)

index()

home('wang')

6、编写日志装饰器,一旦函数f1执行,则将消息2017-07-21 11:12:11 f1 run写入到日志文件中

import time

import os

def logger(logfile):

def deco(func):

if not os.path.exists(logfile):                   #日志文件不存在pass

with open(logfile,'w'):pass

def wrapper(*args,**kwargs):

res=func(*args,**kwargs)

with open(logfile,'a',encoding='utf-8') as f:         #文件里面追加时间标记

f.write('%s %s run\n' %(time.strftime('%Y-%m-%d %X'),func.__name__))

return res

return wrapper

return deco

@logger(logfile='aaa.log')

def index():

print('index')

index()

三、声明式编程练习

1、将names=['zhao','qian','sun','li']中的名字全部变大写

names=[name.upper() for name in names]

print(names)

2、将names=['zhao','qian','sun','li']中以i结尾的过滤掉,保存剩下的名字长度

names=[name for name in names if not name.endswith('sb')]

print(names)                             #结果['zhao', 'qian', 'sun']

3、求文件a.txt中最长的行的长度(长度按字符个数算,需要使用max函数)

with open('aaa.log','r',encoding='utf-8') as f:

res=max(len(line) for line in f)

print(res)

4、文件shopping.txt内容如下

mac 20000 3

lenovo 3000 10

tesla 1000000 10

chicken 200 1

(1)开支是多少

with open('shopping.txt', encoding='utf-8') as f:

info = [line.split() for line in f]

#print(info)           #[['mac', '20000', '3'], ['lenovo', '3000', '10'], ['tesla', '1000000', '10'], ['chicken', '200', '1']]

cost = sum(float(unit_price) * int(count) for _, unit_price, count in info)

print(cost)           #结果是支出的金额

(2)打印信息,如格式为[{'name':'xxx','price':333,'count':3},...]

with open('a.txt',encoding='utf-8') as f:

info=[{

'name': line.split()[0],        #取第一列的名字

'price': float(line.split()[1]),   #取第二列的价钱  转化为float类型

'count': int(line.split()[2]),    #取第三列的个数    int类型

} for line in f]

print(info)

(3)单价大于10000的商品信息

with open('a.txt',encoding='utf-8') as f:

info=[{

'name': line.split()[0],

'price': float(line.split()[1]),

'count': int(line.split()[2]),

} for line in f if float(line.split()[1])>10000]

print(info)

python定义函数练习题_python练习题相关推荐

  1. python 定义函数方法_Python动态定义函数的方法介绍

    本篇文章给大家带来的内容是关于Python动态定义函数的方法介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 基于 MIT 许可协议 在 Python 中,没有可以在运行时简化函数 ...

  2. python 定义函数方法_Python定义一个函数的方法

    Python函数的定义 定义函数,也就是创建一个函数,可以理解为创建一个具有某些用途的工具.定义函数需要用 def 关键字实现,具体的语法格式如下: def 函数名(形参列表): //由零条到多条可执 ...

  3. python自定义函数参数_python自定义函数的参数之四种表现形式

    (1)def a(x,y):print x,y 这是最常见的定义方式,调用该函数,a(1,2)则x取1,y取2,形参与实参相对应,如果a(1)或者a(1,2,3)则会报错 (2)def a(x,y=3 ...

  4. python定义函数

    python 定义函数 def functionName(list of parameters):#函数定义时并不会执行,调用时才执行functionBodyreturn value 有参数有返回值 ...

  5. python定义函数的组成部分有_Python文档学习笔记(4)--定义函数

    定义函数 关键字 def 引入函数的定义.其后必须跟有函数名和以括号标明的形式参数列表.组成函数体的语句从下一行开始,且必须缩进. 执行 一个函数会引入一个用于函数的局部变量的新符号表. 因此,在函数 ...

  6. python定义函数的关键字是_python 函数定义

    python 函数 ---------------- ---------------- ---------------- ---------------- def test(x): print(x) ...

  7. python定义函数的命令_Python入门 | 定义函数

    自用复习备忘总结. 一些定义函数:一段用来封装任务的代码 封装:用一个简单的命令执行一系列步骤的方式 3. 对象python使用对象来存储数据. 构造任何类型的值都是一个对象. 所有对象都具有三个特性 ...

  8. python def函数参数_Python def函数的定义、使用及参数传递实现代码

    Python编程中对于某些需要重复调用的程序,可以使用函数进行定义,基本形式为: def 函数名(参数1, 参数2, --, 参数N): 执行语句函数名为调用的表示名,参数则是传入的参数,可以更具需要 ...

  9. python定义函数的组成部分有_Python学习笔记之函数的定义和作用域实例详解

    本文实例讲述了Python函数的定义和作用域.分享给大家供大家参考,具体如下: 定义函数 默认参数: 可以向函数中添加默认参数,以便为在函数调用中未指定的参数提供默认值 # 如果调用 cylinder ...

  10. python定义空函数体_Python 2.2 定义函数

    定义函数 Python中,定义函数是用def语句,一次写出函数名.括号.括号中的参数.和冒号:,然后在缩进模块中编写函数体,函数的返回值使用return语句返回. 我们以自定义一个求绝对值的my_ab ...

最新文章

  1. Grafana 6.0正式发布!新增查询工作流,全新独立Gauge面板
  2. CSS常用菜单(三)
  3. C语言程序设计蔺德军,C语言程序设计上机实验与习题解答(第2版)
  4. 7.12-7.19 id、w、who、last、lastb、lastlog
  5. Jakarta EE中的规范范围
  6. IntelliJ IDEA for Mac 在MacOS模式的重构快捷键(Refactoring Shortcut)
  7. 上海交大计算机学院奖学金,上海交通大学-电子信息与电气工程学院-学生工作办公室...
  8. JDBC中Statement接口提供的execute、executeQuery和executeUpdate之间的区别
  9. 【译】数据显示:中国的程序员是世界上最牛的程序员?
  10. 红米手机Pro超简单刷入开发版获得ROOT超级权限的步骤
  11. 1.44TFT彩屏字体翻转,扫描方式的改变
  12. linux命令离线手册下载,linux 命令速查手册全集下载
  13. Linux 安装PostgreSql
  14. 晦涩难懂的c语言语句,《C++覆辙录》——2.12:晦涩难懂的operator -
  15. linux编译ipp多线程,Linux下Intel IPP编程环境的配置
  16. acm在线评测系统 c 语言,ACM在线评测系统.pdf
  17. c#串口模拟互发数据(COM1-COM2)
  18. Kubernetes之(二十)Helm程序包管理器
  19. 入门级动态规划-分梨
  20. 西门子828D 840Dsl数控程序PLC西门子数控程序中文注释,详细解释介绍

热门文章

  1. axure文件如何加密_最全产品设计工具整理,你都掌握了吗?
  2. 知云文献翻译安装教程_阅读英文文献的好帮手
  3. 使用RANSAC的鲁棒TDOA Chan定位算法
  4. I51开发板----STC15F2K60S2教程
  5. 51-单片机及开发板介绍
  6. linux 性能测试 antutu,安兔兔“不诚实”?这三款跑分软件绝对值得一试!
  7. 图像超分辨率重建学习记录(二)----插值法
  8. 加拿大c# 虚拟主机_21加拿大人将在Twitter上关注#CanadaDay
  9. Xbox one更换坏硬盘及升级成大容量硬盘步骤
  10. [游戏]XBOX360 Slim+Kinect——超薄+体感