版权声明:本文为博主原创文章,未经博主允许不得转载。
文章目录
一、单选题
1.当用户输入2018001时,即number值为2018001,执行print()函数,输出结果为( B )
number = input('请输入您的学号:')
print(type(number))
- A .<class ‘int’>
- B .<class ‘str’>
- C .<class ‘bool’>
- D .<class ‘float’>
2.关于迭代器获取数据,下列描述错误的是( D )
- A .next()返回容器中的下一个值,如果容器中没有更多元素,则抛出StopIter
- B .可以使用for…in…循环获取迭代器数据
- C .可以使用next()方法得到迭代器中的值
- D .当我们已经迭代完最后一个数据之后,再次调用next()函数时程序停止,不用再执行next()函数了
3.请看下面的程序代码,运行结果为:(B )
list_1 = map(str, [1,2,3,4])
print(list(list_1))
- A .[1, 2, 3, 4]
- B .[‘1’, ‘2’, ‘3’, ‘4’]
- C .None
- D .程序报错
4.根据下列图示代码,推断控制台打印结果与选项中哪一项相一致(A)
from functools import reduce
def my_func(x, y):
return x + y
ages = [12,13,11,19,20]
res = reduce(my_func, ages)
print(res)
- A .75
- B . [75,]
- C . [25,30,20]
- D .12+13+11+19+20
5.X
- A .
- B .
- C .
- D .
二、多选题
1.关于日志的作用及等级下列描述正确的是(A D)
- A .日志可以用于记录一些程序在执行过程中的报错信息
- B .日志是不分等级的,所有的都是同级别的 【分等级】
- C .日志在程序开发过程中没有实际作用的 【错】
- D .日志的等级包括error,warnning等
三、练习题
3.1 加密模块:hashlib
一、难破解、不可逆
# coding: utf-8
import hashlib
import time
# 基础签名
base_sign = 'muke'
def custom():
# 时间戳:浮点类型
a_timestamp = int(time.time())
_token = '%s%s'%(base_sign, a_timestamp)
# 生成 hashlib 对象
hashobj = hashlib.sha1(_token.encode('utf-8'))
# 生成 a的真实token :生成16进制加密串
a_token = hashobj.hexdigest()
return a_token, a_timestamp
# token:请求帮服务的认证token
# timestamp:请求帮生成token的时间戳
def b_service_check(token, timestamp):
_token = '%s%s'%(base_sign, timestamp)
b_token = hashlib.sha1(_token.encode('utf-8')).hexdigest()
if token == b_token:
return True
else:
return False
if __name__ == '__main__':
need_help_token, timestamp = custom()
# result = b_service_check(need_help_token, timestamp)
time.sleep(1)
result = b_service_check(need_help_token, int(time.time())) # 执行速度太快,浮点转为整形
if result == True:
print('a合法,b服务可以进行帮助')
else:
print('a不合法,b不可进行帮助')
二、总结
(1)hashlib 模块主要用于加密相关的操作,里面含有很多常用的加密算法,如:SHA1,SHA224,SHA256,SHA384,SHA512,MD5等
(2)加密需要先实例化MD5对象,再将字符串转成 bytes 类型进行加密,注意:加密必须是 bytes 类型,不能直接对字符串进行加密
import hashlib
# md5
m = hashlib.md5() # 实例化 md5对象
m.update('imooc'.encode()) # 'imooc'.encode() 把字符串转成 bytes 类型
print(m.hexdigest())
# sha1
s1 = hashlib.sha1()
s1.update('imooc'.encode('utf-8'))
print(s1.hexdigest())
# sha256
s256 = hashlib.sha256()
s256.update('imooc'.encode('utf-8'))
print(s256.hexdigest())
# sha224
s224 = hashlib.sha224()
s224.update('imooc'.encode('utf-8'))
print(s224.hexdigest())
# sha384
s384 = hashlib.sha384()
s384.update('imooc'.encode('utf-8'))
print(s384.hexdigest())
# sha512
s512 = hashlib.sha512()
s512.update('imooc'.encode('utf-8'))
print(s512.hexdigest())
3.1 加密模块:base64
方式一
import base64
# 加密
def encode(data):
if isinstance(data, str):
data = data.encode('utf-8')
elif isinstance(data, bytes):
data = data
else:
raise TypeError('data need bytes or str')
return base64.encodebytes(data).decode('utf-8')
# 解密
def decode(data):
if not isinstance(data, bytes):
raise TypeError('data need bytes')
return base64.decodebytes(data).decode('utf-8')
if __name__ == '__main__':
result = encode('hello xiaomu')
print(result)
new_result = decode(result.encode('utf-8'))
print(new_result)
方式二:对加密的字符串进行二次输出
import base64
replace_one = '%'
replace_two = '$'
# 加密
def encode(data):
if isinstance(data, str):
data = data.encode('utf-8')
elif isinstance(data, bytes):
data = data
else:
raise TypeError('data need bytes or str')
_data = base64.encodebytes(data).decode('utf-8')
_data = _data.replace('a', replace_one).replace('2', replace_two)
return _data
# 解密:注意比特类型转换
def decode(data):
if not isinstance(data, bytes):
raise TypeError('data need bytes')
replace_one_b = replace_one.encode('utf-8')
replace_two_b = replace_two.encode('utf-8')
data = data.replace(replace_one_b, b'a').replace(replace_two_b, b'2')
return base64.decodebytes(data).decode('utf-8')
if __name__ == '__main__':
result = encode('hello xiaomu')
print(result)
new_result = decode(result.encode('utf-8'))
print(new_result)
方式三、总结
Base64 是一种用64个字符来表示任意二进制数据的方法,可用来将非ASCII 字符的数据转换成ASCII字符,是一种可逆的编码方式。写法如下:
import base64
# 'imooc'.encode() 将字符串变成二进制
res = base64.b64encode('imooc'.encode()) # base64编码
# res.decode() 把 bytes 转成 字符串
jie_mi_res = base64.b64decode(res.decode()) # base64 解码
print(jie_mi_res.decode())
3.2 日志模块
一、简单练习
import logging
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s%(filename)s[line:%(lineno)d]%(levelname)s%(message)s',
filename='back.log',
filemode='w'
)
logging.info('这是第一个记录的日志信息')
logging.warning('这是一个警告')
logging.error('这是一个重大的错误信息')
logging.debug('这是一个debug')
print(logging.debug)
print(logging.warning)
print(logging.error)
print(logging.warn)
print(logging.ERROR)
print(logging.WARN)
print(logging.DEBUG)
二、函数封装
import logging
import os
def init_log(path):
# 做验证
if os.path.exists(path):
mode = 'a' # 如果日志文件存在,则追加
else:
mode = 'w' # 如果日志文件不存在,则创建
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s%(filename)s[line:%(lineno)d]%(levelname)s%(message)s',
filename=path,
filemode=mode
)
return logging
current_path = os.getcwd()
path = os.path.join(current_path, 'back.log')
log = init_log(path)
log.info('这是第一个记录的日志信息')
log.warning('这是一个警告')
log.error('这是一个重大的错误信息')
log.debug('这是一个debug')
3.3 虚拟环境
# 以下操作需在终端执行:
# 安装:pip install virtualenv
# 创建Python 3.6 的虚拟环境:virtualenv -p python3.6 env3.6
# 进入到 Python 3.6的环境:./env3.6/bin/activate 错误提示:source ./env3.6/bin/activate
# 退出虚拟环境:deactivate
# 回到以前创建的虚拟环境:关闭终端,重新打开
3.4 常用函数集合
# 绝对值
print(abs(-10))
# 判断列表内容是否全是 true
result = all(['', 'a' in 'abc', True, None]) # ''、None 属于 False 范畴
print(result)
result_02 = all([True, '1', 10, len('abc')])
print(result_02)
# 迭代时记录索引
python = ['django', 'flask', 'tornado']
for index, item in enumerate(python):
print(index, item)
# input
food = input('您想吃什么:')
print(food)
# help
# print(help(input))
# print(help(list))
# vars
class Test(object):
a = 1
b = 2
def __init__(self):
self.a = self.a
self.b = self.b
test = Test()
print(test.a)
print(test.b)
result = vars(test)
print(result)
# hasattr
print(hasattr(test, 'a'))
print(hasattr(test, 'c'))
print(hasattr(list, 'append'))
# setattr
setattr(test, 'c', 3)
print(test.c)
print(vars(test))
# setattr(list, 'c', 1)
if hasattr(list, 'append'):
print(getattr(list, 'append'))
else:
print('不存在')
# any:判断内容是否有True值
a = ['', None, True, 0]
print(any(a))
# all ——————> and
# any ——————> or
# 练习
number = input('请输入您的学号:')
print(type(number))
3.5 案例:使用random进行抽奖
一、简单的抽奖系统
import random
gifts = ['iphone', 'ipad', 'car', 'TV']
def choice_gifts():
gift = random.choice(gifts)
print('您得到了%s'%gift)
if __name__ == '__main__':
choice_gifts()
二、增加中奖概率
import random
gifts = ['iphone', 'ipad', 'car', 'TV']
def choice_gift_new():
count = random.randrange(0,100,1)
if 0 <= count <= 50:
print('您中了一个iphone!!!')
elif 50 < count <= 70:
print('您中了一个ipad!!!')
elif 70 < count < 90:
print('您中了一个TV电视!!!')
elif count >= 90:
print('您中了一辆汽车!!!')
if __name__ == '__main__':
choice_gift_new()
3.6 迭代器
一、
iter_obj = iter((1, 2, 3))
print(next(iter_obj))
print(next(iter_obj))
print(next(iter_obj))
print(next(iter_obj)) # 报错
二、
iter_obj = iter((1, 2, 3))
def _next(iter_obj):
try:
return next(iter_obj)
except StopIteration:
return None
print(_next(iter_obj))
print(_next(iter_obj))
print(_next(iter_obj))
print(_next(iter_obj))
三、
iter_obj = iter((1, 2, 3))
for i in iter_obj:
print(i)
四、
def make_iter():
for i in range(10):
yield i
iter_obj = make_iter() # 迭代器
print(type(iter_obj))
for i in iter_obj:
print(i)
print('——————————————————')
for i in iter_obj:
print(i)
五、
# 创建迭代器对象
iter_obj = (i for i in range(10))
for i in iter_obj:
print(i)
print('===========================================')
for i in iter_obj:
print(i)
3.7 高阶函数
一、
from functools import reduce
res_f = filter(lambda x: x>1, [1,2,3])
print(list(res_f))
res_m = map(lambda x: x>1, [1,2,3])
print(list(res_m))
res_r = reduce(lambda x,y: x+y, [0,1,2])
print(res_r)
二、
from functools import reduce
# 一
frunts = ['apple', 'banana', 'orange']
result = filter(lambda x: 'e' in x, frunts)
print(list(result))
# 二
def filter_func(item):
if 'e' in item:
return True
result = filter(filter_func, frunts)
print(list(result))
# 三
map_result = map(filter_func, frunts)
print(list(map_result))
# 四
reduce_result = reduce(lambda x,y: x+y, [0,1,2])
print(reduce_result)
# 五
reduce_result_str = reduce(lambda x, y: x+y, frunts)
print(reduce_result_str)
四、编程题
4.1 filter
1、要求
- 使用filter函数,求0-50以内(包括50)的偶数
- [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44,46, 48, 50]
2、任务
- 定义use_filter函数
- 函数体内:实现过滤偶数值的功能
3、任务提示
- 使用变量data接收0-50(包含50)的数字,即list(range(51))
4、代码实现:usefilter.py
def use_filter(data):
# 使用result接收filter过滤偶数值的功能
result =
return result
if __name__ == '__main__':
# 使用data接收0-50的数值
data =
# 调用use_filter函数传入data,使用result变量接收
result =
print(list(result))
4.2 map
1、要求
- 使用map函数,求元组 (2,4,6,8,10,12)中各个元素的5次方
2、任务
- pow_five函数体内:计算元素的5次方
- 调用pow_five函数传入data,使用result接收
3、任务提示
- pow(x,y) 方法返回 x的y次方的值
- 计算结果:(32, 1024, 7776, 32768, 100000, 248832)
4、代码实现:usemap.py
def pow_five(data):
# 计算元素的5次方
result =
return result
if __name__ == '__main__':
data = (2,4,6,8,10,12)
# 调用pow_five函数传入data,使用result接收
result = map()
print(tuple(result))
4.3 reduce
1、要求
- 请运用reduce函数,计算20的阶乘,并于终端打印计算结果(如下)
- 2432902008176640000
2、任务
- 定义use_reduce函数
- 函数体内:实现某个数值的阶乘
3、任务提示
- 结合list和range函数实现1-20(包含20)的数值即list(range(1,21))
- 20的阶乘为12345*…*20
4、代码实现:reduce.py
# 从functools 中导入reduce函数
def use_reduce(x, y):
# 使用result接收两个数的乘积
result =
return result
if __name__ == '__main__':
# 使用data接收一个1-20的数值
data =
# 调用use_reduce函数传入data
result = reduce()
4.4 作业
1、要求
根据现实生活中的猜数字游戏的游戏规则,运用Python语言模拟实现猜数字游戏的的基本功能,请学员们参考真实的猜数字游戏规则和如下的程序运行效果图进行代码编写,以实现“数字猜猜猜”小游戏的基本功能。游戏规则介绍如下:
- 1、玩家根据提示进行数字区间起始位置和终止位置的输入
- 2、依据 1 中输入的数字区间,产生该区间内一个随机数,用于进行猜测比对的终值
- 3、提示用户输入所猜测的数字,与 2 中产生的随机数字进行比对,并将相应的信息写入指定的日志文件(日志文件名称:record.txt;日志文件路径:与.py文件处于同一级目录)
- 4、依据 3 中的比对结果。若两者不等,打印友好提示,重复 3、4 步骤;若两者相等,则退出该函数,执行下列语句
- 5、当猜测的值不在指定区间内时,不需要统计次数和记录
- 6、打印如效果图所示,用以提示游戏结束的信息
2、运行效果图
3、任务描述
4、代码实现
在这里插入代码片
版权声明:本文为博主原创文章,未经博主允许不得转载。