python 面向對象exam複習

 

1.文件操做有哪些模式?請簡述各模式的做用python

答:r模式只讀  w模式只寫 a模式只添加   r+可讀可寫  w+可寫可讀  a+可讀可添加   rb  二進制只讀  wb 二進制只寫   ab 二進制添加git

2.s = ‘**hello,world!**‘請使用strip方法去掉字符串兩端的’*’號api

第一種:
   s=s.strip(‘**‘)
第二種
   s=s.lstrip(‘**")
   s=s.rstrip(‘**‘)
 
3.用戶輸入一個任意數字n,求1-n之間全部數字中的奇數app

li=[]
n=input(‘請輸入一個數字‘)
n=int(n)
for i in range(1,n+1):        //範圍1到n,range不取n因此是n+1
    if i%2==1:                     //取餘看等於1是奇數
        li.append(i)              //是奇數添加進列表
print(li)函數

4.s = ‘hskakhlkshfkskjakf‘,請去除s字符串中重複的字母對象

答:
s = ‘hskakhlkshfkskjakf‘
li=[]
for item in s:       
    if item not in li:             //循環字符串,若是這個字符不在列表中就添加進去
      li.append(item)
s=‘‘                               //建立一個空字符串
for it in li:                        //循環這個列表中不重複的字符,由於沒有才添加進列表因此不重複
    s+=it                        //這些字符串相加起來就是一整個字符串而後打印
print(s)繼承


5.a=10
  b=20
  def test5(a,b):
     print(a,b)
  c = test(b,a)
  print(c)
  上述代碼中,打印出來的值a,b,c分別是什麼?爲何?
 
 答:test後面沒有5沒法調用這個函數有問題  若是有5的話,調用的時候是反着傳的,b的值給了a因此是20,a的值給了b因此是10,這個函數沒有返回值,全部c是none
 
6.s = ‘123.33sdhf3424.34fdg323.324‘,計算字符串中全部數字的和
  本題結果應爲:123.33+3424.34+323.32
 
答:import re              
s = ‘123.33sdhf3424.34fdg323.324‘               
v=re.findall(‘\d+.*?\d+‘,s)                     //用正則取數字
c=0
for item in v:            //循環出v而後變成浮點類型相加
    item =float(item)
    c+=item
print(c)索引


7.d={‘k1‘:‘v1‘,‘k2’:[1,2,3],(‘k’,’3’):{1,2,3}}
  請用程序實現:
  1)輸出上述字典中value爲列表的key
 
  答:d={‘k1‘:‘v1‘,‘k2‘:[1,2,3],(‘k‘,‘3‘):{1,2,3}}
for item in d:
    if type(d[item]) == list:                 //若是這個key的value類型是list的話就打印出來
        print(item)
 
  2)若是字典中的key是一個元祖,請輸出對應的value值。
 
  答:d={‘k1‘:‘v1‘,‘k2‘:[1,2,3],(‘k‘,‘3‘):{1,2,3}}
for item in d:
    if type(item) == tuple:            //方法同上,不過判斷的是key
        print(d[item])
 
  3)d[(‘k‘,‘3‘)]對應的value是一個什麼數據類型
 
  答:集合  set
 
 
8.若是不使用@wrapper裝飾器,請在a()以前加入一句代碼,達到相同的效果
def wrapper(func):
    def inner(*arg, **kwargs):
        func(*arg, **kwargs)
    return inner遊戲

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

a()

答:在a()以前加一句  a=wrapper(a)

9.請處理文件7th_questions,輸出全部以‘T‘開頭的行

答:f=open(‘7th_questions‘,encoding=‘utf-8‘,mode=‘r‘)
v=f.readlines()
for item in v:
    if item[0]==‘T‘:
        print(item)

11 默寫10個字符串對象的內置方法,描述它的做用

-strip()  去括號去其餘
-replace()  替換
-upper()   全變大寫
-lower()  變小寫
-capitalize()  首字母大寫
-isdigit()  判斷是否數字
-split()  分割
-join()   迭代
-count()  看一個字符在字符串出現多少次
-starswith()  看第一個字符是不是
-input()  輸入一個字符

1.請簡述類、對象、實例化、實例這些名詞的含義

答:類:具備屬性和方法的事物
對象:能夠實實在在描述出來的有屬性的事物
實例化:創造對象的過程
實例:將對象利用類的屬性和方法創造出來出來

2.面向對象的三大特性是什麼?(3分)
封裝

繼承

多態

3.什麼是方法?類中能夠定義哪幾種方法?

答:類中的函數就是方法
def __init__(self)方法,對象屬性
def p(self)方法  可直接調用的方法

私有方法

類方法

靜態方法

普通方法

4.什麼是屬性?類中能夠定義哪幾種屬性?
類能夠賦給對象或者本身自己可調用的值   靜態屬性和對象屬性,私有屬性
5.請簡述類方法和靜態方法有哪些區別?
類方法必須傳一個類可使用類屬性,靜態方法沒必要須傳參不能用類屬性
6.請簡述新式類和經典類的區別?
pythong2中要用新式的話,就要傳基類object,經典類不用
新式類是廣度優先
經典類是深度優先
7.有一個類定義:
    class Person:
        def __init__(self,name,age):
            self.name = name
            self.age = age

    1)初始化10個不一樣的對象
 v=Person(‘t‘,2)
