[ python ] 练习作业 - 3
1. 写出Python查找一个变量的顺序 提示:4中作用域的顺序
本地作用域(local) --> 当前作用域被嵌入的本地作用域(enclsing locals) --> 全局/模块作用域(Global) --> 内置作用域(build-in)
2. Python里的拷贝,打印结果并解释。
https://www.cnblogs.com/hukey/p/9812035.html
3. 打印代码的值,并解释其原因。
a = 1 def fun(a): # 局部作用域中
a = 2 # a 重新定义为2
return a # 首先在局部作用域中找,找到 a = 2返回 print(fun(a)) # 返回 a=2
print(a) # 在本地全局环境中找,找到 a = 1
4. 打印代码的值,并解释其原因。
a = [] def fun(a):
a.append(1)
return a print(fun(a)) # a = [] a.append(1) = [1,]
print(a) # a =[] 是可变数据类型
5. L = [x*x for x in range(10)] 和 g = (x*x for x in range(10))的结果分别为:
L = [x * x for x in range(10)] print(L) # list表达式,有多少值都会通过列表显示出来 g = (x*x for x in range(10)) print(g) # 返回一个生成器,不会打印任何值,需要通过 next 或者 for循环进行遍历 执行结果: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
<generator object <genexpr> at 0x000002632AA334C0>
6. 将列表生成式中[]改成() 之后数据结构是否改变?请说明原因。
[]:列表生成式,返回一个list列表,显示所有元素
(): 返回一个生成器,需要通过 next() 或 for 来遍历结果
7. 创建一个闭包必须满足那些条件:
(1)必须要一个嵌套函数
(2)嵌套函数必须引用外部函数中的变量 提示:装饰器就是一个闭包函数
8. 通过函数化编程实现5的阶乘 提示:在函数中使用递归 例如函数中传入5,计算出5*4*3*2*1的结果
def func(n):
if n == 1:
return n
return n * func(n - 1) print(func(5))
9. 为此函数加装饰器
def log(func):
def wrapper(*args, **kwargs):
res = func(*args, **kwargs)
return res return wrapper @log
def foo():
print('hello foo') foo()
10. 写函数,将字典作为参数传进函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
PS:字典中的value只能是字符串或列表
dic = {"k1": "v1v1", "k2": [11, 22, 33, 44]} def func(dic):
for k, v in dic.items():
if len(v) > 2:
dic[k] = v[:2]
return dic
11. 写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
l1 = [0, 1, 2, 3, 4, 5, 6, 7] f = l1[1::2]
print(f) def func(*args):
li = args[0]
return li[1::2] print(func(l1))
12. 使用内置函数将 a="1234" 变为 [1, 2, 3, 4]
a = '' l = list(map(int, a))
print(l)
13. 使用内置函数对obj = [25, 9, -23, 9, -11]按绝对值大小排序。
obj = [25, 9, -23, 9, -11] print(sorted(obj, key=abs))
14.
1)提供2017-11-1 2017-11-30 打印出他们之间的日期
import time start_time = time.mktime(time.strptime('2017-11-1', '%Y-%m-%d'))
end_time = time.mktime(time.strptime('2017-11-30', '%Y-%m-%d')) while end_time >= start_time:
print(time.strftime('%Y-%m-%d', time.localtime(start_time)))
start_time += 86400.00
2)打印出 2017-11-1 2017-11-30的之间日期,并打印出各自对应的星期。
import time start_time = time.mktime(time.strptime('2017-11-1', '%Y-%m-%d'))
end_time = time.mktime(time.strptime('2017-11-30', '%Y-%m-%d')) while end_time >= start_time:
w_dic = {0: '星期一', 1: '星期二', 2: '星期三', 3: '星期四', 4: '星期五', 5: '星期六', 6: '星期日'}
print(time.strftime('%Y-%m-%d', time.localtime(start_time)), w_dic[time.localtime(start_time).tm_wday])
start_time += 86400.00
15. 使用生成器编写foo函数,调用该函数foo(21)产生如下结果(斐波那契数列),1,1,2,3,5,8,13,21
def foo(n):
a, b = 0, 1
while b < n:
yield b
a, b = b, a+b f = foo(21)
16. 读取文件a.txt,匹配文中所有ip地址,将所有ip地址加入到一个列表中,打印该列表。
import re
with open('ip.txt') as f:
i_list = []
for line in f:
ip_list = re.findall(r'((([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])\.){3}([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5]))',
line)
for ip in ip_list:
i_list.append(ip[0]) print(i_list)
17. s = '123.33sdhf3424.34fdg323.324',计算字符串中所有数字的和
import re s = '123.33sdhf3424.34fdg323.324' r = re.findall("\d*\.\d*", s) n = 0
for num in r:
n += float(num) print(n)
18. 正则替换:
1.将字符串中所有的数字换为大写字母A, 结果为 aakkAdddAkkA
result=aakk123ddd55kk66
import re
result='aakk123ddd55kk66'
r = re.sub("\d+", 'A', result) # re.sub(匹配到的正则,'替换的内容', '需要被替换的内容')
print(r)
2.将字符串的前4位数字转换为A
import re
result='aakk123ddd55kk66'
r = re.sub("\d", 'A', result, 4) # re.sub(匹配到的正则,'替换的内容', '需要被替换的内容')
print(r)
19. 利用random模块随机生成四位验证码,包括字母和数字
import random code = ''
for i in range(4):
ran_int = random.randint(1, 9)
ran_str = chr(random.randint(65, 90))
n = random.choice([str(ran_int), ran_str])
code = ''.join([code, n]) print(code)
20. 如下,每个小字典的name对应股票名字,shares对应多少股,price对应股票的价格,用filter过滤出,单价大于100的股票有哪些
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}
] f = filter(lambda x: x['price']> 100, portfolio)
print(list(f))
21. 怎么理解迭代器和生成器?生成器有什么特点?
可迭代的:
必须包含 __iter__ 方法 迭代器:
必须要有 __iter__ 和 __next__ 方法 迭代器一定是可迭代的,可迭代的不一定是迭代器 生成器: 生成器是一种特殊的迭代器,生成器自动实现了“迭代器协议”(即__iter__和__next__方法),不需要在手动实现这两方法
生成器在迭代的过程中可以改变当前迭代值,而修改普通迭代器的当前迭代值往往会发生异常
具有yield关键字的函数都是生成器
22. 函数的形参有哪几种方式,各自在什么情况下使用以及存放顺序?
位置参数:func(a) # 任何类型
默认参数:func(a=1) # 不传参数时,使用默认值
可变参数:func(*args) # 传入list、tuple 类型
关键字参数:func(**kwargs) # 传入字典类型 func(a, b=1, *args, **kwargs)
23. 如下输出以下函数的执行结果
def foo(a1, args = []): # 设置参数时,默认参数不能为可变数据类型
print("args before = %s" % (args))
args.insert(0, 10)
args.insert(0, 99999)
print("args = %s " % (args)) def main():
foo('a')
foo('b') if __name__ == "__main__":
main()
24. 实现9*9乘法口诀表
for i in range(1, 10):
for j in range(1, i+1):
print('{}x{}={}\t'.format(j, i, i*j), end='')
print()
[ python ] 练习作业 - 3的更多相关文章
- python综合作业要求
要求: 1.课程成绩数据(学号尾数为0,1同学完成) 至少要完成内容:分析每年不同班级平均成绩情况.不同年份总体平均成绩情况.不同性别学生成绩情况,并用一定图表展示. 2.集美大学各省录取分数数据(学 ...
- python 每周作业
day2:python的简介与认识day2:# 1.写一个登录程序# username# passwd# 让用户输入账号和密码,输入用户和密码输入正确的话# 提示你 xxx,欢迎登录,今天的日期是xx ...
- 短篇文档兼职看过来 python 课后作业 assignment project
文档兼职 开题报告 读后感 课后作业 等 代写 编程,Java ,Python,R,等语言的,国内外课程作业指导,写作. 有经验,有作品,成交快,放心! 可联系 QQ 550987425
- python基础作业1
目录 附加练习题(提示:一步步拆解) 1.想办法打印出jason 2.想办法打印出大宝贝 3.想办法打印出run 4.获取用户输入并打印成下列格式 5 根据用户输入内容打印其权限 6 编写用户登录程序 ...
- python之作业--------购物车优化
Read Me:继上次简单购物车的实现,有再一次的升级优化了下,现实现以下几个功能: 1.有客户操作和商家操作,实现,客户可以买东西,当金额不足提醒,最后按q退出,打印购物车列表 2.商家可以添加操作 ...
- Python之作业购物车
作业之购物车优化 购物车优化要求如下: 用户入口: 启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表 允许用户根据商品编号购买商品 用户选择商品后,检测余额是否够,够就 ...
- [ python ] FTP作业进阶
作业:开发一个支持多用户在线的FTP程序 要求: 用户加密认证 允许同时多用户登录 每个用户有自己的家目录 ,且只能访问自己的家目录 对用户进行磁盘配额,每个用户的可用空间不同 允许用户在ftp se ...
- Python爬虫作业
题目如下: 请分析作业页面(https://edu.cnblogs.com/campus/hbu/Python2018Fall/homework/2420), 爬取已提交作业信息,并生成已提 ...
- python习题作业合集(持续更新……)
作业: 1.简述位,字节关系 2.请写出“天才”分别用utf-8和gbk编码所占位数 3.如果有一个变量num = 14,请使用int的方法,得到改变量最少可以用多少个二进制位表示 4.写代码,有如下 ...
随机推荐
- 【比赛】HNOI2018 寻宝游戏
考试的时候就拿了30points滚粗了 听说myy对这题的倒推做法很无奈,官方题解在此 正解思路真的很巧妙,也说的很清楚了 就是分别考虑每一位,会发现题解中的那个性质,然后把询问的二进制数按照排序后的 ...
- Alpha 冲刺 —— 十分之一
队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作,对多个目标检测及文字识别模型进行评估.实验,选取较 ...
- 【bzoj2500】幸福的道路
Portal -->bzoj2500 Description 给你一棵树,每条边有边权,有两个给给的人第\(i\)天会从编号为\(i\)的点出发走这个点的树上最长距离,现在要你求一个最长的 ...
- 《剑指offer》— JavaScript(7)斐波那契数列
斐波那契数列 题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项. n<=39 实现代码 function Fibonacci(n) { var arr = ...
- 【OpenCV】SIFT原理与源码分析:关键点搜索与定位
<SIFT原理与源码分析>系列文章索引:http://www.cnblogs.com/tianyalu/p/5467813.html 由前一步<DoG尺度空间构造>,我们得到了 ...
- windows下安装pthreads扩展注意问题
1.php版本必须是ts版本 2.pthreads扩展下载地址 http://windows.php.net/downloads/pecl/releases/pthreads/ 3.把下载的扩展php ...
- 用python的turtle画图
画5个红色的同心圆代码如下: import turtle turtle.pencolor("red") # 设置画笔的颜色 turtle.pensize() # 设置画笔的宽度 t ...
- tp between
$a = array( 'time' => array('between',[c,d]) ); c<= time <= d
- js知识点乱炖
修改属性 元素.style.样式=值 document.getElementById('box').style.width='200px'; 属性操作方式 1.. 的 元素.属性名如果属性是单 ...
- oracle,sqlserver,mysql常见数据库jdbc连接
发现JDBC连接字符串总是容易忘记,特此整理一下常用的几种数据的连接 ORACLE: /** * ORACLE * */ public static Connection getOracleConne ...