python学习 第二模块习题总结

part2 习题

1.简述第一模块学习的内容

基本数据类型:【1、定义方式, 2、作用 3、常用操作(增删改查)字典,列表的增删改查必须会,字符串的常用方法也必须会的】【4、其他操作:】【5、数据类型之间的转换】
浅copy和深copy:
基本运算符:
流程控制:
字符编码:
文件操作(增删改查)
其他:
(id、type、value、is、in、hash)
格式化:% format
切片:[]
enumrate: 为一个可迭代的对象添加序号,可迭代的对象你可以理解成能用for循环的就是可迭代的。默认是编号是从0开始,可以设置从1开始
range():顾头不够尾 前闭后开

2.简述第二模块学习的内容,学了哪些模块

函数(【1、定义方式 2、调用方式 3、参数类型 4、返回值,5、作用域(LEGB)】)
    函数的嵌套(闭包函数,递归函数,高阶函数)
    内置函数(map filter sorted reduce zip)
    匿名函数 三目运算 列表推导式 装饰器 生成器表达式 生成器函数  迭代器  可迭代对象  协程函数    

    常用模块 time  datatime  random  os  sys  json  pickle  shelve   xml   hashlib  logger  re正则
	shutil 
    软件开发规范

3.LEGB的含义

locals -> enclosing -> globals -> __builtins__
locals 是函数内的名字空间,包括局部变量和形参
enclosing 外部嵌套函数的名字空间(闭包中常见)
globals 全局变量,函数定义所在模块的名字空间
builtins 内置模块的名字空间

4.看程序说结果

	a = 8
	b = 10
	def outer():
		a = 0
		b = 1
		def inner():
			a = 10
		    b = 11
		inner()
	outer()
	print(a,b)
8,10

5.看程序说结果

def test():
    print(luffy)
luffy = "the king of sea."
test()
"the king of sea."

6.看程序说结果

luffy = "the king of sea."
def test():
    print(luffy)
    luffy = 'e'
test()
UnboundLocalError:local variable 'luffy' referenced before assignment

7.看程序说结果

num = 20
def show_num(x=num):
    print(x)
show_num()
num = 30
show_num()
20
20

8.看程序说结果

num = [20]
def show_num(x=num):
    print(x)
show_num()
num.append(123)
#num=[123]
show_num()
[20]
[20,123]

9.写函数,传入一个参数n,返回n的阶乘
# 例如:cal(7)
# 计算7654321

# 方法一(递归)
def cal(x):
    if x == 1:
        return 1
    return x*cal(x-1)

res = cal(7)
print(res)

# 方法二
#(使用自带库 math)
import math
print(math.factorial(5))

# 方法三(reduce)
from functools import reduce
print(reduce(lambda x, y: x * y, range(7,0,-1)))

# 方法四
# 常规写法:
def cal(n):
    res= 1
    for i in range(n,0,-1):
        res = res*i
    return res
print(cal(7))

10.可迭代对象,迭代器对象,生成器表达式

可迭代对象:从语法形式上讲,内置有__iter__方法的对象都是可迭代对象,字符串、列表、元组、字典、集合、打开的文件都是可迭代对象。
迭代器对象:调用obj.iter()方法返回的结果就是一个迭代器对象(Iterator)。迭代器对象是内置有iter和next方法的对象。
生成器表达式:创建一个生成器对象有两种方式,一种是调用带yield关键字的函数,另一种就是生成器表达式,与列表生成式的语法格式相同,只需要将[]换成()。

11.li = [1,2,3,5,5,6,7,8,9,8,3]
# - 用列表推导式,写一个所有数值乘以2的功能
# - 用map,写一个所有数值乘以2的功能
# - 用filter函数将列表中所有的偶数筛选出来。

# 1
li = [1,2,3,5,5,6,7,8,9,8,3]
li2 = [i*2 for i in li]

# 2
li2 = map(lambda x:x*2,li)

# 3
filter(lambda x:x%2==0,li)

12.如下,每个小字典的name对应股票名字,shares对应多少股,price对应股票的价格
# - 用filter过滤出价格大于100的股票有哪些,
# - 用sorted按价格从高到底排序列表portfolio,
# - 用max找出价格最高的那支股票。

portfolio = [
	   {'name': 'IBM', 'shares': 100, 'price': 91.1},
	   {'name': 'AAPL', 'shares': 50, 'price': 543.22},
	   {'name': 'FB', 'shares': 200, 'price': 21.09},
	   {'name': 'QCOM', 'shares': 35, 'price': 31.75},
	   {'name': 'YHOO', 'shares': 45, 'price': 16.35},
	   {'name': 'NIO', 'shares': 75, 'price': 115.65}
	]
filter(lambda x:x['shares']>100,portfolio)
sorted(portfolio,key=lambda x:x['price'],reverse=True)
max(portfolio,key=lambda x:x['price'])

13.chr,ord,divmod,函数功能

print(chr(65))
print(ord("A"))
# chr() 找到数字对于的ascii码( # 将一个数字转换成一个字母)
# ord() ascii码对应的数字
# chr ord 只适用于ascii码
# divmod 返回除法的(值,余数)常用于分页

14.os.path.dirname和os.path.abspath含义是什么?

os.path.dirname:文件名
os.path.abspath:文件绝对路径

15.看程序说结果

import hashlib
m = hashlib.md5()
m.update(b'luffy')
m.update(b'city')
print(m.hexdigest())
m2 = hashlib.md5()
m2.update(b'luffycity')
print(m2.hexdigest())

16.函数运行注意点

__name__ 等于'__main__'加到函数中

17.编写装饰器,为每个函数加上统计运行时间的功能
# 提示:在函数开始执行时加上start=time.time()就可纪录当前执行的时间戳,函数执行结束后在time.time() - start就可以拿到执行所用时间

import time

def time_func(func):
    def outter(*args,**kwargs):
    	t1 = time.time()
        res = func(*args,**kwargs)
        t2 = time.time()
        print(t2-t1)
        return res
    return outter

18.时间模块

import time, datetime
print(time.strftime("%Y-%m-%d %X", time.localtime()))
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
print(time.strftime("%Y-%m-%d %X"))

print(datetime.datetime.now().strftime("%Y-%m-%d %X"))

# 一天前
now = time.time()
yesterday = now - 60*60*24
yes_con = time.localtime(yesterday)
yes_str = time.strftime('%Y-%m-%d %X',yes_con)

####
now = datetime.datetime.now()
print(now.strftime("%Y-%m-%d %H:%M:%S"))  #date:"Y-m-d H:i:s
# # 当前时间+1年
print(1111,(now + datetime.timedelta(weeks=-52)).strftime("%Y-%m-%d %H:%M:%S"))
# 七天的时间间隔
print((now + datetime.timedelta(days=7)).strftime("%Y-%m-%d %H:%M:%S"))
# 100秒的时间间隔
print((now + datetime.timedelta(seconds=100)).strftime("%Y-%m-%d %H:%M:%S"))
# 3小时
print((now + datetime.timedelta(hours=3)).strftime("%Y-%m-%d %H:%M:%S"))
# 30分钟
print((now + datetime.timedelta(minutes=30)).strftime("%Y-%m-%d %H:%M:%S"))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值