1

Day 31 面向对象考试题 第四次考试.

一 基础知识和函数:

1.文件操作有哪些模式?请简述各模式的作用
r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
w,只写模式【不可读;不存在则创建;存在则清空内容】
x, 只写模式【不可读;不存在则创建,存在则报错】
a, 追加模式【可读; ? 不存在则创建;存在则只追加内容】
"+" 表示可以同时读写某个文件
r+, 读写【可读,可写】
w+,写读【可读,可写】
x+ ,写读【可读,可写】
a+, 写读【可读,可写】
"b"表示以字节的方式操作
rb 或 r+b
wb 或 w+b
xb或 w+b
ab或 a+b

2.s = '**hello,world!**'请使用strip方法去掉字符串两端的'*'号

3.用户输入一个任意数字n,求1-n之间所有数字中的奇数

4.s = 'hskakhlkshfkskjakf',请去除s字符串中重复的字母

s = 'hskakhlkshfkskjakf'
x=''
for i in s:
if i not in x:
x+=i
print(x)

5.a=10
b=20
def test5(a,b):
print(a,b)
c = test(b,a)
print(c)
上述代码中,打印出来的值a,b,c分别是什么?为什么?

6.s = '123.33sdhf3424.34fdg323.324',计算字符串中所有数字的和
本题结果应为:123.33+3424.34+323.32

7.d={'k1':'v1','k2':[1,2,3],('k','3'):{1,2,3}}
请用程序实现:
1)输出上述字典中value为列表的key
2)如果字典中的key是一个元祖,请输出对应的value值。
3)d[('k','3')]对应的value是一个什么数据类型

8.如果不使用@wrapper装饰器,请在a()之前加入一句代码,达到相同的效果
def wrapper(func):
def inner(*arg, **kwargs):
func(*arg, **kwargs)
return inner

#@wrapper
def a(arg):
print(arg)


9.请处理文件7th_questions,输出所有以'T'开头的行

10.读登陆.zip文件中的代码,请为这段代码画流程图

11 默写字符串对象的内置方法,越多越好

 


二 面向对象

1.请简述类、对象、实例化、实例这些名词的含义:

类: 类是对有相同属性和相似行为的一类事物的抽象。

对象: 是一个具有具体属性值的类的实例化.

实例化 :从一个抽象的类产生一个具体对象的过程. 

实例:就是对象.

 

 

2.面向对象的三大特性是什么?

继承 ,多态,封装

3.什么是方法?类中可以定义哪几种方法?

在类中的函数就是方法 ,描述一类事物的行为。

类方法 ,静态方法 私有方法 内置方法 ,属性方法(@property)

 

4.什么是属性?类中可以定义哪几种属性?

类和对象所拥有的具体的‘值 ’指标

静态属性 ,私有属性 动态属性 (方法) 对象属性.

5.请简述类方法和静态方法有哪些区别?

装饰器不同 @staticmethod @ classmethod 

类方法中有一个默认的参数,clas, 而静态方法没有.

6.请简述新式类和经典类的区别?

 经典类 遵循深度优先算法并且没有mro方法 用在python2中

新式类 遵循广度优先算法 有 mor方法 用在python2 和python3中.

 

7.有一个类定义: 
class Person:
def __init__(self,name,age):
self.name = name
self.age = age

1)初始化10个不同的对象

2)求最高age的对象的name

8. 模拟cs游戏
人物角色分为警察和匪徒两种,定义成两个类


所有的警察的角色都是police
每个警察都有自己独有名字,生命值,武器,性别
每个都可以开枪攻击敌人,切攻击目标不能是police


所有的警察的角色都是terrorist
每个匪徒都有自己独有名字,生命值,武器,性别
每个都可以开枪攻击敌人,切攻击目标不能是terrorist

# class Police:  #类名 Police
# def __init__(self,name,value,weapon,sex): #动态属性
# self.name =name #对象属性,实例化属性
# self.value =value
# self.weapon =weapon
# self.sex =sex
# def attck(self,enemy): #自定义方法
# print('%s作为警察攻击了 %s ' %(self.name,enemy.name) )
# enemy.value -=self.weapon
# class Terrorsit: #类名Terrorist
# def __init__(self,name,value,weapon,sex):
# self.name =name
# self.value =value
# self.weapon =weapon
# self.sex =sex
# def kill(self,police):
# print('%s 作为敌人攻击了%s'%(self.name,police.name))
# police.value -= self.weapon

 


9. 实例化一个警察,一个匪徒,警察攻击匪徒,匪徒掉血

 

# policeman_alex = Police('alex' ,100,20, 'male')
# terrorist_egon = Terrorsit('egon',800,30,'male')
# policeman_alex.attck(terrorist_egon)
# print(terrorist_egon.value)
# 输出结果为
# alex作为警察攻击了 egon
# 780

 

10. 提取警察类和匪徒类相似之处定义成一个父类,使用继承的方式减少代码重复

class Person:#定义一个父类.
def __init__(self,name,value,weapon,sex):
self.name =name
self.value =value
self.weapon =weapon
self.sex =sex
class Police: #类名 Police 继承Person父类
def attck(self,enemy): #自定义方法
print('%s作为警察攻击了 %s ' %(self.name,enemy.name) )
enemy.value -=self.weapon
class Terrorsit: #类名Terrorist ,继承Person父类
def kill(self,police):
print('%s 作为敌人攻击了%s'%(self.name,police.name))
police.value -= self.weapon


11.

class Base:
def f1(self):
self.f2()

def f2(self):
print('...')

class Foo(Base):
def f2(self):
print('9999')

obj = Foo()
obj.f1()

问题1:面向对象中的self指的什么?
问题2:运行结果并简述原因

 

思考题:
有一个类的init方法如下:
class Person:
def __init__(self,name,age,sex,weight):
self.name = name
self.sex = sex
self.age = age
self.weight = weight
假设有100个person的对象,
若两个对象的obj1,obj2的name和sex属性相同
即obj1.name==obj2.name and obj1.sex==obj2.sex
我们认为两个对象为同一个对象,已知一个列表中的100个对象,对这100个对象进行去重。
提示:
重写Person类重的两个内置方法

 

class Person:#定义一个类
    def __init__(self,name,age,sex): #初始化属性
        self.name = name #对象的name属性
        self.age = age #对象的age属性
        self.sex = sex #对象的sex属性
    def __hash__(self): #定义哈希方法
        return hash('%s%s'%(self.name,self.sex)) #返回hash'self.name,self.sex'的值
    def __eq__(self, other): #定义一个eq方法
        if self.name == other.name and  \
            self.sex == other.sex: #如果对象属性等于
            return True
p_lst = [] #定义个空列表
for i in range(100):#打印0到99
    p_lst.append(Person('egon',i,'male'))#p_lst列表添加Person('egon',i,'male')
p_lst.append(Person('alex',i,'male'))#p_lst列表添加Person('alex',i,'male')
p_lst.append(Person('yuan',i,'male'))#p_lst列表添加Person('yuan',i,'male')
print(p_lst)
# print(set(p_lst)) # 报错不可hash 完成了__hash__
# hash是否相等   __hash__
# 值是否相等     __eq__
# a==b
# 收获1
# 对于一些python当中已经存在的内置函数 内置数据类型 内置模块中的方法
# 都有可能依赖于类中的内置方法
# 收获2
# set方法依赖集合中元素对象的__hash__ __eq__

 

 

 

 

 

posted @ 2018-03-19 14:58  萌哥-爱学习  阅读(796)  评论(0编辑  收藏  举报