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的更多相关文章

  1. python综合作业要求

    要求: 1.课程成绩数据(学号尾数为0,1同学完成) 至少要完成内容:分析每年不同班级平均成绩情况.不同年份总体平均成绩情况.不同性别学生成绩情况,并用一定图表展示. 2.集美大学各省录取分数数据(学 ...

  2. python 每周作业

    day2:python的简介与认识day2:# 1.写一个登录程序# username# passwd# 让用户输入账号和密码,输入用户和密码输入正确的话# 提示你 xxx,欢迎登录,今天的日期是xx ...

  3. 短篇文档兼职看过来 python 课后作业 assignment project

    文档兼职 开题报告 读后感 课后作业 等 代写 编程,Java ,Python,R,等语言的,国内外课程作业指导,写作. 有经验,有作品,成交快,放心! 可联系 QQ 550987425

  4. python基础作业1

    目录 附加练习题(提示:一步步拆解) 1.想办法打印出jason 2.想办法打印出大宝贝 3.想办法打印出run 4.获取用户输入并打印成下列格式 5 根据用户输入内容打印其权限 6 编写用户登录程序 ...

  5. python之作业--------购物车优化

    Read Me:继上次简单购物车的实现,有再一次的升级优化了下,现实现以下几个功能: 1.有客户操作和商家操作,实现,客户可以买东西,当金额不足提醒,最后按q退出,打印购物车列表 2.商家可以添加操作 ...

  6. Python之作业购物车

    作业之购物车优化 购物车优化要求如下: 用户入口: 启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表 允许用户根据商品编号购买商品 用户选择商品后,检测余额是否够,够就 ...

  7. [ python ] FTP作业进阶

    作业:开发一个支持多用户在线的FTP程序 要求: 用户加密认证 允许同时多用户登录 每个用户有自己的家目录 ,且只能访问自己的家目录 对用户进行磁盘配额,每个用户的可用空间不同 允许用户在ftp se ...

  8. Python爬虫作业

    题目如下:   请分析作业页面(https://edu.cnblogs.com/campus/hbu/Python2018Fall/homework/2420),    爬取已提交作业信息,并生成已提 ...

  9. python习题作业合集(持续更新……)

    作业: 1.简述位,字节关系 2.请写出“天才”分别用utf-8和gbk编码所占位数 3.如果有一个变量num = 14,请使用int的方法,得到改变量最少可以用多少个二进制位表示 4.写代码,有如下 ...

随机推荐

  1. 【比赛】HNOI2018 寻宝游戏

    考试的时候就拿了30points滚粗了 听说myy对这题的倒推做法很无奈,官方题解在此 正解思路真的很巧妙,也说的很清楚了 就是分别考虑每一位,会发现题解中的那个性质,然后把询问的二进制数按照排序后的 ...

  2. Alpha 冲刺 —— 十分之一

    队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作,对多个目标检测及文字识别模型进行评估.实验,选取较 ...

  3. 【bzoj2500】幸福的道路

    Portal -->bzoj2500 Description ​  给你一棵树,每条边有边权,有两个给给的人第\(i\)天会从编号为\(i\)的点出发走这个点的树上最长距离,现在要你求一个最长的 ...

  4. 《剑指offer》— JavaScript(7)斐波那契数列

    斐波那契数列 题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项. n<=39 实现代码 function Fibonacci(n) { var arr = ...

  5. 【OpenCV】SIFT原理与源码分析:关键点搜索与定位

    <SIFT原理与源码分析>系列文章索引:http://www.cnblogs.com/tianyalu/p/5467813.html 由前一步<DoG尺度空间构造>,我们得到了 ...

  6. windows下安装pthreads扩展注意问题

    1.php版本必须是ts版本 2.pthreads扩展下载地址 http://windows.php.net/downloads/pecl/releases/pthreads/ 3.把下载的扩展php ...

  7. 用python的turtle画图

    画5个红色的同心圆代码如下: import turtle turtle.pencolor("red") # 设置画笔的颜色 turtle.pensize() # 设置画笔的宽度 t ...

  8. tp between

    $a = array( 'time' => array('between',[c,d]) ); c<= time <= d

  9. js知识点乱炖

    修改属性 元素.style.样式=值     document.getElementById('box').style.width='200px'; 属性操作方式 1.. 的 元素.属性名如果属性是单 ...

  10. oracle,sqlserver,mysql常见数据库jdbc连接

    发现JDBC连接字符串总是容易忘记,特此整理一下常用的几种数据的连接 ORACLE: /** * ORACLE * */ public static Connection getOracleConne ...