v_1=Person(‘v‘,3)
v_2=Person(‘w‘,4)
v_3=Person(‘q‘,5)
v_4=Person(‘p‘,7)
v_5=Person(‘i‘,11)
v_6=Person(‘r‘,22)
v_7=Person(‘yy‘,33)
v_8=Person(‘oi‘,54)
v_9=Person(‘tt‘,123)
    2)求最高age的對象的name
 d={‘v‘:v,‘v_1‘:v_1,‘v_2‘:v_2,‘v_3‘:v_3,‘v_4‘:v_4,‘v_5‘:v_5,
   ‘v_6‘:v_6,‘v_7‘:v_7,‘v_8‘:v_8,‘v_9‘:v_9}
li=[0,1]
for item in d.values():                //設置一個列表前兩個值是0,1
    if item.age >li[0]:              //循環字典的value,若是值比列表0索引值大,就替換,1索引的key值也替換
        li[0]=item.age
        li[1]=item
    else:
        pass
print(li[1].name)                   //最後列表1索引留下的ey名就是值最大的
8. 模擬cs遊戲
 1)人物角色分爲警察和匪徒兩種,定義成兩個類

  全部的警察的角色都是police
  每一個警察都有本身獨有名字,生命值,武器,性別
  每一個均可以開槍攻擊敵人,切攻擊目標不能是police


  全部的警察的角色都是terrorist
  每一個匪徒都有本身獨有名字,生命值,武器,性別
  每一個均可以開槍攻擊敵人,切攻擊目標不能是terrorist

答:
class Jing:
    def __init__(self,name,blood,wuqi,sex,aggr):
        self.name=name
        self.blood = blood
        self.wuqi = wuqi
        self.sex = sex
        self.aggr = aggr
        self.juese=‘police‘
    def attack(self,fei):
        if fei.juese !=‘police‘:
            print(‘%s開槍打了%s‘%(self.name,fei.name))
            fei.blood=fei.blood-self.aggr
class Fei:
    juese=‘feitu‘
    def __init__(self,name,blood,wuqi,sex,aggr):
        self.name=name
        self.blood = blood
        self.wuqi = wuqi
        self.sex = sex
        self.aggr = aggr
        self.juese = ‘terrorist‘
    def attack(self,jing):
        if jing.juese != ‘terrorist‘:
            print(‘%s開槍打了%s‘ % (self.name,jing.name))
            jing.blood = jing.blood - self.aggr
    
 2)實例化一個警察,一個匪徒,警察攻擊匪徒,匪徒掉血
class Jing:
    def __init__(self,name,blood,wuqi,sex,aggr):
        self.name=name
        self.blood = blood
        self.wuqi = wuqi
        self.sex = sex
        self.aggr = aggr
        self.juese=‘police‘
    def attack(self,fei):
        if fei.juese !=‘police‘:
            print(‘%s開槍打了%s‘%(self.name,fei.name))
            fei.blood=fei.blood-self.aggr
            print(‘%s掉血%s‘%(fei.name,fei.blood))
class Fei:
    juese=‘feitu‘
    def __init__(self,name,blood,wuqi,sex,aggr):
        self.name=name
        self.blood = blood
        self.wuqi = wuqi
        self.sex = sex
        self.aggr = aggr
        self.juese = ‘terrorist‘
    def attack(self,jing):
        if jing.juese != ‘terrorist‘:
            print(‘%s開槍打了%s‘ % (self.name,jing.name))
            jing.blood = jing.blood - self.aggr
            print(‘%s掉血%s‘ % (jing.name,jing.blood))
wujing=Jing(‘wujing‘,20000,‘衝鋒槍‘,‘man‘,500)
feitu=Fei(‘feitu‘,20000,‘小匕首‘,‘man‘,50)
wujing.attack(feitu)
 
 3)提取警察類和匪徒類類似之處定義成一個父類,使用繼承的方式減小代碼重複
class Person:
    def __init__(self,name,blood,wuqi,sex,aggr):
        self.name=name
        self.blood = blood
        self.wuqi = wuqi
        self.sex = sex
        self.aggr = aggr
class Jing(Person):
    def __init__(self,name,blood,wuqi,sex,aggr):
        super().__init__(name,blood,wuqi,sex,aggr)
        self.juese=‘police‘
    def attack(self,fei):
        if fei.juese !=‘police‘:
            print(‘%s開槍打了%s‘%(self.name,fei.name))
            fei.blood=fei.blood-self.aggr
            print(‘%s掉血%s‘%(fei.name,fei.blood))
class Fei(Person):
    juese=‘feitu‘
    def __init__(self,name,blood,wuqi,sex,aggr):
       super().__init__(name,blood,wuqi,sex,aggr)
       self.juese = ‘terrorist‘
    def attack(self,jing):
        if jing.juese != ‘terrorist‘:
            print(‘%s開槍打了%s‘ % (self.name,jing.name))
            jing.blood = jing.blood - self.aggr
            print(‘%s掉血%s‘ % (jing.name,jing.blood))
wujing=Jing(‘wujing‘,20000,‘衝鋒槍‘,‘man‘,500)
feitu=Fei(‘feitu‘,20000,‘小匕首‘,‘man‘,50)
wujing.attack(feitu)
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:運行結果並簡述緣由

答:實例化了一個obj,由於Foo的父類是Base因此,子類沒有f1就用父類的f1,有f2就用子類的f2 而後obj調用了f1,在f1中由於self是對象自己,因此f1方法中調用了obj的f2,而由於繼承的規則,不調用父類的f2,因此結果是9999

相關文章
相關標籤/搜索