一次上机试题(面向对象)
生活随笔
收集整理的這篇文章主要介紹了
一次上机试题(面向对象)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1 1.文件操作有哪些模式?請簡述各模式的作用
2 r:讀, 默認(rèn)文件打開就是以r模式,這個文件前提要存在不然報錯。
3 w:寫,文件不存在,會自動創(chuàng)建,存在話,就覆蓋寫。
4 a:追加,文件末尾追加寫入內(nèi)容。
5 r+:可讀也可寫。
6 w+:可寫,,不過寫是覆蓋的寫'
7 a+,追加寫
8
9 2.s = '**hello,world!**'請使用strip方法去掉字符串兩端的'*'號
10 s = '**hello,world!**'
11 s = s.strip('*')
12 print(s)
13
14 3.用戶輸入一個任意數(shù)字n,求1-n之間所有數(shù)字中的奇數(shù)
15
16 while True:
17 num_input = input('請輸入數(shù)字:').strip()
18 if num_input.isdigit() and int(num_input) != 0:
19 num_input = int(num_input)
20 for num in range(1, num_input + 1):
21 if num % 2 == 1:
22 print(num) # 顯示奇數(shù)
23
24 else:
25 continue
26 else:
27 print("輸入非法,請重新錄入")
28 continue
29
30
31 4.s = 'hskakhlkshfkskjakf',請去除s字符串中重復(fù)的字母
32 s = 'hskakhlkshfkskjakf'
33 s_new = []
34 for api in s.strip():
35 if api in s_new:
36 continue
37 else:
38 s_new.append(api)
39 s = "".join(s_new)
40 print(s)
41
42 5.a=10
43 b=20
44 def test5(a,b):
45 print(a,b)
46 c = test5(b,a)
47 print(c)
48 b=20
49
50 def test5(a,b):
51
52 print(a,b)
53 c = test5(b,a)
54 print(c)
55 上述代碼中,打印出來的值a,b,c分別是什么?為什么?
56 報錯,c=test5(b,a),調(diào)用test5,程序的內(nèi)容加載到內(nèi)存,,,從事例看,是位置傳值 ,實參b-->a,實參a--->b,c是函數(shù)的結(jié)果
57 b是直接找到在函數(shù)里找不到,
58 就找外面找到了b=20,,b賦值給形參a, ,所以a會有值
59 同理,,由于實參a沒定義,找不到,沒法給b值,所以直接報錯,并結(jié)束下面代碼的運(yùn)行,print(a,b)不會被執(zhí)行
60 同理,c是在是全局,有定義,由于函數(shù)定義中沒有return,所以c是none,
61 總結(jié):實參a沒定義,報錯,中止函數(shù)體內(nèi)容被執(zhí)行,,所以b,c沒被輸出
62
63
64 6.s = '123.33sdhf3424.34fdg323.324',計算字符串中所有數(shù)字的和
65 s = '123.33sdhf3424.34fdg323.324'
66 import re
67 result = ""
68 s = re.findall('\d+\.?\d+',s)
69 for i in s:
70 result = "+".join(s)
71 print("表達(dá)式:%s 的和是"%result) #123.33+3424.34+323.324
72 su = 0
73 for i in result.split("+"):
74 i = float(i)
75 su += i
76 print(i) #323.324
77
78 本題結(jié)果應(yīng)為:123.33+3424.34+323.32
79 7.d={'k1':'v1','k2':[1,2,3],('k','3'):{1,2,3}}
80 請用程序?qū)崿F(xiàn):
81 1)輸出上述字典中value為列表的key
82 2)如果字典中的key是一個元祖,請輸出對應(yīng)的value值。
83 3)d[('k','3')]對應(yīng)的value是一個什么數(shù)據(jù)類型
84 d={'k1':'v1','k2':[1,2,3],('k','3'):{1,2,3}}
85 for key,value_re in d.items():
86 if type(value_re) == list:
87 print(key)#k2
88 elif type(key) == tuple:
89 print(d[key]) #{1, 2, 3}
90 ty = {"<class 'list'>": "list", "<class 'dict'>": "dict", "<class 'set'>": "set"}
91 for i in ty.keys():
92 if i == str(type(d[key])):
93 print(ty[i]) #set
94
95 8.如果不使用@wrapper裝飾器,請在a()之前加入一句代碼,達(dá)到相同的效果
96 def wrapper(func):
97 def inner(*arg, **kwargs):
98 func(*arg, **kwargs)
99 return inner
100
101 @wrapper
102 def a(arg):
103 print(arg)
104
105 a()
106
107 def wrapper(func):
108 def inner(*arg, **kwargs):
109 func(*arg, **kwargs)
110 return inner
111 # @wrapper
112 def a(arg):
113 print(arg)
114 a = wrapper(a) #這里必須注意,a必須是那個調(diào)用函數(shù)名
115 a(1)
116
117 9.請?zhí)幚砦募?th_questions,輸出所有以'T'開頭的行
118 with open ("7th_questions",'r',encoding='utf-8') as f:
119 for line in f:
120 if line.startswith('T'):
121 print(line.strip())
122 else:
123 continue
124
125 10.讀代碼,請為這段代碼畫流程圖
126
127 11 默寫字符串對象的內(nèi)置方法,越多越好
128 plist = dir(str)
129 s = ""
130 p = []
131 for i in plist:
132 if i.startswith("__"):
133 p.append(i)
134 s = ",".join(p)
135
136 else:
137 continue
138 print(s )
139 __add__,__class__,__contains__,__delattr__,__dir__,__doc__,__eq__,__format__
140 ,__ge__,__getattribute__,__getitem__,__getnewargs__,__gt__,__hash__,__init__,
141 __iter__,__le__,__len__,__lt__,__mod__,__mul__,__ne__,__new__,__reduce__,__reduce_ex__,
142 __repr__,__rmod__,__rmul__,__setattr__,__sizeof__,__str__,__subclasshook__
143
144
145 二 面向?qū)ο?146
147 1.請簡述類、對象、實例化、實例這些名詞的含義:
148 類是一組有著相似特征或者技能的對象集合
149 對象:從類中實例化出來的
150 實例化:產(chǎn)生一個從類中產(chǎn)生一個對象就叫實例化(p = classname.()
151 p 就叫一個classname實例/對象
152 2.面向?qū)ο蟮娜筇匦允鞘裁?#xff1f;
153 封裝,繼承,多態(tài)
154 3.什么是方法?類中可以定義哪幾種方法?
155 定義具有有著相同技能、功能叫方法,可以定義構(gòu)造方法,普通方法,非綁定方法,調(diào)用內(nèi)置方法
156 4.什么是屬性?類中可以定義哪幾種屬性?
157 有著相同特征叫屬性,定義:私有屬性,裝飾屬性
158 5.請簡述類方法和靜態(tài)方法有哪些區(qū)別?
159 類方法:可以綁定到任何從類中實例化出來的對象身上,,并且它的第一個參數(shù)是self,實例化出來的對象引用被當(dāng)作第一
160 參數(shù)傳給self
161 靜態(tài)方法:不需要給參數(shù),調(diào)用方式直接是類名.靜態(tài)方法名() ,也可以是對象調(diào)用 對象名.靜態(tài)方法名()
162 6.請簡述新式類和經(jīng)典類的區(qū)別?
163 py2中,沒有繼承object都是經(jīng)典類,嘗試優(yōu)先
164 py3中,所有類都叫新式類,廣度優(yōu)先
165 7.有一個類定義:
166 class Person:
167 def __init__(self,name,age):
168 self.name = name
169 self.age = age
170
171 1)初始化10個不同的對象
172 2)求最高age的對象的name
173 import sys
174 class Person:
175 def __init__(self,name,age):
176 self.name = name
177 self.age = age
178 dic1 = {}
179 l = []
180 for i in range(1,11):
181 t = "p%s"%i
182 t = Person("name%s"%i,i)
183 dic1[t.name] = i
184 l.append(i)
185 if t.age == max(l):
186 print(t.name)
187
188
189 8. 模擬cs游戲
190 人物角色分為警察和匪徒兩種,定義成兩個類
191 class public_people:
192 def __init__(self,name,sex,livelife,wuqi):
193 self.name = name
194 self.wuqi = wuqi
195 self.sex = sex
196 self.livelife = livelife #生命力
197 class police(public_people):
198 acctrvalue = 800 #攻擊力
199 def __init__(self,name,sex,livelife,wuqi):
200 super().__init__(name,sex,livelife,wuqi)
201
202 def attrk (self,tr_obj):
203 tr_obj.livelife -= self.acctrvalue
204 return tr_obj.acctrvalue
205 class terrorist(public_people):
206 acctrvalue = 300
207 def __init__(self,name,sex,livelife,wuqi):
208 super().__init__(name,sex,livelife,wuqi)
209 def attrk(self,pol_obj):
210 pol_obj.livelife -= self.acctrvalue
211 return pol_obj.livelife
212 p1 = police('name1','male',1000,'dao')
213 t1 = terrorist('t1','male',1000,'dao')
214 p1.attrk(t1)
215 print(t1.livelife,p1.name) #200 name1
216 t1.attrk(p1)
217 print(p1.livelife,t1.name)
218
219 所有的警察的角色都是police
220 每個警察都有自己獨(dú)有名字,生命值,武器,性別
221 每個都可以開槍攻擊敵人,切攻擊目標(biāo)不能是police
222
223 所有的警察的角色都是terrorist
224 每個匪徒都有自己獨(dú)有名字,生命值,武器,性別
225 每個都可以開槍攻擊敵人,切攻擊目標(biāo)不能是terrorist
226
227
228 9. 實例化一個警察,一個匪徒,警察攻擊匪徒,匪徒掉血
229
230 10. 提取警察類和匪徒類相似之處定義成一個父類,使用繼承的方式減少代碼重復(fù)
231
232 11
233
234 class Base:
235 def f1(self):
236 self.f2()
237
238 def f2(self):
239 print('...')
240
241 class Foo(Base):
242 def f2(self):
243 print('9999')
244
245 obj = Foo()
246 obj.f1()
247
248 問題1:面向?qū)ο笾械膕elf指的什么?
249 問題2:運(yùn)行結(jié)果并簡述原因
250 class Base:
251 def f1(self):
252 self.f2()
253
254 def f2(self):
255 print('...')
256
257 class Foo(Base):
258 def f2(self):
259 print('9999')
260 pass
261
262 obj = Foo()
263 obj.f1() #9999
264 self:是調(diào)用對象的引用
265 輸出:9999,是繼承首先是從對象本身找,沒有定義f1,--->對象的類中找,也沒有這個f1,
266 --->去父類中找到f1,f1中調(diào)用的是self.f2,,而名稱空間已經(jīng)有self.f2,所以對象優(yōu)先運(yùn)行自己的f2
267
268
269 三 并發(fā)編程
270
271 1 線程,進(jìn)程,協(xié)程的區(qū)別?
272 線程:最小的執(zhí)行單位
273 進(jìn)程:是資源管理單位
274
275 2 GIL是什么,對于python有什么影響?
276 gil是全局解釋器鎖,,同一時刻,同一進(jìn)程,只有一個線程被執(zhí)行
277 3 解釋LOCK,RLOCL,EVENT,samphore的應(yīng)用場景
278
279 4 基于對列實現(xiàn)一個生產(chǎn)者消費(fèi)者模型,要求:隊列內(nèi)元素不能超過5個,一旦有五個元素了,生產(chǎn)者不再生產(chǎn),其他內(nèi)容 自由擴(kuò)散
280
281 5 基于selectors模塊實現(xiàn)并發(fā)聊天,退出某一個客戶端不能影響其他用戶
282 import selectors
283 import socket
284 sock = socket.socket()
285 sock.bind(("127.0.0.1",8000))
286 sock.listen(5)
287 sock.setblocking(False)
288
289 sel = selectors.DefaultSelector() #選擇最優(yōu)級模型
290
291 def accept(conn,mask):
292 conn,addr = sock.accept()
293 print(conn)
294 sel.register(conn,selectors.EVENT_READ,read)
295 sel.register(sock,selectors.EVENT_READ,accept)
296 def read(conn,mask):
297 try:
298 data = conn.recv(1024)
299 print(data.decode('utf-8'))
300 send_data = input(">>>").encode('utf-8')
301 conn.send(send_data)
302 except Exception as e:
303 sel.unregister(conn) #吊消連接
304
305
306
307 while True:
308 events = sel.select() #監(jiān)聽數(shù)據(jù) [(key,mask),(key,mask)]
309 for key,mask in events:
310 # print(key.data) #產(chǎn)生一個函數(shù)
311 # print(key.fileobj) #產(chǎn)生一個fd(文件描述符)
312 func = key.data
313 obj = key.fileobj
314 func(obj,mask)
315 # break
316
317
318 clinet
319 import socket
320 sock = socket.socket()
321 sock.connect(("127.0.0.1",8000))
322 while True:
323 send_data = input(">>>")
324 sock.send(send_data.encode('utf-8'))
325 recv_data = sock.recv(1024)
326 print(recv_data.decode('utf-8'))
?
件前提要存在不然報錯。 w:寫,文件不存在,會自動創(chuàng)建,存在話,就覆蓋寫。 a:追加,文件末尾追加寫入內(nèi)容。 r+:可讀也可寫。 w+:可寫,,不過寫是覆蓋的寫' a+,追加寫轉(zhuǎn)載于:https://www.cnblogs.com/hongyongshang/p/6846614.html
總結(jié)
以上是生活随笔為你收集整理的一次上机试题(面向对象)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最终成为了热门的语言——python
- 下一篇: python之进程和线程2