Python 程序设计 – 简答题 – 22春复习题

1.在 python 中导入模块中的对象有哪几种方式?(1)

(1)import 模块名 [as 别名]

import math  #直接导入math库
import numpy as np #导入模块并设置别名

(2)from 模块名 import 对象名 [as 别名]

from math import sin #导入明确指定的对象
from math import sin as f #导入math库中的sin对象并将其命名为f

(3)from 模块名 import *

python使用pip install xxxx 可以直接导入名字为xxxx的库。

2.Python 脚本程序的“ _ _name_ _ ”变量及其作用。(1)

答:每个python脚本在运行时都有一个_ _name_ _属性。利用_ _name_ _属性可以控制python程序中代码的运行方式。

1)当python程序自己独立执行时,_ _name_ _变量的值就是:_ _main_ _

2) 当python程序是作为模块被导入时,那么_ _name_ _变量的值就是:程序的文件名,也就是.py前面的文件名称。

使用import语句导入一个python程序文件时,会执行其中的代码,如果一段代码不想在导入模块时执行,可以在这段代码前面加一个条件判断if _ _name_ _ == '_ _main_ _':

3.为什么说 Python 采用的是基于值的内存管理模式?(1)

答:Python采用的是基于值的内存管理方式,如果在同一个程序中或者交互模式下同一个语句中为不同变量赋值相同值,这个值在内存中只有一份,多个变量指向同一块内存地址。另外,Python程序中的变量不存储值,而是存储值得引用,列表、元组、字典、集合等可迭代对象中包含的也是元素的引用。在调用函数时,也是把实参的引用传递给形参。

python启动时,会对[-5,256]的整数进行缓存,对于区间以外的整数,同一个程序中或交互模式下同一个语句中的同值不同名变量会共用同一空间,不同程序或交互模式下不同语句不遵守这个约定。

4.为什么应尽量从列表的尾部进行元素的增加与删除操作?(2)

答:Python总是会保证列表中的相邻元素的引用之间没有空隙,在增加和删除元素时会自动进行内存空间的收缩和扩张。在列表中间位置插入元素时,该位置后面的所有元素会向后移动,下标会发生改变,并且元素的移动会带来额外的开销;同理,在列表中间位置删除元素时,后面的元素向前移动,下标会发生改变,并且元素的移动会带来额外的开销。

5.分析逻辑运算符 or 的短路求值特性。(3)

答:逻辑运算符“or”具有惰性求值特点,只计算必须计算的值。计算使用“or”连接的表达式值时,从左向右依次计算每个子表达式,直到遇到某个子表达式的值等价于True时就停止,后面的所有子表达式都不再计算,并且把最后计算的子表达式的值作为整个表达式的最终值。

假设有表达式“子表达式“1 or子表达式2”,如果子表达式1的值等价于True,那么无论表达式2的值是什么,整个表达式的值总是等价于True。因此,不会再计算表达式2的值。

6.Python 异常处理结构有哪几种形式?(3,,实际第8章)

(1)try ··· except ··· 结构

(2)try ···· except ··· else ··· 结构

(3)带有多个except的try结构

(4)try ··· except ··· finally ··· 结构

7.异常和错误有什么区别?(8)

错误是代码运行前,非正常的,不应该出现的,比如:缩进、循环语句的冒号,(差不多就是语法错误)

异常是指程序运行时引发的错误,例如文件不存在,网络异常,类型异常,磁盘空间不足等

异常是代码运行时产生的 ,解释器检测到错误并且认为是异常,抛出异常

如果不捕获处理可能会终止程序,我们可以在代码中主动捕获异常并处理

8.简单解释 Python 中以下划线开头的变量名特点。(6)

答:在python中,以下划线开头的变量名和方法名有特殊的含义,尤其是在类的定义中,用下画线作为变量名和方法名前缀和后缀来表示类的特殊成员。

(1)_xxxx:这样的对象叫做保护成员,模块中这样的对象默认不能用from module import * 导入

(2)_ _xxx_ _:系统定义的特殊成员

(3)_ _xxx:类中的私有成员,只有该类对象自己能访问,子类对象也不能访问这个成员,但在对象外部可以通过“对象名._类名_ _xxx”这样的特殊方式来访问。

注:在IDLE交互模式下,一个下划线“_”表示在解释器中最后一次显示的内容或最后一次语句正确执行的输出结果,在程序中单个下划线表示没有名字的变量占位符

9.简单解释文本文件与二进制文件的区别。(7)

文本文件:存储的是常规字符串,由若干文本行组成,通常每行以换行符’\n’结尾。可以用记事本或者其他文本编辑器查看阅读,编辑。如英文字母,汉字等。

