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__
Day 31 面向对象考试题 第四次考试.的更多相关文章
- Java面向对象  IO  (四)
		 Java面向对象 IO (四) 知识概要: (1)打印流 (2)序列流 SequenceInputStream (3)ObjectInputStream与Ob ... 
- 面向对象程序设计第四单元总结(UML系列)
		2019面向对象程序设计第四单元总结 前言  本单元是面向对象程序设计课程的最后一个单元了,本单元是和UML模型相关,也就是说,我们需要正确理解UML模型的基础上,对构建出的UML模型进行解析,但是 ... 
- 《C++ Primer》之面向对象编程(四)
		纯虚函数 在前面所提到过的 Disc_item 类提出了一个有趣的问题:该类从 Item_base 继承了 net_price 函数但没有重定义该函数.因为对 Disc_item 类而言没有可以给予该 ... 
- JavaScript 面向对象编程(四)的常用方法、属性总结
		面向对象的属性.方法.操作符总结,都是干货.想深入掌握面向对象的程序设计模式,必须掌握一下知识点.下列知识点注重于实现,原理还请借鉴<javascript高级程序设计> (基于javasc ... 
- 【面向对象】第四单元总结——UML
		本单元构架设计 统一建模语言(英语:Unified Modeling Language,缩写 UML)是非专利的第三代建模和规约语言.UML是一种开放的方法,用于说明.可视化.构建和编写一个正在开发的 ... 
- 前端学PHP之面向对象系列第四篇——关键字
		× 目录 [1]public [2]protected [3]private[4]final[5]static[6]const[7]this[8]self[9]parent 前面的话 php实现面向对 ... 
- javascript面向对象系列第四篇——选项卡的实现
		前面的话 面向对象的应用并非只是读几本书那么容易,需要有大量的工程实践做基础才能真正理解并学会使用它.本文将用面向对象的技术来制作一个简单的选项卡 图示说明 由图示结果看到,这是一个非常简单的选项卡. ... 
- java面向对象编程——第四章  类和对象
		OO:面向对象 OOP:面向对象编程 OOA:面向对象分析 OOD:面向对象设计 结构化编程:从顶向下,将一个大问题分解成更小的任务,然后为每一个更小的任务编写一个过程.最后程序员会编写一个主过程来启 ... 
- javascript面向对象系列第四篇——OOP中的常见概念
		前面的话 面向对象描述了一种代码的组织结构形式——一种在软件中对真实世界中问题领域的建模方法.本文将从理论层面,介绍javascript面向对象程序程序(OOP)中一些常见的概念 对象 所谓对象,本质 ... 
随机推荐
- php的高性能日志系统 seaslog 的安装与使用
			一.什么是日志系统 一般用于记录系统运行时的信息,一般分为三类:系统日志,应用程序日志,安全日志.日志功能不能影响用户的正常使用. 二.为什么需要日志功能 1.了解系统运行情况 2. ... 
- git pull和git fetch命令
			git pull和git fetch命令 git pull git pull命令的作用是取回远程主机某个分支的更新,在与本地指定分支合并,格式如下: $ git pull <远程主机名>& ... 
- ecplise导入工程出现乱码的解决方案
			eclipse之所以会出现乱码问题是因为eclipse编辑器选择的编码规则是可变的.一般默认都是UTF-8或者GBK,当从外部导入的一个工程时,如果该工程的编码方式与eclipse中设置的编码方式不同 ... 
- [转]Win7下PEiD已停止工作
			转载自:http://www.programlife.net/peid-stop-working-under-win7.html PEID是一个很不错的工具,可查壳,查壳PE信息,借助插件还可以做一些 ... 
- vue2.0学习小列子
			参考地址:https://segmentfault.com/a/1190000006165434 例1: <template> <div id="app"> ... 
- PAT 1058 选择题(20)(代码+思路)
			1058 选择题(20 分) 批改多选题是比较麻烦的事情,本题就请你写个程序帮助老师批改多选题,并且指出哪道题错的人最多. 输入格式: 输入在第一行给出两个正整数 N(≤ 1000)和 M(≤ 100 ... 
- 如何在c语言中源文件调用另一个源文件的函数
			在源文件A1.c中调用A2.c 中的函数有两种方法: 1.在A2.c中有完整的函数定义,在A1.c中添加一下要用到的函数原型(声明)就可以了,例如:在A2.c中:有函数void A2(){...};在 ... 
- jquery  元素筛选   13.6.20
			<ul> <li>list item 1</li> <li>list item 2</li> <li class="thir ... 
- eclipse 配置动态web项目在servers中运行
			第一步: window->preferences:Server->Runtime Environments窗口,add. 第二步: window->preferences:Proje ... 
- 2018.09.12 poj2376Cleaning Shifts(线段树+简单dp)
			传送门 貌似贪心能过啊%%%. 本蒟蒻写的线段树优化dp. 式子很好推啊. f[i]表示覆盖1~i所需的最小代价. 那么显然对于一个区间[li,ri]" role="present ... 
