面向对象考试
全栈15期考试题
考试须知:
- 分值:100分
- 考试时间:3小时
- 考试类型:闭卷考试
- 考试纪律:
- 教室断网
- 禁止翻阅笔记
- 禁止使用Pycharm
- 禁止互相讨论
- 禁止拷贝
- 以上情况,一经发现取消考试成绩并处以留级处理。
考试范围
- python基础
- 函数
- 模块
- 面向对象
考试题目
- 简述解释型和编译型编程语言?(1分)
解释型:程序执行时代码从上到下边解释边执行,类似于同步翻译。
编译型:程序先经过编译完成后,生成了相应的字节码或机器码,然后再执行。 - 位和字节的关系?(1分)
1字节=8位 - b、B、KB、MB、GB 的关系?(1分)
8bit = 1bytes
1024byte =1KB
1024KB=1MB
1024MB=1GB
1024GB= 1TB - 字符串和列表如何相互转换?(2分)
字符串转列表: list('fku3ksjf')
列表转字符串: "".join(['xx','x1','x2']) # 内部需要是字符串 - 写代码实现字符串反转,如:v
= ‘oldboy’ (2分)
v[::-1]
注:其他方式也可以 - python递归的最大层数?(1分)
998 或 1000 - 列举 Python2和Python3的区别?(2分)
py2:unicode、bytes(str)
py3: str 、bytes
等… - 用一行代码实现数值交换:
(1分)
a = 1
b = 2
a,b = b,a - 比较:
a = [1,2,3] 和
b = [(1),(2),(3) ] 以及
c = [(1,),(2,),(3,) ] 的区别?(2分)
a=[1,2,3]
b=[1,2,3]
c = [(1,),(2,),(3,)] - 求结果:(3分)
v = [lambda:x for x in range(10)]
print( v ) # 一个列表,列表中有10个匿名函数
print( v[0] ) # 列表中的第一个函数
print( v[0]() ) # 执行函数,打印:9 - re的match和search区别?(1分)
match()函数只检测RE是不是在string的开始位置匹配,在0位置匹配成功的话才有返回不是的话返回NONE
search()会扫描整个string查找匹配 - 如何实现
“1,2,3” 变成
[‘1’,’2’,’3’] ? (1分)
v = "1,2,3"
v.split(",") - 13. msg = '123.33sdhf3424.34fdg323.324',计算字符串中所有数字的和(2分)
本题结果应为:123.33+3424.34+323.32
通过正则获取到所有数字,然后数字相加。 - 有如下代码,写出调
的顺序以及结果(2分)
出题有问题,无图,可以直接给分。 - 创建一个闭包函数需要满足哪几点?(2分)
a. 两层函数
b. 第一层函数返回内层函数的名称 - 简述面向对象的三大特性并用代码说明?(3分)
封装:数据封装到对象;方法封装到类
继承:多个类中都有的方法提取到父类中
多态:函数的参数可以是多重形态,如:def func(arg):arg.send() - 列举面向对象所有成员并用代码表示。(6分)
变量:实例变量、类变量(字段:字段、静态字段也可以)
方法:实例方法、静态方法、类方法
属性:属性 - 看代码写结果:【禁止运行,如果报错可认为程序会继续向后执行】(4分)
打印:
l ,即:alex中的l
报错
- 看代码写结果:【禁止运行,如果报错可认为程序会继续向后执行】(4分)
打印:
UserInfo,999
666,Department - 看代码写结果:【禁止运行,如果报错可认为程序会继续向后执行】(3分)
打印:
123
None - 背写你了解的10个特殊方法以及调用方法【附示例】(10分)
__init__/__call__/__dict__/__enter__/__exit__/
__getitem__/__setitem__/__delitem__/__add__/__new__ …
不限以上方法,其他也可以 - 列举你了解的5个模块并简述其作用。(5分)
logging,日志
hashlib,加密
re, 正则
time,时间处理
json,序列化 - 简述:isinstance、issubclass、callable、type 的作用(4分)
isinstance, 判断对象是否是某个类以及其派生类的对象
issubclass,判断某各类是否是指定类的派生类。
callable,判断某个对象是否可以被执行,即:加括号。
type, 获取对象所属于的类。 - 函数和方法如何通过代码区分?(2分)
MethodType,isinstance(值,MethodType)
FunctionType,isinstance(值,FunctionType) - 看代码写结果:(3分)
[33,]
[33,11,22] - 如何将一个对象变成一个可迭代对象?(2分)
在类中编写 __iter__ 方法,且该方法要返回迭代器或生成器(生成器是迭代的一种) - 简述反射的作用并列举反射相关的所有方法。(4分)
反射,用于根据字符串的形式去指定对象中获取其成员。
getattr/setattr/delattr/hasattr - 看代码写结果:(2)
wupeqii@xx.com
wupeiqi@xx.com - 写代码实现一个md5加密的函数。(3分)
m = hashlib.md5(b’xxxdff’)
m.update(b’fadfsdf’)
m.hexdigest() - 接口的作用?(1分)
约束实现接口的类中必须编写指定方法。 - 抽象类加抽象方法
和
接口的区别?(2分)
抽象类加抽象方法的功能和接口一样,都是约束继承了他的类中必须有指定的方法。
接口中不能写具体实现,抽象类中可以写公共的方法(提供继承的功能)。 - python中应该如何约束派生类中指定的方法并编写示例代码?(3分)
用异常,如:
class Base:
def send(self):
raise NotImplementedError()
class Message(Base):
def send(self):
pass - 如何自定义异常,都需要做哪些?(3分)
写一个类且需要继承Exception
主动触发异常使用 raise XXException()
捕捉异常使用: try … except XXException as e: … - 如何获取异常的堆栈信息?(2分)
import trance
try:
…
except Exception as e:
trance.format_exc()
注意:单独写 trance.format_exc() 也可以。 - 模拟cs游戏(10分)
- 人物角色分为警察和匪徒两种,定义成两个类
- 所有的警察的角色都是police
- 每个警察都有自己独有名字,生命值,武器,性别
- 每个都可以开枪攻击敌人,切攻击目标不能是police
- 所有的匪徒的角色都是terrorist
- 每个匪徒都有自己独有名字,生命值,武器,性别
- 每个都可以开枪攻击敌人,切攻击目标不能是terrorist
- 实例化一个警察,一个匪徒,警察攻击匪徒,匪徒掉血
- 提取警察类和匪徒类相似之处定义成一个父类,使用继承的方式减少代码重复