二进制文件:把对象内容以字节串(bytes)进行存储无法用记事本或其他普通文本处理器直接进行编辑,需要使用专门软件进行解码后读取,显示,修改或执行。如图形图像文件、音视频文件、可执行文件等。

10.简述文件的操作流程,并写出文件打开的模式有哪些。(6)

答:(1)打开文件并创建文件对象

(2)通过该文件对象对文件内容进行读取、写入、删除、修改等操作

(3)关闭并保存文件内容

f1 = open('text.txt','r')
f1.close()
模式说明
r读模式
w写模式
a追加模式
b二进制模式(可与其他模式组合使用)
+读写模式(可与其他模式组合使用)
文件打开模式

r只读,r+读写,不创建

w新建只写,w+新建读写,二者都会将文件内容清零(以w方式打开,不能读出。w+可读写)

w+与r+区别:

r+:可读可写,若文件不存在,报错;w+: 可读可写,若文件不存在,创建

r+与a+区别:

r+进行了覆盖写

以a,a+的方式打开文件,附加方式打开(a:附加写方式打开,不可读;a+: 附加读写方式打开)

11.简单解释 TCP 和 UDP 的区别。(10)

UDP:属于无连接协议,在UDP编程是不需要首先建立连接,而是直接向接收方发送信息。

TCP:使用TCP进行通信需要首先在客户端和服务端之间建立连接,并且要在通信结束后关闭连接以释放资源。TCP能够提供比UDP更好的服务质量,通信可靠性有本质上的提高。

12.简单介绍 socket 模块中用于 UDP 编程的常用方法。(10)

答:UDP编程经常用到的socket模块函数和套接字对象方法有3个。

(1)socket([family[,type[,proto]]]):socket模块函数,创建一个Socket对象,(其中family为socket.AF_INET表示IPv4,socket.AF_INET6表示IPv6;type为SOCK_STREAM表示TCP,SOCK_DGRAM表示UDP)

(2)sendto(string,address):套接字对象方法,把string指定的内容发送给address指定的地址,(其中address是一个包含接收方IP地址和应用进程端口号的元组,格式为(ip地址,端口号))

(3)recvfrom(bufsize[,flags]):套接字对象方法,用来接收数据

13.简单介绍 socket 模块中用于 TCP 编程的常用方法。(10)

答:TCP一般用于要求可靠数据传输的场合。编写TCP程序时经常需要用到的socket模块的函数或套接字对象方法主要有8个。

(1)socket():socket模块函数

(2)connect(address):套接字对象方法,连接远程计算机。

(3)send(bytes[,flags]):套接字对象方法,发送数据。

(4)recv(bufsize[,flags]):套接字对象方法,接收数据。

(5)bind(address):套接字对象方法,绑定地址。

(6)listen(backlog):套接字对象方法,开始监听,等待客户端连接。

(7)accept():套接字对象方法,响应客户端的请求。

(8)sendall(data[,flags]):套接字对象方法,发送全部数据。

14.简单介绍安全哈希算法。在 Python 中使用哪些库可以实现该类算法?

答:安全哈希算法也称为报文摘要算法,对任意长度的信息可以计算得到固定长度的唯一指纹。安全哈希算法是不可逆的,无法从指纹还原得到原始消息,属于单向变换算法,常用于数字签名领域。

实现算法的库:标准库hashlib计算字符串的安全哈希值、扩展库pycryptodome提供了MD2,MD4,MD5,HMAC,RIPEMD,SHA,等多个安全哈希算法的实现。

15.简单介绍 RSA。在 Python 中怎么实现 RSA 算法?

答:RSA是一种典型的非对称密钥密码体制,试图从加密密钥和解密秘钥中的任意一个推导出另一个在计算上是不可行的。RSA的安全性建立在“大数分解和素性检测”这一著名的数论难题上,公钥可以完全公开,无需保密,但必须提供完整性检测体制以保证不受篡改;密钥由用户自己保存,通信双方无需实现交换密钥就可以进行保密通信。

python扩展模块rsa封装了RSA算法,可以方便的使用该算法生成密钥以及加解密。

16.简述 RSA 密码体制算法过程。

(1)由用户选择两个互异并且距离较远的大素数p和q

(2)计算n=pxqf(n)=(p-1)x(q-1)

(3)选择正整数e,使其与f(n)最大公约数1,然后计算正整数d,使得e x df(n)余数1,即e x d≡1 mod f(n),最后销毁pq

经过以上步骤,得出公钥(n,e)和私钥(n,d)

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容